Diff
Property changes: freeswitch/branches/seven
Name: svn:ignore
- freeswitch-sounds-*.tar.gz
.deps
Makefile
config.status
modules.conf
libtool
quiet_libtool
config.log
.version
.libs
autom4te.cache
freeswitch
core.*
debug
release
*.ncb
*.suo
*.bak
.noversion
testmode
.complete
*.c
*.patch
*.tmp
wtf
cc-mode-*
config.cache
Makefile.in
AUTHORS
COPYING
NEWS
ChangeLog
configure
README
aclocal.m4
debug static
release static
Debug
Debug Static
Release
Freeswitch.2008cache.dat
Freeswitchcache.dat
Release Static
bin
*.diff
*.pdb
+ freeswitch-sounds-*.tar.gz
.deps
Makefile
config.status
modules.conf
libtool
quiet_libtool
config.log
.version
.libs
autom4te.cache
freeswitch
core.*
debug
release
*.ncb
*.suo
*.bak
.noversion
testmode
.complete
*.c
*.patch
*.tmp
wtf
cc-mode-*
config.cache
Makefile.in
AUTHORS
COPYING
NEWS
ChangeLog
configure
README
aclocal.m4
debug static
release static
Debug
Debug Static
Release
Freeswitch.2008cache.dat
Freeswitchcache.dat
Release Static
bin
*.diff
*.pdb
cmake.test
All
x64
spandsp.h
Release_CLR
fs_cli
fs_ivrd
.
status
Copied: freeswitch/branches/seven/CMakeLists.txt (from rev 14471, freeswitch/trunk/CMakeLists.txt) (0 => 14472)
--- freeswitch/branches/seven/CMakeLists.txt (rev 0)
+++ freeswitch/branches/seven/CMakeLists.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,291 @@
+# FREESWITCH CMAKE BUILD
+# Created by SHANE BURRELL 2009 (supjigator)
+
+PROJECT (freeswitch)
+
+#GETSVN VERSION
+FIND_PACKAGE(Subversion)
+IF(Subversion_FOUND)
+ Subversion_WC_INFO(${CMAKE_HOME_DIRECTORY} Project)
+ MESSAGE("Current revision is ${Project_WC_REVISION}")
+ENDIF(Subversion_FOUND)
+
+
+
+# project version
+SET( ${PROJECT_NAME}_MAJOR_VERSION 1 )
+SET( ${PROJECT_NAME}_MINOR_VERSION 0 )
+SET( ${PROJECT_NAME}_PATCH_LEVEL 0 )
+
+configure_file(src/include/switch_version.h.cmake src/include/switch_version.h [@ONLY])
+
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/")
+INCLUDE (CheckSymbolExists)
+INCLUDE (CheckIncludeFile)
+INCLUDE (CheckIncludeFiles)
+INCLUDE (CheckSymbolExists)
+INCLUDE (CheckFunctionExists)
+INCLUDE (CheckLibraryExists)
+INCLUDE (CheckTypeSize)
+INCLUDE (CheckCXXSourceCompiles)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+MESSAGE( STATUS )
+MESSAGE( STATUS "FREESWITCH CMAKE Build-----------------------------------------" )
+MESSAGE( STATUS "BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}" )
+MESSAGE( STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}" )
+MESSAGE( STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}" )
+MESSAGE( STATUS "CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}" )
+MESSAGE( STATUS "${PROJECT_NAME}_DEPENDS = \"${${PROJECT_NAME}_DEPENDS}\"" )
+MESSAGE( STATUS "BUILD_WITH = \"${BUILD_WITH}\"" )
+MESSAGE( STATUS "INSTALL_DOC = ${INSTALL_DOC}" )
+MESSAGE( STATUS "Change a value with: cmake -D<Variable>=<Value>" )
+MESSAGE( STATUS "---------------------------------------------------------------" )
+MESSAGE( STATUS )
+
+# Configuration checks
+
+
+
+## Check type sizes --------------------------------------
+
+ check_type_size ("int" SIZEOF_INT )
+ check_type_size ("uint32_t" HAVE_UINT32_T )
+ check_type_size ("int64_t" HAVE_INT64_T )
+ check_type_size ("float" SIZEOF_FLOAT )
+ check_type_size ("double" SIZEOF_DOUBLE )
+ check_type_size ("long" SIZEOF_LONG )
+ check_type_size ("long long" SIZEOF_LONG_LONG )
+ check_type_size ("short" SIZEOF_SHORT )
+ check_type_size ("off_t" SIZEOF_OFF_T )
+ check_type_size ("pid_t" SIZEOF_PID_T )
+ check_type_size ("size_t" SIZEOF_SIZE_T )
+ check_type_size ("socklen_t" SIZEOF_SOCKLEN_T )
+ check_type_size ("sig_atomic_t" SIZEOF_SIG_ATOMIC_T )
+ check_type_size ("void *" SIZEOF_VOID_P )
+ check_type_size ("uintptr_t" SIZEOF_UINTPTR_T )
+ check_type_size ("_Bool" HAVE__BOOL )
+ check_type_size ("intptr_t" SIZEOF_INTPTR_T )
+
+ check_type_size ("struct sockaddr_in6" SIZEOF_STRUCT_SOCKADDR_IN6 )
+ check_type_size ("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE )
+ check_type_size ("struct utimbuf" SIZEOF_STRUCT_UTIMBUF )
+
+
+
+
+
+
+check_symbol_exists (strncasecmp "string.h" HAVE_STRNCASECMP)
+check_symbol_exists (strcasecmp "string.h" HAVE_STRCASECMP)
+check_symbol_exists (iswspace "wctype.h" HAVE_ISWSPACE)
+check_symbol_exists (towlower "wctype.h" HAVE_TOWLOWER)
+check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE)
+check_symbol_exists(isinf cmath HAVE_ISINF_IN_CMATH)
+check_symbol_exists(isinf math.h HAVE_ISINF_IN_MATH_H)
+check_symbol_exists(isnan cmath HAVE_ISNAN_IN_CMATH)
+check_symbol_exists(isnan math.h HAVE_ISNAN_IN_MATH_H)
+check_symbol_exists(ceilf math.h HAVE_CEILF)
+check_symbol_exists(floorf math.h HAVE_FLOORF)
+check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
+check_symbol_exists(pthread_mutex_lock pthread.h HAVE_PTHREAD_MUTEX_LOCK)
+check_symbol_exists(strtoll stdlib.h HAVE_STRTOLL)
+check_symbol_exists(getrusage sys/resource.h HAVE_GETRUSAGE)
+check_symbol_exists(setrlimit sys/resource.h HAVE_SETRLIMIT)
+
+check_include_file (dirent.h HAVE_DIRENT_H)
+check_include_file (dlfcn.h HAVE_DLFCN_H)
+check_include_file (execinfo.h HAVE_EXECINFO_H)
+check_include_file (memory.h HAVE_MEMORY_H)
+check_include_file (inttypes.h HAVE_INTTYPES_H)
+check_include_file (strings.h HAVE_STRINGS_H)
+check_include_file (string.h HAVE_STRING_H)
+check_include_file (sys/filio.h HAVE_SYS_FILIO_H)
+check_include_file (sys/ndir.h HAVE_SYS_NDIR_H)
+CHECK_INCLUDE_FILE(netdb.h HAVE_NETDB_H)
+
+check_include_file(malloc.h HAVE_MALLOC_H)
+check_include_file (sys/ioctl.h HAVE_SYS_IOCTL_H)
+check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H)
+check_include_file (wchar.h HAVE_WCHAR_H)
+check_include_file (wctype.h HAVE_WCTYPE_H)
+check_include_file(sys/devpoll.h HAVE_SYS_DEVPOLL_H)
+check_include_file(sys/epoll.h HAVE_SYS_EPOLL_H)
+check_include_file(sys/event.h HAVE_SYS_EVENT_H)
+check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
+check_include_file(sys/poll.h HAVE_SYS_POLL_H)
+check_include_file(sys/port.h HAVE_SYS_PORT_H)
+check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H)
+check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H)
+check_include_file(sys/sendfile.h HAVE_SYS_SENDFILE_H)
+check_include_file(sys/select.h HAVE_SYS_SELECT_H)
+check_include_file(sys/syslimits.h HAVE_SYS_SYSLIMITS_H)
+check_include_file(sys/types.h HAVE_SYS_TYPES_H)
+check_include_file(sys/uio.h HAVE_SYS_UIO_H)
+check_include_file(sys/un.h HAVE_SYS_UN_H)
+check_include_file(sys/wait.h HAVE_SYS_WAIT_H)
+check_include_file(sys/time.h HAVE_SYS_TIME_H)
+check_include_file(time.h HAVE_TIME_H)
+check_include_file(unistd.h HAVE_UNISTD_H)
+check_include_file(pthread.h HAVE_PTHREAD_H)
+
+check_function_exists (scandir HAVE_SCANDIR)
+check_function_exists (alphasort HAVE_ALPHASORT)
+check_function_exists (strcasestr HAVE_STRCASESTR)
+check_function_exists (strchrnul HAVE_STRCHRNUL)
+check_function_exists (setenv HAVE_SETENV)
+check_function_exists (setgroups HAVE_SETGROUPS)
+
+check_function_exists (clock_gettime HAVE_CLOCK_GETTIME)
+check_function_exists (pselect HAVE_PSELECT)
+check_function_exists (malloc HAVE_MALLOC)
+check_function_exists (mlock HAVE_MLOCK)
+check_function_exists (mlockall HAVE_MLOCKALL)
+check_function_exists (asprintf HAVE_ASPRINTF)
+check_function_exists (gethostname HAVE_GETHOSTNAME)
+check_function_exists (gettimeofday HAVE_GETTIMEOFDAY)
+check_function_exists (gmtime_r HAVE_GMTIME_R)
+check_function_exists (initgroups HAVE_INITGROUPS)
+check_function_exists (usleep HAVE_USLEEP)
+check_function_exists (vasprintf HAVE_VASPRINTF)
+
+
+MESSAGE( STATUS "BUILD APR--------------------------------------------------------------------------" )
+
+#execute_process (WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/apr/ COMMAND ./configure --prefix=/usr/local/freeswitch --enable-core-odbc-support --cache-file=/dev/null --srcdir=. --disable-shared --with-pic TIMEOUT 300 ERROR_VARIABLE error_configure ERROR_FILE error.log)
+
+#execute_process (WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/apr/ COMMAND ./make TIMEOUT 300 ERROR_VARIABLE error_configure ERROR_FILE error.log)
+MESSAGE( STATUS "-------------------------------------------------------------------------------" )
+
+MESSAGE( STATUS "BUILD APR-UTIL--------------------------------------------------------------------------" )
+
+#execute_process (WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/apr-util/ COMMAND ./configure --prefix=/usr/local/freeswitch --enable-core-odbc-support --cache-file=/dev/null --srcdir=. --with-apr=../apr --disable-shared --with-pic --without-sqlite2 --without-sqlite3 TIMEOUT 300 ERROR_VARIABLE error_configure ERROR_FILE error.log)
+
+#execute_process (WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/apr-util/ COMMAND ./make TIMEOUT 300 ERROR_VARIABLE error_configure ERROR_FILE error.log)
+
+MESSAGE( STATUS "-------------------------------------------------------------------------------" )
+
+
+# OPTION( VARIABLE "Description" Initial state)
+ OPTION( DEBUG "Debug" OFF )
+ OPTION( DISABLE_RESAMPLE "Disable RESAMPLE" OFF )
+ OPTION( HAVE_ODBC "Enable Core ODBC Support" ON )
+ OPTION( OPTIMZER "Enable Optimization" OFF )
+
+ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/src/include/switch_private.h.cmake ${CMAKE_SOURCE_DIR}/src/include/switch_private.h )
+
+
+
+
+
+
+MESSAGE( STATUS "-------------------------------------------------------------------------------" )
+MESSAGE( STATUS )
+MESSAGE( STATUS "-------------------------------------------------------------------------------" )
+MESSAGE( STATUS )
+# the complete system name, e.g. "Linux-2.4.22", "FreeBSD-5.4-RELEASE" or "Windows 5.1"
+MESSAGE( STATUS "CMAKE_SYSTEM: " ${CMAKE_SYSTEM} )
+# the short system name, e.g. "Linux", "FreeBSD" or "Windows"
+
+MESSAGE( STATUS "-------------------------------------------------------------------------------" )
+MESSAGE( STATUS )
+
+# DO THREADS
+FIND_PACKAGE(Threads)
+
+
+#TESTING SECTION
+add_definitions(-DMACOSX)
+#add_definitions("-DSWITCH_PREFIX_DIR=/usr/local/freeswitch")
+
+
+
+INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/libs/apr/include/ ${CMAKE_SOURCE_DIR}/libs/apr-util/include/ src/include/ libs/libteletone/src/ libs/stfu/)
+
+# DO APR
+#INCLUDE_DIRECTORIES ( ${CMAKE_SOURCE_DIR}/libs/apr/include/ ${CMAKE_SOURCE_DIR}/libs/apr-util/include/)
+#LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/apr/.libs/libapr-1.a)
+#LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/apr-util/.libs/libaprutil-1.a)
+
+
+# DO SNDFILE
+
+FIND_PACKAGE (Sndfile)
+LINK_LIBRARIES (${SNDFILE_LIBRARY})
+INCLUDE_DIRECTORIES (${SNDFILE_INCLUDE_DIR})
+
+
+# DO LIBEDIT
+#FIND_PACKAGE (Libedit)
+#LINK_LIBRARIES ("/Users/shaneburrell/freeswitch-svn-real/libs/libedit/src/.libs/libedit.a")
+#INCLUDE_DIRECTORIES("libs/libedit/src/")
+#LINK_LIBRARIES (${PATH_LIB_EDIT})
+#INCLUDE_DIRECTORIES (${PATH_INC_EDIT})
+
+#if( PATH_LIB_EDIT)
+# add_definitions( -DSWITCH_HAVE_LIBEDIT)
+# add_definitions( -DHAVE_EDITLINE)
+# MESSAGE( STATUS "Found libedit = ${PATH_LIB_EDIT}" )
+#endif( PATH_LIB_EDIT)
+
+
+
+
+# DO SRTP
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/srtp/.libs/libcryptomath.a)
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/srtp/.libs/libsrtp.a)
+INCLUDE_DIRECTORIES ( ${CMAKE_SOURCE_DIR}/libs/srtp/crypto/include)
+
+# SQLITE
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/sqlite/.libs/libsqlite3.a)
+INCLUDE_DIRECTORIES ( ${CMAKE_SOURCE_DIR}/libs/sqlite/)
+
+# VOIPCODECS
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/voipcodecs/src/.libs/libvoipcodecs.a)
+INCLUDE_DIRECTORIES ( ${CMAKE_SOURCE_DIR}/libs/voipcodecs/src/)
+
+# libspeexdsp
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/speex/libspeex/.libs/libspeexdsp.a)
+LINK_LIBRARIES (${CMAKE_SOURCE_DIR}/libs/speex/libspeex/.libs/libspeex.a)
+INCLUDE_DIRECTORIES ( ${CMAKE_SOURCE_DIR}/libs/speex/include/)
+
+
+# DO POSTGRES
+#FIND_PACKAGE(POSTGRES)
+IF(POSTGRES_FOUND)
+ INCLUDE_DIRECTORIES( ${POSTGRES_INCLUDE_DIRECTORIES} )
+ SET(optionalLibs ${optionalLibs} ${POSTGRES_LIBRARIES} )
+ENDIF(POSTGRES_FOUND)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ADD_SUBDIRECTORY(src)
+#ADD_SUBDIRECTORY(libs/libresample/)
+ADD_SUBDIRECTORY(libs/libteletone/)
+#ADD_SUBDIRECTORY(libs/sqlite/)
+ADD_SUBDIRECTORY(libs/pcre/)
+ADD_SUBDIRECTORY(libs/stfu/)
+ADD_SUBDIRECTORY(libs/apr-util/)
+ADD_SUBDIRECTORY(libs/apr/)
+#ADD_SUBDIRECTORY(libs/libedit/src/)
+ADD_SUBDIRECTORY(libs/srtp/)
+
+SET ( freeswitch_SRCS src/switch.c src/include/switch.h)
+ADD_EXECUTABLE(freeswitch ${freeswitch_SRCS})
+
+
+TARGET_LINK_LIBRARIES(freeswitch apr apr-util teletone pcre freeswitch_la stfu ${optionalLibs})
+
+
Modified: freeswitch/branches/seven/Freeswitch.2005.unsupported.sln (14471 => 14472)
--- freeswitch/branches/seven/Freeswitch.2005.unsupported.sln 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/Freeswitch.2005.unsupported.sln 2009-08-09 18:53:22 UTC (rev 14472)
@@ -3,19 +3,19 @@
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchConsole", "w32\Console\FreeSwitchConsole.vcproj", "{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
ProjectSection(ProjectDependencies) = postProject
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197} = {E42FDC95-7243-4219-9EA4-ACCE4AB97197}
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
+ {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
- {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
- {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
- {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g729", "src\mod\codecs\mod_g729\mod_g729.vcproj", "{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}"
@@ -25,28 +25,29 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "src\mod\formats\mod_sndfile\mod_sndfile.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "src\mod\endpoints\mod_iax\mod_iax.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
ProjectSection(ProjectDependencies) = postProject
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197} = {E42FDC95-7243-4219-9EA4-ACCE4AB97197}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4} = {E972C52F-9E85-4D65-B19C-031E511E9DB4}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codecs", "Codecs", "{F881ADA2-2F1A-4046-9FEB-191D9422D781}"
@@ -67,8 +68,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "FreeSwitchSetup", "w32\Setup\Setup.vdproj", "{B17FFBE6-A942-4056-8346-B624FB5D995B}"
@@ -82,22 +83,22 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_directory", "src\mod\dialplans\mod_dialplan_directory\mod_dialplan_directory.vcproj", "{A27CCA23-1541-4337-81A4-F0A6413078A0}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_zeroconf", "src\mod\event_handlers\mod_zeroconf\mod_zeroconf.vcproj", "{C7705DC4-2088-493E-AF8D-65BC6D65C125}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_multicast", "src\mod\event_handlers\mod_event_multicast\mod_event_multicast.vcproj", "{784113EF-44D9-4949-835D-7065D3C7AD08}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libteletone", "libs\libteletone\libteletone.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}"
@@ -106,10 +107,10 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey", "src\mod\languages\mod_spidermonkey\mod_spidermonkey.vcproj", "{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ASR-TTS", "ASR-TTS", "{4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}"
@@ -121,22 +122,22 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
ProjectSection(ProjectDependencies) = postProject
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8}
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3} = {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
ProjectSection(ProjectDependencies) = postProject
+ {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "src\mod\applications\mod_commands\mod_commands.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loggers", "Loggers", "{A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}"
@@ -150,46 +151,44 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "src\mod\xml_int\mod_xml_rpc\mod_xml_rpc.vcproj", "{CBEC7225-0C21-4DA8-978E-1F158F8AD950}"
ProjectSection(ProjectDependencies) = postProject
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9} = {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}
+ {0D108721-EAE8-4BAF-8102-D8960EC93647} = {0D108721-EAE8-4BAF-8102-D8960EC93647}
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{B535402E-38D2-4D54-8360-423ACBD17192} = {B535402E-38D2-4D54-8360-423ACBD17192}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
- {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}
- {0D108721-EAE8-4BAF-8102-D8960EC93647} = {0D108721-EAE8-4BAF-8102-D8960EC93647}
- {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9} = {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "src\mod\applications\mod_rss\mod_rss.vcproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "src\mod\applications\mod_conference\mod_conference.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "src\mod\applications\mod_dptools\mod_dptools.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_socket", "src\mod\event_handlers\mod_event_socket\mod_event_socket.vcproj", "{05515420-16DE-4E63-BE73-85BE85BA5142}"
ProjectSection(ProjectDependencies) = postProject
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
ProjectSection(ProjectDependencies) = postProject
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsrtp", "libs\srtp\libsrtp.vcproj", "{EEF031CB-FED8-451E-A471-91EC8D4F6750}"
@@ -203,8 +202,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "libs\win32\pcre\pcre_chartables.c.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "libs\win32\libresample\libresample.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
@@ -214,8 +211,6 @@
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\win32\speex\libspeex.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download HOWL", "libs\win32\Download HOWL.vcproj", "{5927104D-C14C-4AC8-925C-4AB681762E75}"
@@ -227,8 +222,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mDNSResponder static library", "libs\win32\howl\libmDNSResponder.vcproj", "{49C34584-B6DA-448F-83CF-27584DC9FC90}"
ProjectSection(ProjectDependencies) = postProject
+ {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}
- {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "libs\win32\libsndfile\libsndfile.vcproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}"
@@ -241,16 +236,16 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.vcproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}"
ProjectSection(ProjectDependencies) = postProject
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsofia_sip_ua_static", "libs\win32\sofia\libsofia_sip_ua_static.vcproj", "{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}"
ProjectSection(ProjectDependencies) = postProject
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PTHREAD", "libs\win32\Download PTHREAD.vcproj", "{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}"
@@ -262,70 +257,70 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g723_1", "src\mod\codecs\mod_g723_1\mod_g723_1.vcproj", "{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_native_file", "src\mod\formats\mod_native_file\mod_native_file.vcproj", "{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
ProjectSection(ProjectDependencies) = postProject
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
ProjectSection(ProjectDependencies) = postProject
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libudns", "libs\win32\udns\libudns.vcproj", "{4043FC6A-9A30-4577-8AD5-9B233C9575D8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_enum", "src\mod\applications\mod_enum\mod_enum.vcproj", "{71A967D5-0E99-4CEF-A587-98836EE6F2EF}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
ProjectSection(ProjectDependencies) = postProject
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_curl", "src\mod\xml_int\mod_xml_curl\mod_xml_curl.vcproj", "{AB91A099-7690-4ECF-8994-E458F4EA1ED4}"
ProjectSection(ProjectDependencies) = postProject
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "say", "say", "{6CD61A1D-797C-470A-BE08-8C31B68BB336}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_en", "src\mod\say\mod_say_en\mod_say_en.vcproj", "{988CACF7-3FCB-4992-BE69-77872AE67DC8}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "libs\portaudio\build\msvc\portaudio.vcproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_cdr", "src\mod\xml_int\mod_xml_cdr\mod_xml_cdr.vcproj", "{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}"
ProjectSection(ProjectDependencies) = postProject
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_amr", "src\mod\codecs\mod_amr\mod_amr.vcproj", "{8DEB383C-4091-4F42-A56F-C9E46D552D79}"
@@ -396,9 +391,9 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
ProjectSection(ProjectDependencies) = postProject
+ {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voicemail", "src\mod\applications\mod_voicemail\mod_voicemail.vcproj", "{D7F1E3F2-A3F4-474C-8555-15122571AF52}"
@@ -763,24 +758,24 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_tone_stream", "src\mod\formats\mod_tone_stream\mod_tone_stream.vcproj", "{1A789A98-71EF-4EBD-8007-FC9ED585D32E}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvoipcodecs", "libs\voipcodecs\libvoipcodecs.vcproj", "{CF70F278-3364-4395-A2E1-23501C9B8AD2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voipcodecs", "src\mod\codecs\mod_voipcodecs\mod_voipcodecs.vcproj", "{9EED03C8-8315-4214-8D13-8FF5FA46D93C}"
ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{CF70F278-3364-4395-A2E1-23501C9B8AD2} = {CF70F278-3364-4395-A2E1-23501C9B8AD2}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.vcproj", "{2CCED6DC-26FF-40F2-9585-E9E1049A4599}"
ProjectSection(ProjectDependencies) = postProject
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fsv", "src\mod\applications\mod_fsv\mod_fsv.vcproj", "{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}"
@@ -790,6 +785,7 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lua", "src\mod\languages\mod_lua\mod_lua.vcproj", "{7B077E7F-1BE7-4291-AB86-55E527B25CAC}"
ProjectSection(ProjectDependencies) = postProject
+ {D0B36172-CD76-454A-9B89-990025266C2A} = {D0B36172-CD76-454A-9B89-990025266C2A}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
@@ -803,6 +799,19 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_opal", "src\mod\endpoints\mod_opal\mod_opal_2005.vcproj", "{426B1369-FDB7-4B18-A7EF-9C6A9097A130}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\speex\win32\VS2005\libspeex\libspeex.vcproj", "{E972C52F-9E85-4D65-B19C-031E511E9DB4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeexdsp", "libs\speex\win32\VS2005\libspeexdsp\libspeexdsp.vcproj", "{E42FDC95-7243-4219-9EA4-ACCE4AB97197}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\ilbc\libilbc.vcproj", "{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua51", "src\mod\languages\mod_lua\lua\lua.2005.vcproj", "{D0B36172-CD76-454A-9B89-990025266C2A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_ru", "src\mod\say\mod_say_ru\mod_say_ru.vcproj", "{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -963,12 +972,6 @@
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
@@ -999,12 +1002,6 @@
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1017,12 +1014,6 @@
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1329,6 +1320,36 @@
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|Win32.ActiveCfg = Release|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|Win32.Build.0 = Release|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|x64.ActiveCfg = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|Win32.Build.0 = Debug|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|x64.ActiveCfg = Debug|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|Win32.ActiveCfg = Release|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|Win32.Build.0 = Release|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|x64.ActiveCfg = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|Win32.Build.0 = Debug|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|x64.ActiveCfg = Debug|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|Win32.ActiveCfg = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|Win32.Build.0 = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|x64.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|Win32.Build.0 = Debug|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|x64.ActiveCfg = Debug|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|Win32.ActiveCfg = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|Win32.Build.0 = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|x64.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1371,16 +1392,13 @@
{1A1FF289-4FD6-4285-A422-D31DD67A4723} = {CBD81696-EFB4-4D2F-8451-1B8DAA86155A}
{EC3E5C7F-EE09-47E2-80FE-546363D14A98} = {B8F5B47B-8568-46EB-B320-64C17D2A98BC}
{89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{49C34584-B6DA-448F-83CF-27584DC9FC90} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
@@ -1397,6 +1415,10 @@
{B535402E-38D2-4D54-8360-423ACBD17192} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{0D108721-EAE8-4BAF-8102-D8960EC93647} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {D0B36172-CD76-454A-9B89-990025266C2A} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{8F992C49-6C51-412F-B2A3-34EAB708EB65} = {0C808854-54D1-4230-BFF5-77B5FD905000}
@@ -1418,6 +1440,7 @@
{06E3A538-AB32-44F2-B477-755FF9CB5D37} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{3B08FEFD-4D3D-4C16-BA94-EE83509E32A0} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
{7BFD517E-7F8F-4A40-A78E-8D3632738227} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
{6374D55C-FABE-4A02-9CF1-4145308A56C5} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
Modified: freeswitch/branches/seven/Freeswitch.2008.express.sln (14471 => 14472)
--- freeswitch/branches/seven/Freeswitch.2008.express.sln 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/Freeswitch.2008.express.sln 2009-08-09 18:53:22 UTC (rev 14472)
@@ -9,10 +9,10 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.2008.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
ProjectSection(ProjectDependencies) = postProject
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
{89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD} = {03207781-0D1C-4DB3-A71D-45C608F28DBD}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
@@ -45,8 +45,9 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.2008.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
ProjectSection(ProjectDependencies) = postProject
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4} = {E972C52F-9E85-4D65-B19C-031E511E9DB4}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD} = {03207781-0D1C-4DB3-A71D-45C608F28DBD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "docs", "docs\docs.2008.vcproj", "{1A1FF289-4FD6-4285-A422-D31DD67A4723}"
@@ -99,8 +100,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.2008.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
ProjectSection(ProjectDependencies) = postProject
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD} = {9A5DDF08-C88C-4A35-B7F6-D605228446BD}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.2008.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
@@ -156,8 +157,6 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.2008.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.2008.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
ProjectSection(ProjectDependencies) = postProject
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
@@ -175,8 +174,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "libs\win32\pcre\pcre_chartables.c.2008.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "libs\win32\libresample\libresample.2008.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.2008.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.2008.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
@@ -184,8 +181,6 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\win32\speex\libspeex.2008.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.2008.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download HOWL", "libs\win32\Download HOWL.2008.vcproj", "{5927104D-C14C-4AC8-925C-4AB681762E75}"
@@ -413,6 +408,7 @@
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lua", "src\mod\languages\mod_lua\mod_lua.2008.vcproj", "{7B077E7F-1BE7-4291-AB86-55E527B25CAC}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {D0B36172-CD76-454A-9B89-990025266C2A} = {D0B36172-CD76-454A-9B89-990025266C2A}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abyss", "libs\xmlrpc-c\Windows\abyss.2008.vcproj", "{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}"
@@ -565,709 +561,1526 @@
{CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {CF405366-9558-4AE8-90EF-5E21B51CCB4E}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_easyroute", "src\mod\applications\mod_easyroute\mod_easyroute.2008.vcproj", "{329FD5B0-EF28-4606-86D0-F6EA21CF8E36}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lcr", "src\mod\applications\mod_lcr\mod_lcr.2008.vcproj", "{1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspandsp", "libs\spandsp\src\libspandsp.2008.vcproj", "{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838} = {329A6FA0-0FCC-4435-A950-E670AEFA9838}
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330} = {DEE932AB-5911-4700-9EEB-8C7090A0A330}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtiff", "libs\spandsp\src\libtiff.2008.vcproj", "{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fax", "src\mod\applications\mod_fax\mod_fax.2008.vcproj", "{7877EFC8-4807-484B-B573-D7B7FD058FAA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\speex\win32\VS2008\libspeex\libspeex.vcproj", "{E972C52F-9E85-4D65-B19C-031E511E9DB4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeexdsp", "libs\speex\win32\VS2008\libspeexdsp\libspeexdsp.vcproj", "{03207781-0D1C-4DB3-A71D-45C608F28DBD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\ilbc\libilbc.2008.vcproj", "{9A5DDF08-C88C-4A35-B7F6-D605228446BD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_opal", "src\mod\endpoints\mod_opal\mod_opal_2008.vcproj", "{05C9FB27-480E-4D53-B3B7-6338E2526666}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua51", "src\mod\languages\mod_lua\lua\lua.2008.vcproj", "{D0B36172-CD76-454A-9B89-990025266C2A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_at_dictionary", "libs\spandsp\src\msvc\make_at_dictionary.2008.vcproj", "{DEE932AB-5911-4700-9EEB-8C7090A0A330}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_modem_filter", "libs\spandsp\src\msvc\make_modem_filter.2008.vcproj", "{329A6FA0-0FCC-4435-A950-E670AEFA9838}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 32khz music", "libs\win32\Dowload 32khz music.2008.vcproj", "{1F0A8A77-E661-418F-BB92-82172AE43803}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 8khz music", "libs\win32\Download 8khz music.2008.vcproj", "{4F5C9D55-98EF-4256-8311-32D7BD360406}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 16khz music", "libs\win32\Download 16khz music.2008.vcproj", "{E10571C4-E7F4-4608-B5F2-B22E7EB95400}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "8khz music", "libs\win32\Sound_Files\8khzmusic.2008.vcproj", "{D1ABE208-6442-4FB4-9AAD-1677E41BC870}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4F5C9D55-98EF-4256-8311-32D7BD360406} = {4F5C9D55-98EF-4256-8311-32D7BD360406}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "16khz music", "libs\win32\Sound_Files\16khzmusic.2008.vcproj", "{BA599D0A-4310-4505-91DA-6A6447B3E289}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400} = {E10571C4-E7F4-4608-B5F2-B22E7EB95400}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "32khz music", "libs\win32\Sound_Files\32khzmusic.2008.vcproj", "{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}"
+ ProjectSection(ProjectDependencies) = postProject
+ {1F0A8A77-E661-418F-BB92-82172AE43803} = {1F0A8A77-E661-418F-BB92-82172AE43803}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_ru", "src\mod\say\mod_say_ru\mod_say_ru.2008.vcproj", "{0382E8FD-CFDC-41C0-8B03-792C7C84FC31}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_skypiax", "src\mod\endpoints\mod_skypiax\mod_skypiax.2008.vcproj", "{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ All|Win32 = All|Win32
+ All|x64 = All|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.Build.0 = Release|x64
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.ActiveCfg = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.Build.0 = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.Build.0 = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.ActiveCfg = Release|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.Build.0 = Release|Win32
- {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.Build.0 = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.Build.0 = Release|x64
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.Build.0 = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.Build.0 = Release|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.Build.0 = Release Passthrough|x64
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug Passthrough|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.Build.0 = Debug Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32
- {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.Build.0 = Release Passthrough|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.Build.0 = Release|x64
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.Build.0 = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32
- {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.Build.0 = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|Win32.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|x64.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|x64.Build.0 = Release|x64
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.Build.0 = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32
- {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.Build.0 = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.Build.0 = Release|x64
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.Build.0 = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32
- {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.Build.0 = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.Build.0 = Release|x64
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.Build.0 = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32
- {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.Build.0 = Release|x64
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.ActiveCfg = Release|Win32
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Win32.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.Build.0 = Release|x64
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.Build.0 = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32
- {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.Build.0 = Release|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.Build.0 = Release MS-LDAP|x64
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.ActiveCfg = Debug MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.Build.0 = Debug MS-LDAP|Win32
- {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug MS-LDAP|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.Build.0 = Debug MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.ActiveCfg = Release MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.Build.0 = Release MS-LDAP|Win32
- {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.Build.0 = Release MS-LDAP|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.Build.0 = Release|x64
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.ActiveCfg = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.Build.0 = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.Build.0 = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.ActiveCfg = Release|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.Build.0 = Release|Win32
- {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.Build.0 = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|Win32.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|x64.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|x64.Build.0 = Release|x64
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.Build.0 = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32
- {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.Build.0 = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.Build.0 = Release|x64
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.ActiveCfg = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.Build.0 = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.Build.0 = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.ActiveCfg = Release|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.Build.0 = Release|Win32
- {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.Build.0 = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.Build.0 = Release|x64
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.Build.0 = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32
- {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.Build.0 = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.Build.0 = Release|x64
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.Build.0 = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.Build.0 = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.Build.0 = Release|x64
{692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32
- {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.Build.0 = Release|x64
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.Build.0 = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32
- {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.Build.0 = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.Build.0 = Release|x64
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.Build.0 = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32
- {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.Build.0 = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.Build.0 = Release|x64
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.Build.0 = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32
- {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.Build.0 = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.Build.0 = Release|x64
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.Build.0 = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32
- {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.Build.0 = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.Build.0 = Release|x64
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.ActiveCfg = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.Build.0 = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32
- {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.Build.0 = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.Build.0 = Release|x64
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.Build.0 = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32
- {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.Build.0 = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.Build.0 = Release|x64
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.Build.0 = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32
- {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.Build.0 = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.Build.0 = Release|x64
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.Build.0 = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32
- {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.Build.0 = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.Build.0 = Release|x64
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.ActiveCfg = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.Build.0 = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.Build.0 = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32
- {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.Build.0 = Release|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.ActiveCfg = Release DLL|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.ActiveCfg = Release DLL|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.Build.0 = Release DLL|x64
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.Build.0 = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32
- {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.Build.0 = Release|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.ActiveCfg = Release Dll|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.ActiveCfg = Release Dll|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.Build.0 = Release Dll|x64
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.Build.0 = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32
- {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.Build.0 = Release|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.ActiveCfg = Release DLL|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.ActiveCfg = Release DLL|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.Build.0 = Release DLL|x64
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.Build.0 = Debug|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.Deploy.0 = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release|Win32
- {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.Build.0 = Release|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.ActiveCfg = Release DLL|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.ActiveCfg = Release DLL|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.Build.0 = Release DLL|x64
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.Build.0 = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release|Win32
- {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.Build.0 = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.Build.0 = Release|x64
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.Build.0 = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.Build.0 = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.Build.0 = Release|x64
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.Build.0 = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.Build.0 = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.Build.0 = Release|x64
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.Build.0 = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32
- {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.Build.0 = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.Build.0 = Release|x64
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.Build.0 = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32
- {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.Build.0 = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|x64.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.Build.0 = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.Build.0 = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|Win32.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|x64.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|x64.Build.0 = Release|x64
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.Build.0 = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32
- {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.Build.0 = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|Win32.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|x64.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|x64.Build.0 = Release|x64
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.Build.0 = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32
- {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.Build.0 = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32
- {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.ActiveCfg = Debug|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.ActiveCfg = Debug|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.Build.0 = Debug|x64
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.Build.0 = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32
- {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.Build.0 = Release|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.Build.0 = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32
- {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.Build.0 = Release|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.ActiveCfg = Debug|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.ActiveCfg = Debug|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.Build.0 = Debug|x64
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.ActiveCfg = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.Build.0 = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.Build.0 = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.ActiveCfg = Release|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.Build.0 = Release|Win32
- {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.Build.0 = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.Build.0 = Release|x64
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.ActiveCfg = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.Build.0 = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.Build.0 = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.ActiveCfg = Release|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.Build.0 = Release|Win32
- {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.Build.0 = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.Build.0 = Release|x64
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.ActiveCfg = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.Build.0 = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.Build.0 = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.ActiveCfg = Release|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.Build.0 = Release|Win32
- {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.Build.0 = Release|x64
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.Build.0 = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.ActiveCfg = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.Build.0 = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.ActiveCfg = Debug|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.Build.0 = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.Build.0 = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.Build.0 = Release|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.Build.0 = Release DLL|x64
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.ActiveCfg = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.Build.0 = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.Build.0 = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.ActiveCfg = Release DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.Build.0 = Release DLL|Win32
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.Build.0 = Release DLL|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.Build.0 = Release Passthrough|x64
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug Passthrough|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.Build.0 = Debug Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.Build.0 = Release Passthrough|Win32
- {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.Build.0 = Release Passthrough|x64
+ {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
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.ActiveCfg = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.Build.0 = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.Build.0 = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.ActiveCfg = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.Build.0 = Release|Win32
- {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|x64
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.Build.0 = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.Build.0 = Release|x64
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.Build.0 = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32
- {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.Build.0 = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.Build.0 = Release|x64
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.Build.0 = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32
- {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.Build.0 = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.Build.0 = Release|x64
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.ActiveCfg = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.Build.0 = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.Build.0 = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.ActiveCfg = Release|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.Build.0 = Release|Win32
- {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.Build.0 = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.Build.0 = Release|x64
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.ActiveCfg = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.Build.0 = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.Build.0 = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.ActiveCfg = Release|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.Build.0 = Release|Win32
- {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.Build.0 = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.Build.0 = Release|x64
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.Build.0 = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32
- {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.Build.0 = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.Build.0 = Release|x64
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.ActiveCfg = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.Build.0 = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.Build.0 = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.ActiveCfg = Release|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.Build.0 = Release|Win32
- {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.Build.0 = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.Build.0 = Release|x64
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.ActiveCfg = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.Build.0 = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.Build.0 = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.ActiveCfg = Release|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.Build.0 = Release|Win32
- {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.Build.0 = Release|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.ActiveCfg = Release DirectSound|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.ActiveCfg = Release DirectSound|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.Build.0 = Release DirectSound|x64
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32
- {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.Build.0 = Release|x64
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.ActiveCfg = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.Build.0 = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.Build.0 = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.ActiveCfg = Release|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.Build.0 = Release|Win32
- {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.Build.0 = Release|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.Build.0 = Release Passthrough|x64
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug Passthrough|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.Build.0 = Debug Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.Build.0 = Release Passthrough|Win32
- {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.Build.0 = Release Passthrough|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.Build.0 = Release|x64
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.ActiveCfg = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.Build.0 = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.Build.0 = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.ActiveCfg = Release|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.Build.0 = Release|Win32
- {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.Build.0 = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.Build.0 = Release|x64
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.ActiveCfg = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.Build.0 = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.Build.0 = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.ActiveCfg = Release|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.Build.0 = Release|Win32
- {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.Build.0 = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.Build.0 = Release|x64
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.ActiveCfg = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.Build.0 = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.Build.0 = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.ActiveCfg = Release|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.Build.0 = Release|Win32
- {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.Build.0 = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.Build.0 = Release|x64
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.Build.0 = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32
- {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.Build.0 = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.Build.0 = Release|x64
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.ActiveCfg = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.Build.0 = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.Build.0 = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.ActiveCfg = Release|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.Build.0 = Release|Win32
- {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.Build.0 = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.Build.0 = Release|x64
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.ActiveCfg = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.Build.0 = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.Build.0 = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.ActiveCfg = Release|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.Build.0 = Release|Win32
- {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.Build.0 = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.Build.0 = Release|x64
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.ActiveCfg = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.Build.0 = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.Build.0 = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.ActiveCfg = Release|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.Build.0 = Release|Win32
- {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.Build.0 = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.Build.0 = Release|x64
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.ActiveCfg = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.Build.0 = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.Build.0 = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.ActiveCfg = Release|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.Build.0 = Release|Win32
- {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.Build.0 = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.Build.0 = Release|x64
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.ActiveCfg = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.Build.0 = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.Build.0 = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.ActiveCfg = Release|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.Build.0 = Release|Win32
- {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.Build.0 = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.Build.0 = Release|x64
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.ActiveCfg = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.Build.0 = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.Build.0 = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.ActiveCfg = Release|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.Build.0 = Release|Win32
- {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.Build.0 = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.Build.0 = Release|x64
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.ActiveCfg = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.Build.0 = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.Build.0 = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.ActiveCfg = Release|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.Build.0 = Release|Win32
- {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.Build.0 = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.Build.0 = Release|x64
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.ActiveCfg = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.Build.0 = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.Build.0 = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.ActiveCfg = Release|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.Build.0 = Release|Win32
- {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.Build.0 = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.Build.0 = Release|x64
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.ActiveCfg = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.Build.0 = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.Build.0 = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.ActiveCfg = Release|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.Build.0 = Release|Win32
- {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.Build.0 = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.Build.0 = Release|x64
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.ActiveCfg = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.Build.0 = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.Build.0 = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32
- {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.Build.0 = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.Build.0 = Release|x64
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.Build.0 = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32
- {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.Build.0 = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.Build.0 = Release|x64
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.ActiveCfg = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.Build.0 = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.Build.0 = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.ActiveCfg = Release|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.Build.0 = Release|Win32
- {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.Build.0 = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|Win32.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.Build.0 = Release|x64
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.ActiveCfg = Debug|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.Build.0 = Debug|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.ActiveCfg = Debug|Win32
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.Build.0 = Debug|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.ActiveCfg = Release|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.Build.0 = Release|Win32
- {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|Win32
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.Build.0 = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.Build.0 = Release|x64
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|Win32
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.Build.0 = Debug|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|Win32
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.Build.0 = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|Win32.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|x64.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|x64.Build.0 = Release|x64
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.ActiveCfg = Debug|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.Build.0 = Debug|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|Win32
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.Build.0 = Debug|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.ActiveCfg = Release|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.Build.0 = Release|Win32
- {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|Win32
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.Build.0 = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|Win32.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.Build.0 = Release|x64
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.ActiveCfg = Debug|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.Build.0 = Debug|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.ActiveCfg = Debug|Win32
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.Build.0 = Debug|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.ActiveCfg = Release|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.Build.0 = Release|Win32
- {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|Win32
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.Build.0 = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|Win32.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.Build.0 = Release|x64
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.ActiveCfg = Debug|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.Build.0 = Debug|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|Win32
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.Build.0 = Debug|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.ActiveCfg = Release|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.Build.0 = Release|Win32
- {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|Win32
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.Build.0 = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.Build.0 = Release|x64
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.ActiveCfg = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.Build.0 = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.Build.0 = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.ActiveCfg = Release|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.Build.0 = Release|Win32
- {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.Build.0 = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.Build.0 = Release|x64
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.ActiveCfg = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.Build.0 = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.Build.0 = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.ActiveCfg = Release|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.Build.0 = Release|Win32
- {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.Build.0 = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.Build.0 = Release|x64
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.ActiveCfg = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.Build.0 = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.Build.0 = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.ActiveCfg = Release|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.Build.0 = Release|Win32
- {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.Build.0 = Release|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.ActiveCfg = Debug|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.ActiveCfg = Debug|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.Build.0 = Debug|x64
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.ActiveCfg = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.Build.0 = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.Build.0 = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.ActiveCfg = Release|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.Build.0 = Release|Win32
- {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.Build.0 = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.Build.0 = Release|x64
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.ActiveCfg = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.Build.0 = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.Build.0 = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32
- {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.Build.0 = Release|x64
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.ActiveCfg = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.Build.0 = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.ActiveCfg = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.ActiveCfg = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.Build.0 = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.ActiveCfg = Debug|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.Build.0 = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.ActiveCfg = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.Build.0 = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.ActiveCfg = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.Build.0 = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.ActiveCfg = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.Build.0 = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.ActiveCfg = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.ActiveCfg = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.Build.0 = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.ActiveCfg = Debug|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.Build.0 = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.ActiveCfg = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.Build.0 = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.ActiveCfg = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.Build.0 = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.ActiveCfg = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.Build.0 = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.ActiveCfg = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.ActiveCfg = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.Build.0 = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.ActiveCfg = Debug|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.Build.0 = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.ActiveCfg = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.Build.0 = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.ActiveCfg = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.Build.0 = Release|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|Win32.ActiveCfg = Debug|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.ActiveCfg = Debug|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.Build.0 = Debug|x64
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.Build.0 = Debug|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32
- {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.Build.0 = Release|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|Win32.ActiveCfg = Debug|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.ActiveCfg = Debug|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.Build.0 = Debug|x64
{94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|Win32
+ {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.Build.0 = Debug|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32
- {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|Win32
+ {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.Build.0 = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|Win32.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.Build.0 = Release|x64
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.ActiveCfg = Debug|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.Build.0 = Debug|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|Win32
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.Build.0 = Debug|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.ActiveCfg = Release|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.Build.0 = Release|Win32
- {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|Win32
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.Build.0 = Release|x64
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.Build.0 = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.Build.0 = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.ActiveCfg = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.Build.0 = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.ActiveCfg = Debug|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.Build.0 = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.ActiveCfg = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.Build.0 = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.Build.0 = Release|Win32
+ {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|Win32.ActiveCfg = Release|Win32
+ {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x64.ActiveCfg = Release|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Win32.ActiveCfg = Debug|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64.ActiveCfg = Debug|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.Build.0 = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|Win32
+ {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32
+ {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32
+ {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32
+ {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64.ActiveCfg = Debug|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32
+ {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32
+ {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.ActiveCfg = Debug|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.Build.0 = Debug|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.Build.0 = Debug|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.ActiveCfg = Release|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.Build.0 = Release|Win32
- {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.Build.0 = Release|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|Win32.ActiveCfg = Release Static|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.ActiveCfg = Release Static|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.Build.0 = Release Static|x64
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.Build.0 = Debug|Win32
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.Build.0 = Debug|Win32
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.Build.0 = Release|Win32
- {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.Build.0 = Release|x64
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.Build.0 = Release|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|Win32.ActiveCfg = Debug|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.ActiveCfg = Debug|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.Build.0 = Debug|x64
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.ActiveCfg = Debug|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.Build.0 = Debug|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.Build.0 = Debug|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.ActiveCfg = Release|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.Build.0 = Release|Win32
- {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.Build.0 = Release|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|Win32.ActiveCfg = Debug|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.ActiveCfg = Debug|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.Build.0 = Debug|x64
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.ActiveCfg = Debug|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.Build.0 = Debug|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|Win32
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.Build.0 = Debug|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.ActiveCfg = Release|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.Build.0 = Release|Win32
- {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|Win32
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.Build.0 = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|Win32.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.Build.0 = Release|x64
{38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.ActiveCfg = Debug|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.Build.0 = Debug|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|Win32
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.Build.0 = Debug|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.ActiveCfg = Release|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.Build.0 = Release|Win32
- {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|Win32
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.Build.0 = Release|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|Win32.ActiveCfg = Debug|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.ActiveCfg = Debug|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.Build.0 = Debug|x64
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.ActiveCfg = Debug|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.Build.0 = Debug|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|Win32
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.Build.0 = Debug|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.ActiveCfg = Release|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.Build.0 = Release|Win32
- {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|Win32
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.Build.0 = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|Win32.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.Build.0 = Release|x64
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.ActiveCfg = Debug|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.Build.0 = Debug|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|Win32
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.Build.0 = Debug|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.ActiveCfg = Release|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.Build.0 = Release|Win32
- {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|Win32
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.Build.0 = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|Win32.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.Build.0 = Release|x64
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.ActiveCfg = Debug|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.Build.0 = Debug|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.ActiveCfg = Debug|Win32
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.Build.0 = Debug|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.ActiveCfg = Release|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.Build.0 = Release|Win32
- {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|Win32
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.Build.0 = Release|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|Win32.ActiveCfg = Release_Mono|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.ActiveCfg = Release_Mono|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.Build.0 = Release_Mono|x64
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.ActiveCfg = Debug_CLR|Win32
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.Build.0 = Debug_CLR|Win32
- {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_Mono|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_CLR|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.Build.0 = Debug_CLR|Win32
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32
- {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_Mono|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.Build.0 = Release_CLR|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_CLR|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.Build.0 = Release_CLR|x64
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.ActiveCfg = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.Build.0 = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.ActiveCfg = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.ActiveCfg = Debug|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.Build.0 = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.ActiveCfg = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.Build.0 = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.ActiveCfg = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.Build.0 = Release|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|Win32.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.Build.0 = Release|x64
{419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.ActiveCfg = Debug|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.Build.0 = Debug|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.ActiveCfg = Debug|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.Build.0 = Debug|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.ActiveCfg = Release|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.Build.0 = Release|Win32
- {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.Build.0 = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|Win32.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.Build.0 = Release|x64
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.ActiveCfg = Debug|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.Build.0 = Debug|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.ActiveCfg = Debug|Win32
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.Build.0 = Debug|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.ActiveCfg = Release|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.Build.0 = Release|Win32
- {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|Win32
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.Build.0 = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|Win32.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.Build.0 = Release|x64
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.ActiveCfg = Debug|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.Build.0 = Debug|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.ActiveCfg = Debug|Win32
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.Build.0 = Debug|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.ActiveCfg = Release|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.Build.0 = Release|Win32
- {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|Win32
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.Build.0 = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|Win32.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.Build.0 = Release|x64
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.ActiveCfg = Debug|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.Build.0 = Debug|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.ActiveCfg = Debug|Win32
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.Build.0 = Debug|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.ActiveCfg = Release|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.Build.0 = Release|Win32
- {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|Win32
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.Build.0 = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|Win32.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.Build.0 = Release|x64
{0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.ActiveCfg = Debug|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.Build.0 = Debug|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.ActiveCfg = Debug|Win32
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.Build.0 = Debug|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.ActiveCfg = Release|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.Build.0 = Release|Win32
- {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|Win32
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.Build.0 = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|Win32.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.Build.0 = Release|x64
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.ActiveCfg = Debug|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.Build.0 = Debug|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.ActiveCfg = Debug|Win32
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.Build.0 = Debug|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.ActiveCfg = Release|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32
- {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|Win32
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.Build.0 = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|Win32.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.Build.0 = Release|x64
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.Build.0 = Debug|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|Win32
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.Build.0 = Debug|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.Build.0 = Release|Win32
- {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|Win32
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.Build.0 = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|Win32.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.Build.0 = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.ActiveCfg = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.Build.0 = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.ActiveCfg = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.Build.0 = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.ActiveCfg = Release|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.Build.0 = Release|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.Build.0 = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|Win32.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.Build.0 = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.Build.0 = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.ActiveCfg = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.Build.0 = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.ActiveCfg = Release|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.Build.0 = Release|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.Build.0 = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.Build.0 = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.ActiveCfg = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.Build.0 = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.Build.0 = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.Build.0 = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.ActiveCfg = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.Build.0 = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.Build.0 = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|Win32.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|x64.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|x64.Build.0 = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|Win32.Build.0 = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|x64.ActiveCfg = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|x64.Build.0 = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|Win32.ActiveCfg = Release|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|Win32.Build.0 = Release|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|x64.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|x64.Build.0 = Release|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.ActiveCfg = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.ActiveCfg = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.Build.0 = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.Build.0 = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.Build.0 = Release|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|Win32.ActiveCfg = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.ActiveCfg = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.Build.0 = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.Build.0 = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.ActiveCfg = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.Build.0 = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.ActiveCfg = Release|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.Build.0 = Release|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.ActiveCfg = Release|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.Build.0 = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|Win32.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.Build.0 = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.Build.0 = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.ActiveCfg = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.Build.0 = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.ActiveCfg = Release|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.Build.0 = Release|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.Build.0 = Release|x64
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.Build.0 = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x64.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|Win32.ActiveCfg = Debug|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64.ActiveCfg = Debug|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|Win32.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.Build.0 = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.Build.0 = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.Build.0 = Release|x64
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.Build.0 = All|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.All|Win32.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x64.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x64.ActiveCfg = Debug|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|Win32.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.Build.0 = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.ActiveCfg = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.Build.0 = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.Build.0 = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|Win32.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x64.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x64.ActiveCfg = Debug|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|Win32.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.Build.0 = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.Build.0 = Debug|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.ActiveCfg = Debug|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.Build.0 = Debug|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.ActiveCfg = Release|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.Build.0 = Release|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.Build.0 = Release|x64
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.ActiveCfg = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.Build.0 = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x64.ActiveCfg = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.Build.0 = Debug|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64.ActiveCfg = Debug|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|Win32.ActiveCfg = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|Win32.Build.0 = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: freeswitch/branches/seven/Freeswitch.2008.sln (14471 => 14472)
--- freeswitch/branches/seven/Freeswitch.2008.sln 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/Freeswitch.2008.sln 2009-08-09 18:53:22 UTC (rev 14472)
@@ -382,10 +382,10 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.2008.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
ProjectSection(ProjectDependencies) = postProject
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
{89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD} = {03207781-0D1C-4DB3-A71D-45C608F28DBD}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
@@ -418,8 +418,9 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.2008.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
ProjectSection(ProjectDependencies) = postProject
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4} = {E972C52F-9E85-4D65-B19C-031E511E9DB4}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD} = {03207781-0D1C-4DB3-A71D-45C608F28DBD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "docs", "docs\docs.2008.vcproj", "{1A1FF289-4FD6-4285-A422-D31DD67A4723}"
@@ -472,8 +473,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.2008.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
ProjectSection(ProjectDependencies) = postProject
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD} = {9A5DDF08-C88C-4A35-B7F6-D605228446BD}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.2008.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
@@ -529,8 +530,6 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.2008.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.2008.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
ProjectSection(ProjectDependencies) = postProject
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
@@ -548,8 +547,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "libs\win32\pcre\pcre_chartables.c.2008.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "libs\win32\libresample\libresample.2008.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.2008.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.2008.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
@@ -557,8 +554,6 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\win32\speex\libspeex.2008.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.2008.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download HOWL", "libs\win32\Download HOWL.2008.vcproj", "{5927104D-C14C-4AC8-925C-4AB681762E75}"
@@ -786,6 +781,7 @@
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lua", "src\mod\languages\mod_lua\mod_lua.2008.vcproj", "{7B077E7F-1BE7-4291-AB86-55E527B25CAC}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {D0B36172-CD76-454A-9B89-990025266C2A} = {D0B36172-CD76-454A-9B89-990025266C2A}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abyss", "libs\xmlrpc-c\Windows\abyss.2008.vcproj", "{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}"
@@ -943,715 +939,1574 @@
{CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {CF405366-9558-4AE8-90EF-5E21B51CCB4E}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_easyroute", "src\mod\applications\mod_easyroute\mod_easyroute.2008.vcproj", "{329FD5B0-EF28-4606-86D0-F6EA21CF8E36}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lcr", "src\mod\applications\mod_lcr\mod_lcr.2008.vcproj", "{1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtiff", "libs\spandsp\src\libtiff.2008.vcproj", "{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspandsp", "libs\spandsp\src\libspandsp.2008.vcproj", "{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838} = {329A6FA0-0FCC-4435-A950-E670AEFA9838}
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330} = {DEE932AB-5911-4700-9EEB-8C7090A0A330}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fax", "src\mod\applications\mod_fax\mod_fax.2008.vcproj", "{7877EFC8-4807-484B-B573-D7B7FD058FAA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\speex\win32\VS2008\libspeex\libspeex.vcproj", "{E972C52F-9E85-4D65-B19C-031E511E9DB4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeexdsp", "libs\speex\win32\VS2008\libspeexdsp\libspeexdsp.vcproj", "{03207781-0D1C-4DB3-A71D-45C608F28DBD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\ilbc\libilbc.2008.vcproj", "{9A5DDF08-C88C-4A35-B7F6-D605228446BD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua51", "src\mod\languages\mod_lua\lua\lua.2008.vcproj", "{D0B36172-CD76-454A-9B89-990025266C2A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_opal", "src\mod\endpoints\mod_opal\mod_opal_2008.vcproj", "{05C9FB27-480E-4D53-B3B7-6338E2526666}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_at_dictionary", "libs\spandsp\src\msvc\make_at_dictionary.2008.vcproj", "{DEE932AB-5911-4700-9EEB-8C7090A0A330}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_modem_filter", "libs\spandsp\src\msvc\make_modem_filter.2008.vcproj", "{329A6FA0-0FCC-4435-A950-E670AEFA9838}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_skel", "src\mod\applications\mod_skel\mod_skel.2008.vcproj", "{11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_skypiax", "src\mod\endpoints\mod_skypiax\mod_skypiax.2008.vcproj", "{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 32khz music", "libs\win32\Dowload 32khz music.2008.vcproj", "{1F0A8A77-E661-418F-BB92-82172AE43803}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 8khz music", "libs\win32\Download 8khz music.2008.vcproj", "{4F5C9D55-98EF-4256-8311-32D7BD360406}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 16khz music", "libs\win32\Download 16khz music.2008.vcproj", "{E10571C4-E7F4-4608-B5F2-B22E7EB95400}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "8khz music", "libs\win32\Sound_Files\8khzmusic.2008.vcproj", "{D1ABE208-6442-4FB4-9AAD-1677E41BC870}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4F5C9D55-98EF-4256-8311-32D7BD360406} = {4F5C9D55-98EF-4256-8311-32D7BD360406}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "16khz music", "libs\win32\Sound_Files\16khzmusic.2008.vcproj", "{BA599D0A-4310-4505-91DA-6A6447B3E289}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400} = {E10571C4-E7F4-4608-B5F2-B22E7EB95400}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "32khz music", "libs\win32\Sound_Files\32khzmusic.2008.vcproj", "{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}"
+ ProjectSection(ProjectDependencies) = postProject
+ {1F0A8A77-E661-418F-BB92-82172AE43803} = {1F0A8A77-E661-418F-BB92-82172AE43803}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_file_string", "src\mod\formats\mod_file_string\mod_file_string.2008.vcproj", "{70564D74-199A-4452-9C60-19ED5F242F0D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_nibblebill", "src\mod\applications\mod_nibblebill\mod_nibblebill.2008.vcproj", "{3C977801-FE88-48F2-83D3-FA2EBFF6688E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_ru", "src\mod\say\mod_say_ru\mod_say_ru.2008.vcproj", "{0382E8FD-CFDC-41C0-8B03-792C7C84FC31}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ All|Win32 = All|Win32
+ All|x64 = All|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.Build.0 = Release|x64
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.ActiveCfg = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.Build.0 = Debug|Win32
- {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.Build.0 = Debug|x64
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.ActiveCfg = Release|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.Build.0 = Release|Win32
- {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|x64
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.Build.0 = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.Build.0 = Release|x64
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.Build.0 = Debug|x64
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|x64
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.Build.0 = Release|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.Build.0 = Release Passthrough|x64
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.Build.0 = Debug Passthrough|x64
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32
- {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.Build.0 = Release Passthrough|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.Build.0 = Release|x64
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32
- {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.Build.0 = Debug|x64
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32
- {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|x64
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.Build.0 = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|Win32.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|x64.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|x64.Build.0 = Release|x64
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32
- {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.Build.0 = Debug|x64
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32
- {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|x64
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.Build.0 = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.Build.0 = Release|x64
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32
- {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.Build.0 = Debug|x64
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32
- {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|x64
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.Build.0 = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.Build.0 = Release|x64
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32
- {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.Build.0 = Debug|x64
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32
- {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|x64
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.Build.0 = Release|x64
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.ActiveCfg = Release|Win32
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Win32.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.Build.0 = Release|x64
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32
- {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.Build.0 = Debug|x64
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32
- {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|x64
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.Build.0 = Release|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.Build.0 = Release MS-LDAP|x64
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.ActiveCfg = Debug MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.Build.0 = Debug MS-LDAP|Win32
- {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.Build.0 = Debug MS-LDAP|x64
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.ActiveCfg = Release MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.Build.0 = Release MS-LDAP|Win32
- {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release MS-LDAP|x64
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.Build.0 = Release MS-LDAP|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.Build.0 = Release|x64
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.ActiveCfg = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.Build.0 = Debug|Win32
- {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.Build.0 = Debug|x64
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.ActiveCfg = Release|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.Build.0 = Release|Win32
- {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|x64
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.Build.0 = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|Win32.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|x64.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|x64.Build.0 = Release|x64
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32
- {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.Build.0 = Debug|x64
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32
- {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|x64
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.Build.0 = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.Build.0 = Release|x64
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.ActiveCfg = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.Build.0 = Debug|Win32
- {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.Build.0 = Debug|x64
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.ActiveCfg = Release|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.Build.0 = Release|Win32
- {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|x64
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.Build.0 = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.Build.0 = Release|x64
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32
- {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.Build.0 = Debug|x64
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32
- {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|x64
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.Build.0 = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.Build.0 = Release|x64
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.Build.0 = Debug|x64
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|x64
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.Build.0 = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|x64
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.Build.0 = Release|x64
{692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32
- {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|x64
{692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32
- {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.Build.0 = Release|x64
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32
- {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.Build.0 = Debug|x64
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32
- {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|x64
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.Build.0 = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.Build.0 = Release|x64
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32
- {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.Build.0 = Debug|x64
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32
- {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|x64
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.Build.0 = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.Build.0 = Release|x64
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32
- {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.Build.0 = Debug|x64
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32
- {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|x64
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.Build.0 = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.Build.0 = Release|x64
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32
- {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.Build.0 = Debug|x64
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32
- {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|x64
+ {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.Build.0 = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.Build.0 = Release|x64
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.ActiveCfg = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32
- {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.Build.0 = Debug|x64
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32
- {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|x64
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.Build.0 = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.Build.0 = Release|x64
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32
- {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.Build.0 = Debug|x64
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32
- {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|x64
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.Build.0 = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.Build.0 = Release|x64
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32
- {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.Build.0 = Debug|x64
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32
- {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|x64
+ {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.Build.0 = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.Build.0 = Release|x64
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32
- {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.Build.0 = Debug|x64
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32
- {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|x64
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.Build.0 = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.Build.0 = Release|x64
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.ActiveCfg = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.Build.0 = Debug|Win32
- {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.Build.0 = Debug|x64
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32
- {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|x64
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.Build.0 = Release|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.ActiveCfg = Release DLL|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.ActiveCfg = Release DLL|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.Build.0 = Release DLL|x64
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
- {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.Build.0 = Debug|x64
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32
- {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|x64
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.Build.0 = Release|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.ActiveCfg = Release Dll|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.ActiveCfg = Release Dll|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.Build.0 = Release Dll|x64
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32
- {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.Build.0 = Debug|x64
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32
- {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|x64
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.Build.0 = Release|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.ActiveCfg = Release DLL|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.ActiveCfg = Release DLL|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.Build.0 = Release DLL|x64
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug|Win32
- {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.Build.0 = Debug|x64
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release|Win32
- {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|x64
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.Build.0 = Release|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.ActiveCfg = Release DLL|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.ActiveCfg = Release DLL|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.Build.0 = Release DLL|x64
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug|Win32
- {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.Build.0 = Debug|x64
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release|Win32
- {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|x64
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.Build.0 = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.Build.0 = Release|x64
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.Build.0 = Debug|x64
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|x64
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.Build.0 = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.Build.0 = Release|x64
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.Build.0 = Debug|x64
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|x64
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.Build.0 = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.Build.0 = Release|x64
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
- {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.Build.0 = Debug|x64
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32
- {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|x64
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.Build.0 = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.Build.0 = Release|x64
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32
- {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.Build.0 = Debug|x64
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32
- {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.Build.0 = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|x64.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.Build.0 = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.Build.0 = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|Win32.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|x64.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|x64.Build.0 = Release|x64
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32
- {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.Build.0 = Debug|x64
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32
- {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|x64
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.Build.0 = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|Win32.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|x64.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|x64.Build.0 = Release|x64
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32
- {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.Build.0 = Debug|x64
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32
- {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|x64
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.Build.0 = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32
- {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|x64
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32
- {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.ActiveCfg = Debug|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.ActiveCfg = Debug|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.Build.0 = Debug|x64
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32
- {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.Build.0 = Debug|x64
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32
- {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|x64
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.Build.0 = Release|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32
- {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.Build.0 = Debug|x64
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32
- {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|x64
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.Build.0 = Release|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.ActiveCfg = Debug|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.ActiveCfg = Debug|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.Build.0 = Debug|x64
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.ActiveCfg = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.Build.0 = Debug|Win32
- {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.Build.0 = Debug|x64
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.ActiveCfg = Release|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.Build.0 = Release|Win32
- {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|x64
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.Build.0 = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.Build.0 = Release|x64
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.ActiveCfg = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.Build.0 = Debug|Win32
- {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.Build.0 = Debug|x64
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.ActiveCfg = Release|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.Build.0 = Release|Win32
- {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|x64
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.Build.0 = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.Build.0 = Release|x64
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.ActiveCfg = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.Build.0 = Debug|Win32
- {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.Build.0 = Debug|x64
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.ActiveCfg = Release|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.Build.0 = Release|Win32
- {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|x64
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.Build.0 = Release|x64
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.Build.0 = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.ActiveCfg = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.Build.0 = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.ActiveCfg = Debug|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.Build.0 = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.Build.0 = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.Build.0 = Release|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.Build.0 = Release DLL|x64
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.ActiveCfg = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.Build.0 = Debug DLL|Win32
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.Build.0 = Debug DLL|x64
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.ActiveCfg = Release DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.Build.0 = Release DLL|Win32
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release DLL|x64
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.Build.0 = Release DLL|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.Build.0 = Release Passthrough|x64
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.Build.0 = Debug Passthrough|x64
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.Build.0 = Release Passthrough|Win32
- {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.Build.0 = Release Passthrough|x64
+ {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
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.ActiveCfg = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.Build.0 = Debug|Win32
- {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|x64
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.Build.0 = Debug|x64
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.ActiveCfg = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.Build.0 = Release|Win32
- {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|x64
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.Build.0 = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.Build.0 = Release|x64
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32
- {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.Build.0 = Debug|x64
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32
- {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|x64
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.Build.0 = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.Build.0 = Release|x64
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32
- {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.Build.0 = Debug|x64
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32
- {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|x64
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.Build.0 = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.Build.0 = Release|x64
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.ActiveCfg = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.Build.0 = Debug|Win32
- {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.Build.0 = Debug|x64
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.ActiveCfg = Release|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.Build.0 = Release|Win32
- {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|x64
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.Build.0 = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.Build.0 = Release|x64
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.ActiveCfg = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.Build.0 = Debug|Win32
- {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.Build.0 = Debug|x64
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.ActiveCfg = Release|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.Build.0 = Release|Win32
- {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|x64
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.Build.0 = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.Build.0 = Release|x64
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32
- {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.Build.0 = Debug|x64
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32
- {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|x64
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.Build.0 = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.Build.0 = Release|x64
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.ActiveCfg = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.Build.0 = Debug|Win32
- {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.Build.0 = Debug|x64
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.ActiveCfg = Release|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.Build.0 = Release|Win32
- {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|x64
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.Build.0 = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.Build.0 = Release|x64
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.ActiveCfg = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.Build.0 = Debug|Win32
- {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.Build.0 = Debug|x64
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.ActiveCfg = Release|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.Build.0 = Release|Win32
- {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|x64
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.Build.0 = Release|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.ActiveCfg = Release DirectSound|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.ActiveCfg = Release DirectSound|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.Build.0 = Release DirectSound|x64
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32
- {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32
- {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.Build.0 = Release|x64
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.ActiveCfg = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.Build.0 = Debug|Win32
- {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.Build.0 = Debug|x64
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.ActiveCfg = Release|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.Build.0 = Release|Win32
- {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|x64
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.Build.0 = Release|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.Build.0 = Release Passthrough|x64
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.Build.0 = Debug Passthrough|Win32
- {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.Build.0 = Debug Passthrough|x64
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.Build.0 = Release Passthrough|Win32
- {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release Passthrough|x64
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.Build.0 = Release Passthrough|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.Build.0 = Release|x64
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.ActiveCfg = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.Build.0 = Debug|Win32
- {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.Build.0 = Debug|x64
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.ActiveCfg = Release|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.Build.0 = Release|Win32
- {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|x64
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.Build.0 = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.Build.0 = Release|x64
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.ActiveCfg = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.Build.0 = Debug|Win32
- {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.Build.0 = Debug|x64
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.ActiveCfg = Release|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.Build.0 = Release|Win32
- {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|x64
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.Build.0 = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.Build.0 = Release|x64
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.ActiveCfg = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.Build.0 = Debug|Win32
- {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.Build.0 = Debug|x64
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.ActiveCfg = Release|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.Build.0 = Release|Win32
- {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|x64
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.Build.0 = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.Build.0 = Release|x64
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32
- {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.Build.0 = Debug|x64
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32
- {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|x64
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.Build.0 = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.Build.0 = Release|x64
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.ActiveCfg = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.Build.0 = Debug|Win32
- {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.Build.0 = Debug|x64
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.ActiveCfg = Release|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.Build.0 = Release|Win32
- {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|x64
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.Build.0 = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.Build.0 = Release|x64
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.ActiveCfg = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.Build.0 = Debug|Win32
- {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.Build.0 = Debug|x64
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.ActiveCfg = Release|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.Build.0 = Release|Win32
- {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|x64
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.Build.0 = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.Build.0 = Release|x64
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.ActiveCfg = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.Build.0 = Debug|Win32
- {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.Build.0 = Debug|x64
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.ActiveCfg = Release|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.Build.0 = Release|Win32
- {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|x64
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.Build.0 = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.Build.0 = Release|x64
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.ActiveCfg = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.Build.0 = Debug|Win32
- {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.Build.0 = Debug|x64
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.ActiveCfg = Release|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.Build.0 = Release|Win32
- {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|x64
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.Build.0 = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.Build.0 = Release|x64
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.ActiveCfg = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.Build.0 = Debug|Win32
- {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.Build.0 = Debug|x64
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.ActiveCfg = Release|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.Build.0 = Release|Win32
- {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|x64
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.Build.0 = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.Build.0 = Release|x64
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.ActiveCfg = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.Build.0 = Debug|Win32
- {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.Build.0 = Debug|x64
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.ActiveCfg = Release|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.Build.0 = Release|Win32
- {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|x64
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.Build.0 = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.Build.0 = Release|x64
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.ActiveCfg = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.Build.0 = Debug|Win32
- {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.Build.0 = Debug|x64
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.ActiveCfg = Release|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.Build.0 = Release|Win32
- {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|x64
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.Build.0 = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.Build.0 = Release|x64
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.ActiveCfg = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.Build.0 = Debug|Win32
- {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.Build.0 = Debug|x64
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.ActiveCfg = Release|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.Build.0 = Release|Win32
- {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|x64
+ {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.Build.0 = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.Build.0 = Release|x64
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.ActiveCfg = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.Build.0 = Debug|Win32
- {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.Build.0 = Debug|x64
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.ActiveCfg = Release|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.Build.0 = Release|Win32
- {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|x64
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.Build.0 = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.Build.0 = Release|x64
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.ActiveCfg = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.Build.0 = Debug|Win32
- {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.Build.0 = Debug|x64
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32
- {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|x64
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.Build.0 = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.Build.0 = Release|x64
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32
- {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.Build.0 = Debug|x64
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32
- {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|x64
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.Build.0 = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.Build.0 = Release|x64
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.ActiveCfg = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.Build.0 = Debug|Win32
- {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.Build.0 = Debug|x64
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.ActiveCfg = Release|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.Build.0 = Release|Win32
- {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|x64
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.Build.0 = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|Win32.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.Build.0 = Release|x64
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.ActiveCfg = Debug|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.Build.0 = Debug|Win32
- {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.ActiveCfg = Debug|Win32
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.ActiveCfg = Debug|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.Build.0 = Debug|x64
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.ActiveCfg = Release|Win32
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.Build.0 = Release|Win32
- {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|Win32
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|x64
+ {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.Build.0 = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.Build.0 = Release|x64
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|Win32
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.Build.0 = Debug|x64
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32
{CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|Win32
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|x64
+ {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.Build.0 = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|Win32.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|x64.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.All|x64.Build.0 = Release|x64
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.ActiveCfg = Debug|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.Build.0 = Debug|Win32
- {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|Win32
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.Build.0 = Debug|x64
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.ActiveCfg = Release|Win32
{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.Build.0 = Release|Win32
- {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|Win32
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|x64
+ {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.Build.0 = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|Win32.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.Build.0 = Release|x64
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.ActiveCfg = Debug|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.Build.0 = Debug|Win32
- {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.ActiveCfg = Debug|Win32
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.ActiveCfg = Debug|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.Build.0 = Debug|x64
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.ActiveCfg = Release|Win32
{E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.Build.0 = Release|Win32
- {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|Win32
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|x64
+ {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.Build.0 = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|Win32.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.Build.0 = Release|x64
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.ActiveCfg = Debug|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.Build.0 = Debug|Win32
- {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|Win32
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.Build.0 = Debug|x64
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.ActiveCfg = Release|Win32
{36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.Build.0 = Release|Win32
- {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|Win32
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|x64
+ {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.Build.0 = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.Build.0 = Release|x64
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.ActiveCfg = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.Build.0 = Debug|Win32
- {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.Build.0 = Debug|x64
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.ActiveCfg = Release|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.Build.0 = Release|Win32
- {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|x64
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.Build.0 = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.Build.0 = Release|x64
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.ActiveCfg = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.Build.0 = Debug|Win32
- {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.Build.0 = Debug|x64
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.ActiveCfg = Release|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.Build.0 = Release|Win32
- {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|x64
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.Build.0 = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.Build.0 = Release|x64
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.ActiveCfg = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.Build.0 = Debug|Win32
- {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.Build.0 = Debug|x64
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.ActiveCfg = Release|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.Build.0 = Release|Win32
- {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|x64
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.Build.0 = Release|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.ActiveCfg = Debug|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.ActiveCfg = Debug|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.Build.0 = Debug|x64
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.ActiveCfg = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.Build.0 = Debug|Win32
- {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.Build.0 = Debug|x64
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.ActiveCfg = Release|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.Build.0 = Release|Win32
- {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|x64
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.Build.0 = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.Build.0 = Release|x64
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.ActiveCfg = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.Build.0 = Debug|Win32
- {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.Build.0 = Debug|x64
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32
- {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|x64
+ {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.Build.0 = Release|x64
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.ActiveCfg = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.Build.0 = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.ActiveCfg = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.ActiveCfg = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.Build.0 = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.ActiveCfg = Debug|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.Build.0 = Debug|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.ActiveCfg = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.Build.0 = Release|Win32
{4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.ActiveCfg = Release|Win32
+ {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.Build.0 = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.ActiveCfg = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.Build.0 = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.ActiveCfg = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.ActiveCfg = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.Build.0 = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.ActiveCfg = Debug|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.Build.0 = Debug|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.ActiveCfg = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.Build.0 = Release|Win32
{2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.ActiveCfg = Release|Win32
+ {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.Build.0 = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.ActiveCfg = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.Build.0 = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.ActiveCfg = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.ActiveCfg = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.Build.0 = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.ActiveCfg = Debug|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.Build.0 = Debug|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.ActiveCfg = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.Build.0 = Release|Win32
{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.ActiveCfg = Release|Win32
+ {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.Build.0 = Release|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|Win32.ActiveCfg = Debug|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.ActiveCfg = Debug|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.Build.0 = Debug|x64
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32
- {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.Build.0 = Debug|x64
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32
{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32
- {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|Win32
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|x64
+ {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.Build.0 = Release|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|Win32.ActiveCfg = Debug|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.ActiveCfg = Debug|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.Build.0 = Debug|x64
{94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32
- {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|Win32
+ {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.Build.0 = Debug|x64
{94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32
{94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32
- {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|Win32
+ {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|x64
+ {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.Build.0 = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|Win32.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.Build.0 = Release|x64
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.ActiveCfg = Debug|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.Build.0 = Debug|Win32
- {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|Win32
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.Build.0 = Debug|x64
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.ActiveCfg = Release|Win32
{2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.Build.0 = Release|Win32
- {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|Win32
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|x64
+ {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.Build.0 = Release|x64
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.Build.0 = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.Build.0 = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.ActiveCfg = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.Build.0 = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.ActiveCfg = Debug|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.Build.0 = Debug|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.ActiveCfg = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.Build.0 = Release|Win32
{3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.ActiveCfg = Release|Win32
+ {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.Build.0 = Release|Win32
+ {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|Win32.ActiveCfg = Release|Win32
+ {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x64.ActiveCfg = Release|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Win32.ActiveCfg = Debug|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64.ActiveCfg = Debug|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32
{87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.Build.0 = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32
+ {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|Win32
+ {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32
+ {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32
+ {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32
+ {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64.ActiveCfg = Debug|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32
+ {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32
+ {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.ActiveCfg = Debug|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.Build.0 = Debug|Win32
- {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.Build.0 = Debug|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.ActiveCfg = Release|Win32
{0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.Build.0 = Release|Win32
- {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|Win32
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|x64
+ {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.Build.0 = Release|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|Win32.ActiveCfg = Release Static|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.ActiveCfg = Release Static|x64
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.Build.0 = Release Static|x64
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32
- {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.Build.0 = Debug|Win32
- {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|x64
{66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32
- {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.Build.0 = Release|Win32
- {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32
+ {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|x64
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.Build.0 = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.Build.0 = Debug|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.ActiveCfg = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.Build.0 = Release|Win32
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.ActiveCfg = Release|Win32
+ {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.Build.0 = Release|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|Win32.ActiveCfg = Debug|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.ActiveCfg = Debug|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.Build.0 = Debug|x64
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.ActiveCfg = Debug|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.Build.0 = Debug|Win32
- {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.Build.0 = Debug|x64
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.ActiveCfg = Release|Win32
{E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.Build.0 = Release|Win32
- {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|Win32
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|x64
+ {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.Build.0 = Release|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|Win32.ActiveCfg = Debug|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.ActiveCfg = Debug|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.Build.0 = Debug|x64
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.ActiveCfg = Debug|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.Build.0 = Debug|Win32
- {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|Win32
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.Build.0 = Debug|x64
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.ActiveCfg = Release|Win32
{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.Build.0 = Release|Win32
- {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|Win32
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|x64
+ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.Build.0 = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|Win32.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.Build.0 = Release|x64
{38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.ActiveCfg = Debug|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.Build.0 = Debug|Win32
- {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|Win32
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.Build.0 = Debug|x64
{38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.ActiveCfg = Release|Win32
{38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.Build.0 = Release|Win32
- {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|Win32
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|x64
+ {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.Build.0 = Release|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|Win32.ActiveCfg = Debug|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.ActiveCfg = Debug|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.Build.0 = Debug|x64
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.ActiveCfg = Debug|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.Build.0 = Debug|Win32
- {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|Win32
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.Build.0 = Debug|x64
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.ActiveCfg = Release|Win32
{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.Build.0 = Release|Win32
- {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|Win32
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|x64
+ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.Build.0 = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|Win32.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.Build.0 = Release|x64
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.ActiveCfg = Debug|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.Build.0 = Debug|Win32
- {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|Win32
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.Build.0 = Debug|x64
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.ActiveCfg = Release|Win32
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.Build.0 = Release|Win32
- {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|Win32
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|x64
+ {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.Build.0 = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|Win32.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.Build.0 = Release|x64
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.ActiveCfg = Debug|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.Build.0 = Debug|Win32
- {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.ActiveCfg = Debug|Win32
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.ActiveCfg = Debug|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.Build.0 = Debug|x64
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.ActiveCfg = Release|Win32
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.Build.0 = Release|Win32
- {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|Win32
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|x64
+ {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.Build.0 = Release|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|Win32.ActiveCfg = Release_Mono|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.ActiveCfg = Release_Mono|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.Build.0 = Release_Mono|x64
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.ActiveCfg = Debug_CLR|Win32
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.Build.0 = Debug_CLR|Win32
- {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_Mono|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_CLR|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.Build.0 = Debug_CLR|x64
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32
- {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_Mono|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.Build.0 = Release_CLR|Win32
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_CLR|x64
+ {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.Build.0 = Release_CLR|x64
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|Win32.ActiveCfg = Release|x64
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x64.ActiveCfg = Release|x64
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x64.Build.0 = Release|x64
{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.ActiveCfg = Debug|Any CPU
{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU
- {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|x64
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.Build.0 = Debug|x64
{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU
{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.Build.0 = Release|Any CPU
- {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|Any CPU
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|x64
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.Build.0 = Release|x64
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.ActiveCfg = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.Build.0 = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.ActiveCfg = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.ActiveCfg = Debug|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.Build.0 = Debug|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.ActiveCfg = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.Build.0 = Release|Win32
{E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.ActiveCfg = Release|Win32
+ {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.Build.0 = Release|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|Win32.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.Build.0 = Release|x64
{419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.ActiveCfg = Debug|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.Build.0 = Debug|Win32
- {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.ActiveCfg = Debug|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.ActiveCfg = Debug|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.Build.0 = Debug|x64
{419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.ActiveCfg = Release|Win32
{419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.Build.0 = Release|Win32
- {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|Win32
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|x64
+ {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.Build.0 = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|Win32.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.Build.0 = Release|x64
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.ActiveCfg = Debug|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.Build.0 = Debug|Win32
- {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.ActiveCfg = Debug|Win32
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.ActiveCfg = Debug|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.Build.0 = Debug|x64
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.ActiveCfg = Release|Win32
{B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.Build.0 = Release|Win32
- {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|Win32
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|x64
+ {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.Build.0 = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|Win32.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.Build.0 = Release|x64
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.ActiveCfg = Debug|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.Build.0 = Debug|Win32
- {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.ActiveCfg = Debug|Win32
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.ActiveCfg = Debug|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.Build.0 = Debug|x64
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.ActiveCfg = Release|Win32
{14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.Build.0 = Release|Win32
- {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|Win32
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|x64
+ {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.Build.0 = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|Win32.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.Build.0 = Release|x64
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.ActiveCfg = Debug|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.Build.0 = Debug|Win32
- {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.ActiveCfg = Debug|Win32
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.ActiveCfg = Debug|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.Build.0 = Debug|x64
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.ActiveCfg = Release|Win32
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.Build.0 = Release|Win32
- {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|Win32
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|x64
+ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.Build.0 = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|Win32.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.Build.0 = Release|x64
{0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.ActiveCfg = Debug|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.Build.0 = Debug|Win32
- {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.ActiveCfg = Debug|Win32
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.ActiveCfg = Debug|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.Build.0 = Debug|x64
{0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.ActiveCfg = Release|Win32
{0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.Build.0 = Release|Win32
- {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|Win32
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|x64
+ {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.Build.0 = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|Win32.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.Build.0 = Release|x64
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.ActiveCfg = Debug|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.Build.0 = Debug|Win32
- {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.ActiveCfg = Debug|Win32
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.ActiveCfg = Debug|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.Build.0 = Debug|x64
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.ActiveCfg = Release|Win32
{CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32
- {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|Win32
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|x64
+ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.Build.0 = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|Win32.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.Build.0 = Release|x64
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.Build.0 = Debug|Win32
- {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|Win32
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.Build.0 = Debug|x64
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32
{D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.Build.0 = Release|Win32
- {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|Win32
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|x64
+ {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.Build.0 = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|Win32.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.Build.0 = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.ActiveCfg = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.Build.0 = Debug|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.ActiveCfg = Debug|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.Build.0 = Debug|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.ActiveCfg = Release|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.Build.0 = Release|Win32
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.ActiveCfg = Release|x64
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.Build.0 = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|Win32.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.Build.0 = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.Build.0 = Debug|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.ActiveCfg = Debug|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.Build.0 = Debug|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.ActiveCfg = Release|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.Build.0 = Release|Win32
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.ActiveCfg = Release|x64
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.Build.0 = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.Build.0 = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.ActiveCfg = Debug|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.Build.0 = Debug|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.ActiveCfg = Release|x64
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.Build.0 = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.Build.0 = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.ActiveCfg = Debug|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.Build.0 = Debug|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.ActiveCfg = Release|x64
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.Build.0 = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|Win32.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|x64.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.All|x64.Build.0 = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|Win32.Build.0 = Debug|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|x64.ActiveCfg = Debug|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Debug|x64.Build.0 = Debug|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|Win32.ActiveCfg = Release|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|Win32.Build.0 = Release|Win32
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|x64.ActiveCfg = Release|x64
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA}.Release|x64.Build.0 = Release|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.ActiveCfg = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.ActiveCfg = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.Build.0 = Release_WM5_PPC_ARM|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.Build.0 = Debug|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|x64
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.Build.0 = Release|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|Win32.ActiveCfg = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.ActiveCfg = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.Build.0 = Release_Static_SSE|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.Build.0 = Debug|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.ActiveCfg = Debug|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.Build.0 = Debug|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.ActiveCfg = Release|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.Build.0 = Release|Win32
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.ActiveCfg = Release|x64
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.Build.0 = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|Win32.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.Build.0 = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.Build.0 = Debug|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.ActiveCfg = Debug|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.Build.0 = Debug|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.ActiveCfg = Release|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.Build.0 = Release|Win32
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.ActiveCfg = Release|x64
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.Build.0 = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.Build.0 = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.Build.0 = Debug|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|x64
+ {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.Build.0 = Release|x64
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.Build.0 = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x64.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|Win32.ActiveCfg = Debug|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64.ActiveCfg = Debug|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|Win32.ActiveCfg = Release|Win32
+ {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64.ActiveCfg = Release|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.Build.0 = All|Win32
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|Win32.ActiveCfg = Release|x64
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.ActiveCfg = Release|x64
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.Build.0 = Release|x64
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|Win32.ActiveCfg = Debug|Win32
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x64.ActiveCfg = Debug|x64
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|Win32.ActiveCfg = Release|Win32
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x64.ActiveCfg = Release|x64
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.ActiveCfg = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.Build.0 = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x64.ActiveCfg = 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}.Release|Win32.ActiveCfg = Release|Win32
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.All|Win32.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x64.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x64.ActiveCfg = Debug|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|Win32.ActiveCfg = Release|Win32
+ {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.Build.0 = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.ActiveCfg = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.Build.0 = Debug|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.Build.0 = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.ActiveCfg = Release|Win32
+ {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.Build.0 = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|Win32.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x64.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x64.ActiveCfg = Debug|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|Win32.ActiveCfg = Release|Win32
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|Win32
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32
+ {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|Win32
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.Build.0 = Debug|Win32
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.ActiveCfg = Debug|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.Build.0 = Debug|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.ActiveCfg = Release|Win32
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.Build.0 = Release|Win32
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.ActiveCfg = Release|x64
+ {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.Build.0 = Release|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|Win32.ActiveCfg = Release|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.ActiveCfg = Release|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.Build.0 = Release|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.Build.0 = Debug|Win32
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.ActiveCfg = Debug|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.Build.0 = Debug|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.ActiveCfg = Release|Win32
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.Build.0 = Release|Win32
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.ActiveCfg = Release|x64
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.Build.0 = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.Build.0 = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.Build.0 = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.Build.0 = Debug|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.ActiveCfg = Debug|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.Build.0 = Debug|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.ActiveCfg = Release|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.Build.0 = Release|Win32
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.ActiveCfg = Release|x64
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1670,6 +2525,8 @@
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
{0DF3ABD0-DDC0-4265-B778-07C66780979B} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
{B3F424EC-3D8F-417C-B244-3919D5E1A577} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+ {05C9FB27-480E-4D53-B3B7-6338E2526666} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
+ {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{C24FB505-05D7-4319-8485-7540B44C8603} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
@@ -1683,6 +2540,11 @@
{E3246D17-E29B-4AB5-962A-C69B0C5837BB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{14E4A972-9CFB-436D-B0A5-4943F3F80D47} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+ {329FD5B0-EF28-4606-86D0-F6EA21CF8E36} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+ {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+ {7877EFC8-4807-484B-B573-D7B7FD058FAA} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+ {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
+ {3C977801-FE88-48F2-83D3-FA2EBFF6688E} = {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}
@@ -1695,6 +2557,7 @@
{2CA40887-1622-46A1-A7F9-17FD7E7E545B} = {A5A27244-AD24-46E5-B01B-840CD296C91D}
{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52} = {A5A27244-AD24-46E5-B01B-840CD296C91D}
{38FE0559-9910-43A8-9E45-3E5004C27692} = {A5A27244-AD24-46E5-B01B-840CD296C91D}
+ {70564D74-199A-4452-9C60-19ED5F242F0D} = {A5A27244-AD24-46E5-B01B-840CD296C91D}
{1A1FF289-4FD6-4285-A422-D31DD67A4723} = {CBD81696-EFB4-4D2F-8451-1B8DAA86155A}
{EC3E5C7F-EE09-47E2-80FE-546363D14A98} = {B8F5B47B-8568-46EB-B320-64C17D2A98BC}
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {0C808854-54D1-4230-BFF5-77B5FD905000}
@@ -1705,6 +2568,7 @@
{36E854E3-CE12-4348-A125-CCF3F9D74813} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{7B077E7F-1BE7-4291-AB86-55E527B25CAC} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E} = {0C808854-54D1-4230-BFF5-77B5FD905000}
+ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{692F6330-4D87-4C82-81DF-40DB5892636E} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}
{2286DA73-9FC5-45BC-A508-85994C3317AB} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}
{66444AEE-554C-11DD-A9F0-8C5D56D89593} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}
@@ -1714,16 +2578,13 @@
{AB91A099-7690-4ECF-8994-E458F4EA1ED4} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
{89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{8D04B550-D240-4A44-8A18-35DA3F7038D9} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{49C34584-B6DA-448F-83CF-27584DC9FC90} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
@@ -1749,6 +2610,14 @@
{419C8F80-D858-4B48-A25C-AF4007608137} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {03207781-0D1C-4DB3-A71D-45C608F28DBD} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {9A5DDF08-C88C-4A35-B7F6-D605228446BD} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {D0B36172-CD76-454A-9B89-990025266C2A} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{5927104D-C14C-4AC8-925C-4AB681762E75} = {C120A020-773F-4EA3-923F-B67AF28B750D}
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D}
{4F92B672-DADB-4047-8D6A-4BB3796733FD} = {C120A020-773F-4EA3-923F-B67AF28B750D}
@@ -1762,6 +2631,9 @@
{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} = {C120A020-773F-4EA3-923F-B67AF28B750D}
{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} = {C120A020-773F-4EA3-923F-B67AF28B750D}
{E796E337-DE78-4303-8614-9A590862EE95} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+ {1F0A8A77-E661-418F-BB92-82172AE43803} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+ {4F5C9D55-98EF-4256-8311-32D7BD360406} = {C120A020-773F-4EA3-923F-B67AF28B750D}
+ {E10571C4-E7F4-4608-B5F2-B22E7EB95400} = {C120A020-773F-4EA3-923F-B67AF28B750D}
{988CACF7-3FCB-4992-BE69-77872AE67DC8} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{5BC072DB-3826-48EA-AF34-FE32AA01E83B} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{FA429E98-8B03-45E6-A096-A4BC5E821DE4} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
@@ -1769,6 +2641,7 @@
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
+ {0382E8FD-CFDC-41C0-8B03-792C7C84FC31} = {6CD61A1D-797C-470A-BE08-8C31B68BB336}
{3B08FEFD-4D3D-4C16-BA94-EE83509E32A0} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
{7BFD517E-7F8F-4A40-A78E-8D3632738227} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
{6374D55C-FABE-4A02-9CF1-4145308A56C5} = {57D119DC-484F-420F-B9E9-8589FD9A8DF8}
@@ -1818,5 +2691,8 @@
{7A8D8174-B355-4114-AFC1-04777CB9DE0A} = {4F227C26-768F-46A3-8684-1D08A46FB374}
{7EB71250-F002-4ED8-92CA-CA218114537A} = {4F227C26-768F-46A3-8684-1D08A46FB374}
{464AAB78-5489-4916-BE51-BF8D61822311} = {4F227C26-768F-46A3-8684-1D08A46FB374}
+ {D1ABE208-6442-4FB4-9AAD-1677E41BC870} = {4F227C26-768F-46A3-8684-1D08A46FB374}
+ {BA599D0A-4310-4505-91DA-6A6447B3E289} = {4F227C26-768F-46A3-8684-1D08A46FB374}
+ {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959} = {4F227C26-768F-46A3-8684-1D08A46FB374}
EndGlobalSection
EndGlobal
Modified: freeswitch/branches/seven/Makefile.am (14471 => 14472)
--- freeswitch/branches/seven/Makefile.am 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/Makefile.am 2009-08-09 18:53:22 UTC (rev 14472)
@@ -17,9 +17,11 @@
target_prefix=`echo $@ | sed -e 's|-.*$$||'`; \
sound_perfix=`echo $@ | sed -e 's|-.*||'`; \
sounds_version=`cat build/sounds_version.txt`;\
+ moh_version=`cat build/moh_version.txt`;\
full_sound_dir=`echo $@ | sed -e 's|^sounds||' | sed -e 's|^-||' | sed -e 's|-install$$||'`; \
test ! -z $$full_sound_dir || full_sound_dir=`echo $(DEFAULT_SOUNDS)`; \
- soundfile=`echo freeswitch-sounds-$$full_sound_dir-$$sounds_version.tar.gz`; \
+ soundfile=`echo freeswitch-sounds-$$full_sound_dir-$$moh_version.tar.gz`; \
+ echo $$full_sound_dir | grep music >/dev/null || soundfile=`echo freeswitch-sounds-$$full_sound_dir-$$sounds_version.tar.gz`; \
if test "$$target" = "install"; then $(MAKE) $(AM_MAKEFLAGS) core_install; else $(MAKE) $(AM_MAKEFLAGS) core ; fi; \
if test "$$target_prefix" = "sounds"; then \
if test "$$target" = "install"; then $(GETSOUNDS) $$soundfile $(DESTDIR)$(PREFIX)/sounds/; else $(GETSOUNDS) $$soundfile ; fi; \
@@ -29,21 +31,29 @@
sounds: sounds-en-us-callie-8000
sounds-install: sounds-en-us-callie-8000-install
+sounds-ru: sounds-ru-RU-elena-8000
+sounds-ru-install: sounds-ru-RU-elena-8000-install
moh: sounds-music-8000
moh-install: sounds-music-8000-install
hd-sounds: sounds sounds-en-us-callie-16000
hd-sounds-install: sounds-install sounds-en-us-callie-16000-install
+hd-sounds-ru: sounds-ru sounds-ru-RU-elena-16000
+hd-sounds-ru-install: sounds-ru-install sounds-ru-RU-elena-16000-install
hd-moh: moh sounds-music-16000
hd-moh-install: moh-install sounds-music-16000-install
uhd-sounds: hd-sounds sounds-en-us-callie-32000
uhd-sounds-install: hd-sounds-install sounds-en-us-callie-32000-install
+uhd-sounds-ru: hd-sounds-ru sounds-ru-RU-elena-32000
+uhd-sounds-ru-install: hd-sounds-ru-install sounds-ru-RU-elena-32000-install
uhd-moh: hd-moh sounds-music-32000
uhd-moh-install: hd-moh-install sounds-music-32000-install
cd-sounds: uhd-sounds sounds-en-us-callie-48000
cd-sounds-install: uhd-sounds-install sounds-en-us-callie-48000-install
+cd-sounds-ru: uhd-sounds-ru sounds-ru-RU-elena-48000
+cd-sounds-ru-install: uhd-sounds-ru-install sounds-ru-RU-elena-48000-install
cd-moh: uhd-moh sounds-music-48000
cd-moh-install: uhd-moh-install sounds-music-48000-install
@@ -89,19 +99,31 @@
src/switch_ivr_menu.c \
src/switch_ivr.c \
src/switch_stun.c\
+src/switch_nat.c\
src/switch_log.c\
src/switch_xml.c\
+src/switch_xml_config.c\
src/switch_config.c\
src/switch_time.c\
+src/switch_odbc.c \
libs/stfu/stfu.c\
src/switch_cpp.cpp\
src/g711.c\
src/switch_pcm.c\
libs/libteletone/src/libteletone_detect.c\
-libs/libteletone/src/libteletone_generate.c
+libs/libteletone/src/libteletone_generate.c\
+libs/miniupnpc/miniwget.c\
+libs/miniupnpc/minixml.c\
+libs/miniupnpc/igd_desc_parse.c\
+libs/miniupnpc/minisoap.c \
+libs/miniupnpc/miniupnpc.c\
+libs/miniupnpc/upnpreplyparse.c\
+libs/miniupnpc/upnpcommands.c\
+libs/miniupnpc/minissdpc.c \
+libs/miniupnpc/upnperrors.c \
+libs/libnatpmp/natpmp.c \
+libs/libnatpmp/getgateway.c
-
-
library_includedir = $(PREFIX)/include
library_include_HEADERS = \
@@ -130,8 +152,10 @@
src/include/switch_utils.h\
src/include/switch_rtp.h\
src/include/switch_stun.h\
+src/include/switch_nat.h\
src/include/switch_log.h\
src/include/switch_xml.h\
+src/include/switch_xml_config.h\
src/include/switch_cpp.h\
libs/libteletone/src/libteletone_detect.h\
libs/libteletone/src/libteletone_generate.h\
@@ -143,32 +167,35 @@
CORE_CFLAGS += -I$(switch_srcdir)/libs/stfu
CORE_CFLAGS += -I$(switch_srcdir)/libs/sqlite
CORE_CFLAGS += -I$(switch_srcdir)/libs/pcre
+CORE_CFLAGS += -I$(switch_srcdir)/libs/speex/include
CORE_CFLAGS += -I$(switch_srcdir)/libs/srtp/include
CORE_CFLAGS += -I$(switch_srcdir)/libs/srtp/crypto/include
-CORE_CFLAGS += $(RESAMPLE_CFLAGS)
CORE_LIBS = libs/apr-util/libaprutil-1.la libs/apr/libapr-1.la
-CORE_LIBS += libs/sqlite/libsqlite3.la libs/pcre/libpcre.la
-CORE_LIBS += libs/srtp/libsrtp.la $(RESAMPLE_LIB)
+CORE_LIBS += libs/sqlite/libsqlite3.la libs/pcre/libpcre.la libs/speex/libspeex/libspeexdsp.la
+CORE_LIBS += libs/srtp/libsrtp.la
lib_LTLIBRARIES = libfreeswitch.la
libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(AM_CFLAGS)
libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_DEPLIBS)
libfreeswitch_la_LIBADD = $(CORE_LIBS)
libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES)
-nodist_libfreeswitch_la_SOURCES = src/include/switch_version.h src/include/switch_swigable_cpp.h
+nodist_libfreeswitch_la_SOURCES = src/include/switch_version.h src/include/switch_swigable_cpp.h src/include/switch_frame.h
MOD_LINK = $(BASE)/libfreeswitch.la
CLEANFILES = src/include/switch_version.h src/include/switch_swigable_cpp.h
BUILT_SOURCES = src/include/switch_version.h src/include/switch_swigable_cpp.h
-bin_PROGRAMS = freeswitch fs_cli
+bin_PROGRAMS = freeswitch fs_cli fs_ivrd
+fs_ivrd_SOURCES = libs/esl/src/esl.c libs/esl/src/esl_config.c libs/esl/src/esl_event.c libs/esl/src/esl_threadmutex.c libs/esl/ivrd.c
fs_cli_SOURCES = libs/esl/src/esl.c libs/esl/src/esl_config.c libs/esl/src/esl_event.c libs/esl/src/esl_threadmutex.c libs/esl/fs_cli.c
freeswitch_SOURCES = src/switch.c
nodist_freeswitch_SOURCES = src/include/switch_version.h
fs_cli_CFLAGS = $(AM_CFLAGS) -Ilibs/esl/src/include
fs_cli_LDFLAGS = $(AM_LDFLAGS) -lpthread $(ESL_LDFLAGS)
+fs_ivrd_CFLAGS = $(AM_CFLAGS) -Ilibs/esl/src/include
+fs_ivrd_LDFLAGS = $(AM_LDFLAGS) -lpthread $(ESL_LDFLAGS)
freeswitch_CFLAGS = $(AM_CFLAGS) $(CORE_CFLAGS)
freeswitch_LDFLAGS = $(AM_LDFLAGS) -rpath $(libdir)
freeswitch_LDADD = libfreeswitch.la libs/apr/libapr-1.la
@@ -179,52 +206,57 @@
freeswitch_LDADD += libs/libedit/src/.libs/libedit.a
endif
-
if ADD_LIBEDIT
CORE_CFLAGS += -Ilibs/libedit/src -DSWITCH_HAVE_LIBEDIT
CORE_LIBS += libs/libedit/src/.libs/libedit.a
endif
if ADD_ODBC
-CORE_CFLAGS += -DSWITCH_HAVE_ODBC
-libfreeswitch_la_SOURCES += src/switch_odbc.c
-libfreeswitch_la_LDFLAGS += -Wl,-lodbc
+CORE_CFLAGS += -DSWITCH_HAVE_ODBC $(ODBC_INC_FLAGS)
+libfreeswitch_la_LDFLAGS += $(ODBC_LIB_FLAGS)
endif
+if ENABLE_ZRTP
+libfreeswitch_la_LDFLAGS += -lzrtp -lbn
+endif
+
bin_SCRIPTS = scripts/gentls_cert scripts/fsxs
src/include/switch_swigable_cpp.h: src/include/switch_cpp.h
- $(CC) -E src/include/switch_cpp.h -DSWITCH_DECLARE\(x\)=x -DSWITCH_DECLARE_CONSTRUCTOR= -DSWITCH_DECLARE_NONSTD\(x\)=x 2>/dev/null | grep -v "^#" > src/include/switch_swigable_cpp.h
+ $(CC) -E src/include/switch_cpp.h -DSWITCH_DECLARE_CLASS= -DSWITCH_DECLARE\(x\)=x -DSWITCH_DECLARE_CONSTRUCTOR= -DSWITCH_DECLARE_NONSTD\(x\)=x 2>/dev/null | grep -v "^#" > src/include/switch_swigable_cpp.h
libs/libedit/src/.libs/libedit.a:
cd libs/libedit && $(MAKE)
-$(libfreeswitch_la_SOURCES): $(CORE_LIBS) $(switch_builddir)/quiet_libtool modules.conf
+$(libfreeswitch_la_SOURCES): $(CORE_LIBS) $(switch_builddir)/quiet_libtool modules.conf
$(switch_builddir)/quiet_libtool: $(switch_builddir)/libtool
@cat libtool | sed -e 's|$$show "$$command"|if test -z "$$suppress_output" ; then $$show "Compiling $$srcfile ..." ; fi|' > quiet_libtool
yaml-files:
- @echo `mkdir $(DESTDIR)$(prefix)/conf/yaml 2>/dev/null`
- $(INSTALL) -m 644 conf/yaml/*.yaml $(DESTDIR)$(prefix)/conf/yaml
+ @echo `mkdir $(DESTDIR)@confdir@/yaml 2>/dev/null`
+ $(INSTALL) -m 644 conf/yaml/*.yaml $(DESTDIR)@confdir@/yaml
vm-sync:
- test -d $(DESTDIR)$(prefix)/conf || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf
- test -d $(DESTDIR)$(prefix)/conf/lang || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang
- test -d $(DESTDIR)$(prefix)/conf/lang/en || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang/en
- test -d $(DESTDIR)$(prefix)/conf/lang/en/vm || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang/en/vm
- $(INSTALL) -m 644 conf/lang/en/vm/* $(DESTDIR)$(prefix)/conf/lang/en/vm
+ test -d $(DESTDIR)@confdir@ || $(mkinstalldirs) $(DESTDIR)@confdir@
+ test -d $(DESTDIR)@confdir@/lang || $(mkinstalldirs) $(DESTDIR)@confdir@/lang
+ test -d $(DESTDIR)@confdir@/lang/en || $(mkinstalldirs) $(DESTDIR)@confdir@/lang/en
+ test -d $(DESTDIR)@confdir@/lang/en/demo || $(mkinstalldirs) $(DESTDIR)@confdir@/lang/en/demo
+ test -d $(DESTDIR)@confdir@/lang/en/vm || $(mkinstalldirs) $(DESTDIR)@confdir@/lang/en/vm
+ $(INSTALL) -m 644 conf/lang/en/vm/* $(DESTDIR)@confdir@/lang/en/vm
+ $(INSTALL) -m 644 conf/lang/en/demo/* $(DESTDIR)@confdir@/lang/en/demo
samples-conf:
- test -d $(DESTDIR)$(prefix)/conf || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf
+ test -d $(DESTDIR)@confdir@/ || $(mkinstalldirs) $(DESTDIR)@confdir@
for conffile in `find conf -name \*.xml && find conf -name \*.conf && find conf -name \*.tpl && find conf -name \*.ttml && find conf -name mime.types` ; do \
- dir=`echo $$conffile | sed -e 's|/[^/]*$$||'`; \
+ src_dir=`echo $$conffile | sed -e 's|/[^/]*$$||'`; \
+ dir=`echo $$src_dir | sed -e 's|conf||'`; \
filename=`echo $$conffile | sed -e 's|^.*/||'`; \
- test -d $(DESTDIR)$(PREFIX)/$$dir || $(mkinstalldirs) $(DESTDIR)$(prefix)/$$dir ; \
- test -f $(DESTDIR)$(PREFIX)/$$dir/$$filename || \
- test -f $(DESTDIR)$(PREFIX)/$$dir/$$filename.noload || \
- $(INSTALL) -m 644 $$dir/$$filename $(DESTDIR)$(PREFIX)/$$dir; \
+ test -d $(DESTDIR)@confdir@/$$dir || $(mkinstalldirs) $(DESTDIR)@confdir@/$$dir ; \
+ test -f $(DESTDIR)@confdir@/$$dir/$$filename || \
+ test -f $(DESTDIR)@confdir@/$$dir/$$filename.noload || \
+ $(INSTALL) -m 644 $$src_dir/$$filename $(DESTDIR)@confdir@/$$dir; \
done
samples-htdocs:
@@ -244,7 +276,7 @@
$(mkinstalldirs) $(DESTDIR)$(prefix)/$$x ; \
done
$(mkinstalldirs) $(DESTDIR)@modinstdir@
- test -d $(DESTDIR)$(prefix)/conf || $(MAKE) samples-conf
+ test -d $(DESTDIR)@confdir@ || $(MAKE) samples-conf
test -d $(DESTDIR)$(prefix)/htdocs || $(MAKE) samples-htdocs
.version:
@@ -292,6 +324,10 @@
@cd libs/apr-util && $(MAKE)
@$(TOUCH_TARGET)
+libs/speex/libspeex/libspeexdsp.la: libs/speex/.update
+ @cd libs/speex && $(MAKE)
+ @$(TOUCH_TARGET)
+
libs/sqlite/libsqlite3.la: libs/sqlite libs/sqlite/.update
@cd libs/sqlite && $(MAKE) CFLAGS="$(SWITCH_AM_CFLAGS)"
@$(TOUCH_TARGET)
@@ -304,12 +340,6 @@
@cd libs/srtp && $(MAKE)
@$(TOUCH_TARGET)
-if USE_INTREE_RESAMPLE
-libs/libresample/libresample.la: libs/libresample libs/libresample/.update
- @cd libs/libresample && $(MAKE)
- @$(TOUCH_TARGET)
-endif
-
core:
$(MAKE) $(AM_MAKEFLAGS) libfreeswitch.la
@@ -320,7 +350,7 @@
core-install: core_install
clean_core: clean-libLTLIBRARIES
-
+ rm -f $(libfreeswitch_la_OBJECTS)
install_core: install-libLTLIBRARIES
core_install: install_core
@@ -349,6 +379,8 @@
cd libs/sofia-sip && $(MAKE) clean
cd libs/openzap && $(MAKE) clean
cd libs/portaudio && $(MAKE) clean
+ cd libs/speex && $(MAKE) clean
+ cd libs/esl && $(MAKE) clean
swigall:
@echo reswigging all
@@ -361,6 +393,11 @@
cd libs/sofia-sip && $(MAKE) -j
$(MAKE) -j modules
+speex-reconf:
+ cd libs/speex && autoreconf
+ cd libs/speex && ./config.status --recheck
+ cd libs/speex && ./config.status
+
python-reconf:
rm -f src/mod/languages/mod_python/Makefile
./config.status
@@ -376,6 +413,12 @@
cd libs/openzap && sh ./configure.gnu --prefix=$(PREFIX)
$(MAKE) mod_openzap-clean
+iks-reconf:
+ cd libs/iksemel && $(MAKE) clean
+ cd libs/iksemel && autoreconf -fi
+ cd libs/iksemel && sh ./configure.gnu --prefix=$(PREFIX)
+ $(MAKE) mod_dingaling-clean
+
sofia-reconf:
cd libs/sofia-sip && sh ./autogen.sh
cd libs/sofia-sip && $(MAKE) clean
@@ -423,7 +466,7 @@
-e "s,@LIB_DIR\@,@libdir@," \
-e "s,@BIN_DIR\@,@bindir@," \
-e "s,@INC_DIR\@,@includedir@," \
- -e "s,@CFG_DIR\@,$(PREFIX)/conf," \
+ -e "s,@CFG_DIR\@,@confdir@," \
-e "s,@DB_DIR\@,$(PREFIX)/db," \
-e "s,@PREFIX\@,$(PREFIX)," \
-e "s,@CC\@,$(CC)," \
Modified: freeswitch/branches/seven/acinclude.m4 (14471 => 14472)
--- freeswitch/branches/seven/acinclude.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/acinclude.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -6,5 +6,9 @@
m4_include([build/config/ac_gcc_x86_cpuid.m4])
m4_include([build/config/ax_lib_mysql.m4])
m4_include([build/config/ax_check_java.m4])
+m4_include([build/config/erlang.m4])
+m4_include([build/config/odbc.m4])
m4_include([libs/apr/build/apr_common.m4])
+m4_include([libs/sofia-sip/m4/sac-pkg-config.m4])
+m4_include([libs/sofia-sip/m4/sac-openssl.m4])
m4_include([build/config/libcurl.m4])
Modified: freeswitch/branches/seven/bootstrap.sh (14471 => 14472)
--- freeswitch/branches/seven/bootstrap.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/bootstrap.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -3,9 +3,9 @@
BASEDIR=`pwd`;
LIBDIR=${BASEDIR}/libs;
-SUBDIRS="codec/ilbc curl iksemel voipcodecs \
- js js/nsprpub libdingaling libedit libresample libsndfile pcre sofia-sip \
- speex sqlite srtp openzap spandsp";
+SUBDIRS="ilbc curl iksemel voipcodecs \
+ js js/nsprpub libdingaling libedit libsndfile pcre sofia-sip \
+ speex sqlite srtp openzap spandsp libg722_1 portaudio unimrcp";
if [ ! -f modules.conf ]; then
@@ -87,14 +87,12 @@
# output is multiline from 1.5 onwards
# Require libtool 1.4 or newer
-libtool=`${LIBDIR}/apr/build/PrintPath glibtool libtool libtool15 libtool14`
+libtool=${LIBTOOL:-`${LIBDIR}/apr/build/PrintPath glibtool libtool libtool22 libtool15 libtool14`}
lt_pversion=`$libtool --version 2>/dev/null|sed -e 's/([^)]*)//g;s/^[^0-9]*//;s/[- ].*//g;q'`
if test -z "$lt_pversion"; then
-echo "bootstrap: libtool not found."
-echo " You need libtool version 1.5.14 or newer (up to 1.9.x) installed. 2.x will not work! see http://jira.freeswitch.org/browse/FSBUILD-82"
-echo " libtool version 2.0 and above WILL NOT work."
-echo " to build FreeSWITCH from SVN."
-exit 1
+ echo "bootstrap: libtool not found."
+ echo " You need libtool version 1.5.14 or newer to build FreeSWITCH from SVN."
+ exit 1
fi
lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
IFS=.; set $lt_version; IFS=' '
@@ -103,8 +101,11 @@
if test -z "$1"; then a=0 ; else a=$1;fi
if test -z "$2"; then b=0 ; else b=$2;fi
if test -z "$3"; then c=0 ; else c=$3;fi
+lt_major=$a
-if test "$a" -lt "2"; then
+if test "$a" -eq "2"; then
+ lt_status="good"
+elif test "$a" -lt "2"; then
if test "$b" -lt "5" -o "$b" = "5" -a "$c" -lt "14" ; then
lt_status="bad"
fi
@@ -114,13 +115,48 @@
if test $lt_status = "good"; then
echo "bootstrap: libtool version $lt_pversion (ok)"
else
-echo "bootstrap: libtool version $lt_pversion found."
-echo " You need libtool version 1.5.14 or newer (up to 1.9.x) installed. 2.x will not work! see http://jira.freeswitch.org/browse/FSBUILD-82"
-echo " to build FreeSWITCH from SVN."
+ echo "bootstrap: libtool version $lt_pversion found."
+ echo " You need libtool version 1.5.14 or newer to build FreeSWITCH from SVN."
+ exit 1
+fi
-exit 1
+# check libtoolize availability
+if [ -n "${LIBTOOL}" ]; then
+ libtoolize=${LIBTOOLIZE:-`dirname "${libtool}"`/libtoolize}
+else
+ libtoolize=${LIBTOOLIZE:-`${LIBDIR}/apr/build/PrintPath glibtoolize libtoolize15 libtoolize14 libtoolize`}
fi
+if [ "x$libtoolize" = "x" ]; then
+ echo "libtoolize not found in path"
+ exit 1
+fi
+if [ ! -x "$libtoolize" ]; then
+ echo "$libtoolize does not exist or ist not executable"
+ exit 1
+fi
+# compare libtool and libtoolize version
+ltl_pversion=`$libtoolize --version 2>/dev/null|sed -e 's/([^)]*)//g;s/^[^0-9]*//;s/[- ].*//g;q'`
+ltl_version=`echo $ltl_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
+IFS=.; set $ltl_version; IFS=' '
+
+if [ "x${lt_version}" != "x${ltl_version}" ]; then
+ echo "$libtool and $libtoolize have different versions"
+ exit 1
+fi
+
+
+#
+# Info output
+#
+echo "Bootstrapping using:"
+echo " autoconf : ${AUTOCONF:-`which autoconf`}"
+echo " automake : ${AUTOMAKE:-`which automake`}"
+echo " aclocal : ${ACLOCAL:-`which aclocal`}"
+echo " libtool : ${libtool} (${lt_version})"
+echo " libtoolize: ${libtoolize}"
+echo
+
echo "Entering directory ${LIBDIR}/apr"
cd ${LIBDIR}/apr
@@ -144,13 +180,6 @@
# bootstrap: Build the support scripts needed to compile from a
# checked-out version of the source code.
-
-libtoolize=`build/PrintPath glibtoolize libtoolize15 libtoolize14 libtoolize`
-if [ "x$libtoolize" = "x" ]; then
- echo "libtoolize not found in path"
- exit 1
-fi
-
# Create the libtool helper files
#
# Note: we copy (rather than link) them to simplify distribution.
@@ -163,21 +192,30 @@
# and libtool 1.4 by simply rerunning the bootstrap script.
(cd build ; rm -f ltconfig ltmain.sh libtool.m4)
-$libtoolize --copy --automake
+if ${libtoolize} -n --install >/dev/null 2>&1 ; then
+ $libtoolize --force --copy --install
+else
+ $libtoolize --force --copy
+fi
if [ -f libtool.m4 ]; then
ltfile=`pwd`/libtool.m4
else
- ltfindcmd="`sed -n \"/=[^\\\`]/p;/libtool_m4=/{s/.*=/echo /p;q;}\" \
- < $libtoolize`"
- ltfile=${LIBTOOL_M4-`eval "$ltfindcmd"`}
+ if [ $lt_major -eq 2 ]; then
+ ltfindcmd="`sed -n \"/aclocaldir=/{s/.*=/echo /p;q;}\" < $libtoolize`"
+ ltfile=${LIBTOOL_M4-`eval "$ltfindcmd"`/libtool.m4}
+ else
+ ltfindcmd="`sed -n \"/=[^\\\`]/p;/libtool_m4=/{s/.*=/echo /p;q;}\" \
+ < $libtoolize`"
+ ltfile=${LIBTOOL_M4-`eval "$ltfindcmd"`}
+ fi
# Expecting the code above to be very portable, but just in case...
if [ -z "$ltfile" -o ! -f "$ltfile" ]; then
ltpath=`dirname $libtoolize`
ltfile=`cd $ltpath/../share/aclocal ; pwd`/libtool.m4
fi
fi
-
+
if [ ! -f $ltfile ]; then
echo "$ltfile not found"
exit 1
@@ -196,19 +234,6 @@
# Clean up any leftovers
rm -f aclocal.m4 libtool.m4
-#
-# Generate the autoconf header and ./configure
-#
-echo "Creating include/arch/unix/apr_private.h.in ..."
-${AUTOHEADER:-autoheader}
-
-echo "Creating configure ..."
-### do some work to toss config.cache?
-${AUTOCONF:-autoconf}
-
-# Remove autoconf 2.5x's cache directory
-rm -rf autom4te*.cache
-
# fix for FreeBSD (at least):
# libtool.m4 is in share/aclocal, while e.g. aclocal19 only looks in share/aclocal19
# get aclocal's default directory and include the libtool.m4 directory via -I if
@@ -220,6 +245,24 @@
ACLOCAL_OPTS="-I `dirname ${ltfile}`"
fi
+### run aclocal
+echo "Re-creating aclocal.m4 ..."
+${ACLOCAL:-aclocal} ${ACLOCAL_OPTS}
+
+### do some work to toss config.cache?
+echo "Creating configure ..."
+${AUTOCONF:-autoconf}
+
+#
+# Generate the autoconf header
+#
+echo "Creating include/arch/unix/apr_private.h.in ..."
+${AUTOHEADER:-autoheader}
+
+
+# Remove autoconf 2.5x's cache directory
+rm -rf autom4te*.cache
+
echo "Entering directory ${LIBDIR}/apr-util"
cd ${LIBDIR}/apr-util
./buildconf
@@ -243,6 +286,7 @@
LTTEST=`grep "AC_PROG_LIBTOOL" ${CFFILE}`
LTTEST2=`grep "AM_PROG_LIBTOOL" ${CFFILE}`
AMTEST=`grep "AM_INIT_AUTOMAKE" ${CFFILE}`
+ AMTEST2=`grep "AC_PROG_INSTALL" ${CFFILE}`
AHTEST=`grep "AC_CONFIG_HEADERS" ${CFFILE}`
echo "Creating aclocal.m4"
@@ -251,7 +295,11 @@
#only run if AC_PROG_LIBTOOL is in configure.in/configure.ac
if [ ! -z "${LTTEST}" -o "${LTTEST2}" ] ; then
echo "Running libtoolize..."
- $libtoolize --force --copy ;
+ if ${libtoolize} -n --install >/dev/null 2>&1 ; then
+ $libtoolize --force --copy --install
+ else
+ $libtoolize --force --copy
+ fi
fi
echo "Creating configure"
@@ -263,12 +311,10 @@
${AUTOHEADER:-autoheader} ;
fi
-#only run if AM_INIT_AUTOMAKE is in configure.in/configure.ac
- if [ ! -z "${AMTEST}" ] ; then
- if [ -f ${LIBDIR}/${i}/Makefile.am ] ; then
- echo "Creating Makefile.in"
- ${AUTOMAKE:-automake} --no-force --add-missing --copy ;
- fi
+#run if AM_INIT_AUTOMAKE / AC_PROG_INSTALL is in configure.in/configure.ac
+ if [ ! -z "${AMTEST}" -o "${AMTEST2}" ] ; then
+ echo "Creating Makefile.in"
+ ${AUTOMAKE:-automake} --no-force --add-missing --copy ;
fi
rm -rf autom4te*.cache
fi
Modified: freeswitch/branches/seven/build/Makefile (14471 => 14472)
--- freeswitch/branches/seven/build/Makefile 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -26,6 +26,15 @@
@echo " + $(MAKE) sounds-install +"
@echo " + $(MAKE) moh-install +"
@echo " + +"
+ @echo " + Install non english sounds: +"
+ @echo " + replace XX with language +"
+ @echo " + (ru : Russian) +"
+ @echo " + ------------------------------------ +"
+ @echo " + $(MAKE) cd-sounds-XX-install +"
+ @echo " + $(MAKE) uhd-sounds-XX-install +"
+ @echo " + $(MAKE) hd-sounds-XX-install +"
+ @echo " + $(MAKE) sounds-XX-install +"
+ @echo " + +"
@echo " + Upgrade to latest: +"
@echo " + ---------------------------------- +"
@echo " + $(MAKE) current +"
Modified: freeswitch/branches/seven/build/buildlib.sh (14471 => 14472)
--- freeswitch/branches/seven/build/buildlib.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/buildlib.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -22,7 +22,7 @@
fi
install=
-base=http://svn.freeswitch.org/downloads/libs
+base=http://files.freeswitch.org/downloads/libs
if [ ! -z "$1" ] && [ "$1" = install ] ; then
install=1
Modified: freeswitch/branches/seven/build/buildopal.sh (14471 => 14472)
--- freeswitch/branches/seven/build/buildopal.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/buildopal.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,13 +1,20 @@
#!/bin/sh
+uname -a | grep -qi bsd && MAKE=gmake || MAKE=make
+FS_DIR=`pwd`
+
cd /root
svn co https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/ptlib/trunk ptlib
cd ptlib
./configure --prefix=/usr
-make
-make install
+${MAKE}
+${MAKE} install
+
cd ..
-svn co https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/opal/trunk opal
+svn co https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/opal/branches/v3_6 opal
cd opal
-PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --prefix=/usr
-make
-make install
+export PKG_CONFIG_PATH=/usr/lib/pkgconfig
+./configure --prefix=/usr
+${MAKE}
+${MAKE} install
+cd ${FS_DIR}
+${MAKE} mod_opal-install
Copied: freeswitch/branches/seven/build/buildzrtp.sh (from rev 14471, freeswitch/trunk/build/buildzrtp.sh) (0 => 14472)
--- freeswitch/branches/seven/build/buildzrtp.sh (rev 0)
+++ freeswitch/branches/seven/build/buildzrtp.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+#!/bin/sh
+tar zxf libzrtp-0.81.514.tar.gz
+cd libzrtp-0.81.514
+patch -p1 < ../patches/zrtp_bnlib_pic.diff
+cd projects/gnu/
+./configure CFLAGS="-fPIC"
+make
+make install
Deleted: freeswitch/branches/seven/build/config/ODBC.m4
Modified: freeswitch/branches/seven/build/config/ax_cflags_warn_all_ansi.m4 (14471 => 14472)
--- freeswitch/branches/seven/build/config/ax_cflags_warn_all_ansi.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/config/ax_cflags_warn_all_ansi.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -14,12 +14,12 @@
for ac_arg dnl
in "-pedantic % -Wall -std=c99 -pedantic" dnl GCC
"-xstrconst % -v -Xc -xc99=all" dnl Solaris C
- "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix
- " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
- " % -ansi -ansiE -fullwarn" dnl IRIX
- "+ESlit % +w1 -Aa" dnl HP-UX C
- "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10)
- "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos)
+# "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix
+# " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
+# " % -ansi -ansiE -fullwarn" dnl IRIX
+# "+ESlit % +w1 -Aa" dnl HP-UX C
+# "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10)
+# "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos)
#
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;],
@@ -62,12 +62,12 @@
for ac_arg dnl
in "-pedantic % -Wall -ansi -pedantic" dnl GCC
"-xstrconst % -v -Xc" dnl Solaris C
- "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix
- " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
- " % -ansi -ansiE -fullwarn" dnl IRIX
- "+ESlit % +w1 -Aa" dnl HP-UX C
- "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10)
- "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos)
+# "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix
+# " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
+# " % -ansi -ansiE -fullwarn" dnl IRIX
+# "+ESlit % +w1 -Aa" dnl HP-UX C
+# "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10)
+# "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos)
#
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
AC_TRY_COMPILE([],[return 0;],
Copied: freeswitch/branches/seven/build/config/erlang.m4 (from rev 14471, freeswitch/trunk/build/config/erlang.m4) (0 => 14472)
--- freeswitch/branches/seven/build/config/erlang.m4 (rev 0)
+++ freeswitch/branches/seven/build/config/erlang.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,96 @@
+AC_DEFUN([CHECK_ERLANG], [
+#
+# Erlang checks for mod_erlang_event
+#
+AC_ARG_WITH(
+ [erlang],
+ [AS_HELP_STRING([--with-erlang], [Use system provided version of erlang (default: try)])],
+ [with_erlang="$withval"],
+ [with_erlang="try"]
+)
+
+if test "$with_erlang" != "no"
+then
+ save_CFLAGS="$CFLAGS"
+ save_LIBS="$LIBS"
+
+ if test "$with_erlang" != "yes" -a "$with_erlang" != "try" ; then
+ AC_MSG_CHECKING([for erlang])
+ if test ! -x "$with_erlang" ; then
+ AC_MSG_ERROR([Specified erlang does not exist or is not executable: $with_erlang])
+ fi
+ AC_MSG_RESULT([$with_erlang])
+ AC_SUBST([ERLANG], ["$with_erlang"])
+ else
+ AC_PATH_PROG([ERLANG], ["erl"], ["no"], ["$PATH:/usr/bin:/usr/local/bin"])
+ fi
+
+ if test "$ERLANG" != "no" ; then
+ AC_MSG_CHECKING([erlang version])
+ ERLANG_VER="`$ERLANG -version 2>&1 | cut -d' ' -f6`"
+
+ if test -z "$ERLANG_VER" ; then
+ AC_MSG_ERROR([Unable to detect erlang version])
+ fi
+ AC_MSG_RESULT([$ERLANG_VER])
+
+ ERLANG_LIBDIR=`$ERLANG -noshell -eval 'io:format("~n~s/lib~n", [[code:lib_dir("erl_interface")]]).' -s erlang halt | tail -n 1`
+ AC_MSG_CHECKING([erlang libdir])
+ if test -z "`echo $ERLANG_LIBDIR`" ; then
+ AC_MSG_ERROR([failed])
+ else
+ ERLANG_LDFLAGS="-L$ERLANG_LIBDIR $ERLANG_LDFLAGS"
+ LIBS="-L$ERLANG_LIBDIR $LIBS"
+ fi
+ AC_MSG_RESULT([$ERLANG_LIBDIR])
+
+ ERLANG_INCDIR=`$ERLANG -noshell -eval 'io:format("~n~s/include~n", [[code:lib_dir("erl_interface")]]).' -s erlang halt | tail -n 1`
+ AC_MSG_CHECKING([erlang incdir])
+ if test -z "`echo $ERLANG_INCDIR`" ; then
+ AC_MSG_ERROR([failed])
+ else
+ ERLANG_CFLAGS="-I$ERLANG_INCDIR $ERLANG_CFLAGS"
+ CFLAGS="-I$ERLANG_INCDIR $CFLAGS"
+ fi
+ AC_MSG_RESULT([$ERLANG_INCDIR])
+
+ AC_CHECK_HEADERS([ei.h], [has_ei_h="yes"], [has_ei_h="no"])
+
+ ERLANG_LIB="ei"
+
+ # check liei
+ AC_CHECK_LIB([$ERLANG_LIB], [ei_encode_version], [has_libei="yes"], [has_libei="no"])
+ # maybe someday ei will actually expose this?
+ AC_CHECK_LIB([$ERLANG_LIB], [ei_link_unlink], [ERLANG_CFLAGS="$ERLANG_CFLAGS -DEI_LINK_UNLINK"])
+
+ if test "$has_libei" = "no" ; then
+ AS_IF([test "$with_erlang" = "try"],
+ [AC_MSG_WARN([$ERLANG_LIB is unusable])],
+ [AC_MSG_ERROR([$ERLANG_LIB is unusable])]
+ )
+ elif test "$has_ei_h" = "no"; then
+ AS_IF([test "$with_erlang" = "try"],
+ [AC_MSG_WARN([ei.h is unusable - are the erlang development headers installed?])],
+ [AC_MSG_ERROR([ei.h is unusable - are the erlang development headers installed?])]
+ )
+ else
+ ERLANG_LDFLAGS="$ERLANG_LDFLAGS -lei"
+ AC_MSG_NOTICE([Your erlang seems OK, do not forget to enable mod_erlang_event in modules.conf])
+ AC_SUBST([ERLANG_CFLAGS], [$ERLANG_CFLAGS])
+ AC_SUBST([ERLANG_LDFLAGS], [$ERLANG_LDFLAGS])
+ fi
+
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+
+ else
+ AS_IF([test "$with_erlang" = "try"],
+ [AC_MSG_WARN([Could not find erlang, mod_erlang_event will not build, use --with-erlang to specify the location])],
+ [AC_MSG_ERROR([Could not find erlang, use --with-erlang to specify the location])]
+ )
+ fi
+else
+ AC_MSG_WARN([erlang support disabled, building mod_erlang_event will fail!])
+fi
+
+])
Copied: freeswitch/branches/seven/build/config/odbc.m4 (from rev 14471, freeswitch/trunk/build/config/odbc.m4) (0 => 14472)
--- freeswitch/branches/seven/build/config/odbc.m4 (rev 0)
+++ freeswitch/branches/seven/build/config/odbc.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,163 @@
+dnl Derrick Brashear
+dnl from KTH krb and Arla
+
+AC_DEFUN([ODBC_INC_WHERE1], [
+ac_cv_found_odbc_inc=no
+if test -f "$1/sql.h" ; then
+ ac_cv_found_odbc_inc=yes
+fi
+])
+
+AC_DEFUN([ODBC_INC_WHERE], [
+ for i in $1; do
+ AC_MSG_CHECKING(for odbc header in $i)
+ ODBC_INC_WHERE1($i)
+ if test "$ac_cv_found_odbc_inc" = "yes"; then
+ ac_cv_odbc_where_inc=$i
+ AC_MSG_RESULT(found)
+ break
+ else
+ AC_MSG_RESULT(no found)
+ fi
+ done
+])
+
+AC_DEFUN([ODBC_LIB_WHERE1], [
+saved_LIBS=$LIBS
+saved_CFLAGS=$CFLAGS
+case "$host" in
+ *darwin*)
+ LIBS="$saved_LIBS -L$1 -lodbc -framework CoreFoundation"
+ ;;
+ *)
+ LIBS="$saved_LIBS -L$1 -lodbc"
+ ;;
+esac
+CFLAGS="$saved_CFLAGS -I$ac_cv_odbc_where_inc"
+AC_TRY_LINK(
+[#include <sql.h>],
+[SQLHDBC con;
+SQLDisconnect(con);],
+[ac_cv_found_odbc_lib=yes],
+ac_cv_found_odbc_lib=no)
+LIBS=$saved_LIBS
+CFLAGS=$saved_CFLAGS
+])
+
+AC_DEFUN([TEST_LIBPATH], [
+changequote(<<, >>)
+define(<<AC_CV_FOUND>>, translit(ac_cv_found_$2_lib, <<- *>>, <<__p>>))
+changequote([, ])
+if test "$AC_CV_FOUND" = "yes"; then
+ if test \! -r "$1/lib$2.a" -a \! -r "$1/lib$2.so" -a \! -r "$1/lib$2.sl" -a \! -r "$1/lib$2.dylib"; then
+ AC_CV_FOUND=no
+ fi
+fi
+])
+
+
+AC_DEFUN([ODBC_LIB_WHERE], [
+ for i in $1; do
+ AC_MSG_CHECKING(for odbc library in $i)
+ ODBC_LIB_WHERE1($i)
+ TEST_LIBPATH($i, odbc)
+ if test "$ac_cv_found_odbc_lib" = "yes" ; then
+ ac_cv_odbc_where_lib=$i
+ AC_MSG_RESULT(found)
+ break
+ else
+ AC_MSG_RESULT(no found)
+ fi
+ done
+])
+
+AC_DEFUN([FIND_LIB_SUBDIR],
+[dnl
+AC_ARG_WITH([lib-subdir], AC_HELP_STRING([--with-lib-subdir=DIR],[Find libraries in DIR instead of lib]))
+AC_CHECK_SIZEOF(long)
+AC_CACHE_CHECK([what directory libraries are found in], [ac_cv_cmu_lib_subdir],
+[test "X$with_lib_subdir" = "Xyes" && with_lib_subdir=
+test "X$with_lib_subdir" = "Xno" && with_lib_subdir=
+ if test "X$with_lib_subdir" = "X" ; then
+ ac_cv_cmu_lib_subdir=lib
+ if test $ac_cv_sizeof_long -eq 4 ; then
+ test -d /usr/lib32 && ac_cv_cmu_lib_subdir=lib32
+ fi
+ if test $ac_cv_sizeof_long -eq 8 ; then
+ test -d /usr/lib64 && ac_cv_cmu_lib_subdir=lib64
+ fi
+ else
+ ac_cv_cmu_lib_subdir=$with_lib_subdir
+ fi])
+ AC_SUBST(LIB_SUBDIR, $ac_cv_cmu_lib_subdir)
+ ])
+
+
+AC_DEFUN([AX_LIB_ODBC], [
+AC_REQUIRE([FIND_LIB_SUBDIR])
+AC_ARG_WITH(odbc,
+ [ --with-odbc=PREFIX Compile with ODBC support],
+ [if test "X$with_odbc" = "X"; then
+ with_odbc=yes
+ fi])
+AC_ARG_WITH(odbc-lib,
+ [ --with-odbc-lib=dir use odbc libraries in dir],
+ [if test "$withval" = "yes" -o "$withval" = "no"; then
+ AC_MSG_ERROR([No argument for --with-odbc-lib])
+ fi])
+AC_ARG_WITH(odbc-include,
+ [ --with-odbc-include=dir use odbc headers in dir],
+ [if test "$withval" = "yes" -o "$withval" = "no"; then
+ AC_MSG_ERROR([No argument for --with-odbc-include])
+ fi])
+
+ if test "X$with_odbc" != "X"; then
+ if test "$with_odbc" != "yes"; then
+ ac_cv_odbc_where_lib=$with_odbc
+ ac_cv_odbc_where_inc=$with_odbc/include
+ fi
+ fi
+
+ if test "X$with_odbc_include" != "X"; then
+ ac_cv_odbc_where_inc=$with_odbc_include
+ fi
+ if test "X$ac_cv_odbc_where_inc" = "X"; then
+ ODBC_INC_WHERE(/usr/include /usr/local/include)
+ fi
+
+ if test "X$with_odbc_lib" != "X"; then
+ ac_cv_odbc_where_lib=$with_odbc_lib
+ fi
+ if test "X$ac_cv_odbc_where_lib" = "X"; then
+ AC_CHECK_LIB([odbc],[SQLDisconnect],[ac_cv_odbc_where_lib="yes"],[
+ ODBC_LIB_WHERE(/usr/$LIB_SUBDIR /usr/local/$LIB_SUBDIR)
+ ])
+ fi
+
+ AC_MSG_CHECKING(whether to include odbc)
+ if test "X$ac_cv_odbc_where_lib" = "X" -o "X$ac_cv_odbc_where_inc" = "X"; then
+ ac_cv_found_odbc=no
+ AC_MSG_RESULT(no)
+ else
+ ac_cv_found_odbc=yes
+ AC_MSG_RESULT(yes)
+ ODBC_INC_DIR=$ac_cv_odbc_where_inc
+ ODBC_LIB_DIR=$ac_cv_odbc_where_lib
+ ODBC_INC_FLAGS="-I$ac_cv_odbc_where_inc"
+ ODBC_LIB_FLAGS="-Wl,-lodbc"
+ case "$host" in
+ *darwin*)
+ ODBC_LIB_FLAGS="$ODBC_LIB_FLAGS -framework CoreFoundation"
+ ;;
+ esac
+ if test "$ac_cv_odbc_where_lib" != "yes"; then
+ ODBC_LIB_FLAGS="-L$ac_cv_odbc_where_lib $ODBC_LIB_FLAGS"
+ fi
+ AC_SUBST(ODBC_INC_DIR)
+ AC_SUBST(ODBC_LIB_DIR)
+ AC_SUBST(ODBC_INC_FLAGS)
+ AC_SUBST(ODBC_LIB_FLAGS)
+ AC_DEFINE([HAVE_ODBC],[1],[libodbc])
+ fi
+ ])
+
Modified: freeswitch/branches/seven/build/freeswitch.init.redhat (14471 => 14472)
--- freeswitch/branches/seven/build/freeswitch.init.redhat 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/freeswitch.init.redhat 2009-08-09 18:53:22 UTC (rev 14472)
@@ -15,9 +15,10 @@
. /etc/init.d/functions
PROG_NAME=freeswitch
-PID_FILE=/opt/freeswitch/log/freeswitch.pid
-FS_USER=freeswitch
-FS_FILE=/opt/freeswitch/bin/freeswitch
+PID_FILE=${PID_FILE-/opt/freeswitch/log/freeswitch.pid}
+FS_USER=${FS_USER-freeswitch}
+FS_FILE=${FS_FILE-/opt/freeswitch/bin/freeswitch}
+FS_HOME=${FS_HOME-/opt/freeswitch}
LOCK_FILE=/var/lock/subsys/freeswitch
FREESWITCH_ARGS="-nc"
RETVAL=0
@@ -40,7 +41,7 @@
return 1
fi
fi
-
+ cd $FS_HOME
daemon --user $FS_USER --pidfile $PID_FILE "$FS_FILE $FREESWITCH_ARGS $FREESWITCH_PARAMS >/dev/null 2>&1"
echo
RETVAL=$?
@@ -58,6 +59,7 @@
echo
return 1;
fi
+ cd $FS_HOME
$FS_FILE -stop > /dev/null 2>&1
killproc $PROG_NAME
RETVAL=$?
Modified: freeswitch/branches/seven/build/freeswitch.monitrc (14471 => 14472)
--- freeswitch/branches/seven/build/freeswitch.monitrc 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/freeswitch.monitrc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -12,9 +12,8 @@
if failed checksum then unmonitor
if failed permission 755 then unmonitor
if failed uid freeswitch then unmonitor
- if failed gid daemon then unmonitor
- check file sendmail_rc with path /etc/init.d/freeswitch
+ check file freeswitch_rc with path /etc/init.d/freeswitch
group voice
if failed checksum then unmonitor
if failed permission 755 then unmonitor
Modified: freeswitch/branches/seven/build/getlib.sh.in (14471 => 14472)
--- freeswitch/branches/seven/build/getlib.sh.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/getlib.sh.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -5,15 +5,15 @@
WGET=@WGET@
CURL=@CURL@
-if [ -f $WGET ] ; then
+if [ -f "$WGET" ] ; then
DOWNLOAD_CMD=$WGET
else
- if [ -f $CURL ] ; then
+ if [ -f "$CURL" ] ; then
DOWNLOAD_CMD="$CURL -O"
fi
fi
-base=http://svn.freeswitch.org/downloads/libs/
+base=http://files.freeswitch.org/downloads/libs/
tarfile=$1
url=`echo $tarfile | grep "://"`
Modified: freeswitch/branches/seven/build/getsounds.sh.in (14471 => 14472)
--- freeswitch/branches/seven/build/getsounds.sh.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/getsounds.sh.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -33,4 +33,3 @@
fi
exit 0
-
Modified: freeswitch/branches/seven/build/ignore_helper.pl (14471 => 14472)
--- freeswitch/branches/seven/build/ignore_helper.pl 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/ignore_helper.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,6 +1,6 @@
################################################################################
# ignore_helper.pl
-# Copyright (c) 2007 Anthony Minessale II <anthmct@yahoo.com>
+# Copyright (c) 2007-2009 Anthony Minessale II <anthm@freeswitch.org>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
Modified: freeswitch/branches/seven/build/modmake.rules.in (14471 => 14472)
--- freeswitch/branches/seven/build/modmake.rules.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/modmake.rules.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -10,7 +10,7 @@
INSTALL=@INSTALL@
GETLIB=@GETLIB@
LIBTOOL=@LIBTOOL@
-LTINSTALL=$(LIBTOOL) --mode=install $(INSTALL)
+LTINSTALL=$(LIBTOOL) --quiet --mode=install $(INSTALL)
LTUNINSTALL=$(LIBTOOL) --mode=uninstall rm -f
CCLD = $(CC)
CXXLD = $(CXX)
@@ -21,6 +21,9 @@
CURL_DIR=$(switch_srcdir)/libs/curl
CURLLA=$(CURL_DIR)/lib/libcurl.la
+OPENSSL_LIBS=@openssl_LIBS@
+OPENSSL_CFLAGS=@openssl_CFLAGS@
+
LIBS=$(switch_builddir)/libfreeswitch.la
DEFS=@DEFS@
PREFIX = @prefix@
@@ -30,6 +33,7 @@
LD_LIBRARY_PATH=@libdir@:$LD_LIBRARY_PATH
OSARCH=`uname -s`
DYNAMIC_LIB_EXTEN = @DYNAMIC_LIB_EXTEN@
+LIBTOOL_LIB_EXTEN = @LIBTOOL_LIB_EXTEN@
SOLINK = @SOLINK@
LDFLAGS=@SWITCH_AM_LDFLAGS@ @LDFLAGS@ $(OUR_LDFLAGS)
@@ -39,11 +43,11 @@
COMPILE = $(CC) $(ALL_CFLAGS) $(DEFS)
LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(COMPILE)
-LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(ALL_CFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(ALL_CFLAGS) $(LDFLAGS) -shared -module -avoid-version -rpath $(MODINSTDIR) -o $@
CXXCOMPILE = $(CXX) $(ALL_CXXFLAGS) $(DEFS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile --tag=CXX $(CXXCOMPILE)
-CXXLINK = $(LIBTOOL) --mode=link --tag=CXX $(CXXLD) $(ALL_CXXFLAGS) $(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) --mode=link --tag=CXX $(CXXLD) $(ALL_CXXFLAGS) $(LDFLAGS) -shared -module -avoid-version -rpath $(MODINSTDIR) -o $@
CSOURCEFILE=$(MODNAME).c
CXXSOURCEFILE=$(MODNAME).cpp
@@ -56,7 +60,7 @@
RECURSE_OUR_DEPS=`test -z "$(WANT_CURL)" || if test ! -z "$(LIBCURL_DEPS)"; then echo $(CURLLA); fi `
RECURSE_OUR_CFLAGS=`test -z "$(WANT_CURL)" || echo $(LIBCURL_CPPFLAGS) ; $(LOCAL_INSERT_CFLAGS) `
RECURSE_OUR_LDFLAGS=`test -z "$(WANT_CURL)" || echo $(LIBCURL) ; $(LOCAL_INSERT_LDFLAGS) `
-RECURSE_MAKE=modname="$(RECURSE_MODNAME)" ; \
+RECURSE_MAKE=+modname="$(RECURSE_MODNAME)" ; \
sourcefile="$(RECURSE_SOURCEFILE)" ; \
osarch=`uname -s` ; \
ourdefs="$(RECURSE_OUR_DEPS)" ; \
@@ -81,7 +85,7 @@
extraclean: Makefile
@$(RECURSE_MAKE) extraclean-modules || exit 1
-all-modules: local_depend $(MODNAME).$(DYNAMIC_LIB_EXTEN) local_all Makefile
+all-modules: local_depend $(MODNAME).$(LIBTOOL_LIB_EXTEN) local_all Makefile
depend-modules: local_depend
clean-modules: local_clean mod_clean
install-modules: all-modules depend_install local_install mod_install
@@ -107,27 +111,27 @@
exit 1 ;\
fi
-$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(LIBS) $(LOCAL_LIBADD) $(OUR_DEPS) $(LOCAL_OBJS) $(OUR_OBJS) $(SOURCEFILE) $(MODNAME).o
+$(MODNAME).$(LIBTOOL_LIB_EXTEN): $(LIBS) $(LOCAL_LIBADD) $(OUR_DEPS) $(LOCAL_OBJS) $(OUR_OBJS) $(SOURCEFILE) $(MODNAME).lo
@echo Creating $@...
@test -d .libs || mkdir .libs
@error="";\
if test -f $(CSOURCEFILE); then \
- $(LINK) $(SOLINK) $(MODNAME).o $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\
+ $(LINK) $(SOLINK) $(MODNAME).lo $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LOCAL_LDFLAGS_POST) $(LINK_OUTPUT_REDIR) ;\
else \
- $(CXXLINK) $(SOLINK) $(MODNAME).o $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\
+ $(CXXLINK) $(SOLINK) $(MODNAME).lo $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LOCAL_LDFLAGS_POST) $(LINK_OUTPUT_REDIR) ;\
fi;
mod_clean:
- @rm -fr *.$(DYNAMIC_LIB_EXTEN) *.o *.lo *~ .libs $(LOCAL_OBJS)
+ @rm -fr *.$(LIBTOOL_LIB_EXTEN) *.o *.lo *~ .libs $(LOCAL_OBJS)
-mod_install: $(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(DYNAMIC_LIB_EXTEN)
+mod_install: $(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(LIBTOOL_LIB_EXTEN)
-$(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(DYNAMIC_LIB_EXTEN):$(MODNAME).$(DYNAMIC_LIB_EXTEN)
+$(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(LIBTOOL_LIB_EXTEN):$(MODNAME).$(LIBTOOL_LIB_EXTEN)
@echo installing $<
- @$(LTINSTALL) $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(DESTDIR)$(MODINSTDIR) >/dev/null
+ @$(LTINSTALL) $(MODNAME).$(LIBTOOL_LIB_EXTEN) $(DESTDIR)$(MODINSTDIR) >/dev/null
mod_uninstall:
- @$(LTUNINSTALL) $(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(DYNAMIC_LIB_EXTEN)
+ @$(LTUNINSTALL) $(DESTDIR)$(MODINSTDIR)/$(MODNAME).$(LIBTOOL_LIB_EXTEN)
# define these in your makefile if you wish
local_all local_depend local_clean depend_install local_install local_distclean local_extraclean local_uninstall:
Modified: freeswitch/branches/seven/build/modules.conf.in (14471 => 14472)
--- freeswitch/branches/seven/build/modules.conf.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/modules.conf.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -7,6 +7,7 @@
applications/mod_enum
applications/mod_fifo
#applications/mod_fax
+#applications/mod_curl
applications/mod_voicemail
#applications/mod_lcr
applications/mod_limit
@@ -14,22 +15,29 @@
applications/mod_esf
#applications/mod_easyroute
applications/mod_fsv
+#applications/mod_nibblebill
#applications/mod_soundtouch
#applications/mod_rss
#applications/mod_snom
#applications/mod_vmd
+#applications/mod_memcache
+#applications/mod_spy
+applications/mod_cluechoo
+#asr_tts/mod_unimrcp
#asr_tts/mod_flite
#asr_tts/mod_pocketsphinx
#asr_tts/mod_cepstral
codecs/mod_g723_1
codecs/mod_amr
+#codecs/mod_amrwb
codecs/mod_g729
codecs/mod_h26x
codecs/mod_voipcodecs
codecs/mod_ilbc
codecs/mod_speex
-#codecs/mod_siren
+codecs/mod_siren
#codecs/mod_celt
+#codecs/mod_dahdi_codec
#dialplans/mod_dialplan_directory
dialplans/mod_dialplan_xml
dialplans/mod_dialplan_asterisk
@@ -41,18 +49,22 @@
endpoints/mod_loopback
#endpoints/mod_alsa
#endpoints/mod_opal
+#endpoints/mod_skypiax
#../../libs/openzap/mod_openzap
#event_handlers/mod_event_multicast
event_handlers/mod_event_socket
event_handlers/mod_cdr_csv
#event_handlers/mod_radius_cdr
+#event_handlers/mod_erlang_event
formats/mod_native_file
formats/mod_sndfile
#formats/mod_shout
formats/mod_local_stream
formats/mod_tone_stream
+formats/mod_file_string
#languages/mod_python
languages/mod_spidermonkey
+languages/mod_spidermonkey_curl
languages/mod_spidermonkey_teletone
languages/mod_spidermonkey_core_db
languages/mod_spidermonkey_socket
@@ -70,4 +82,11 @@
#say/mod_say_fr
#say/mod_say_it
#say/mod_say_nl
+say/mod_say_ru
#say/mod_say_zh
+
+
+
+## Experimental Modules (don't cry if they're broken)
+#../../contrib/mod/endpoints/mod_khomp
+#../../contrib/mod/xml_int/mod_xml_odbc
Copied: freeswitch/branches/seven/build/moh_version.txt (from rev 14471, freeswitch/trunk/build/moh_version.txt) (0 => 14472)
--- freeswitch/branches/seven/build/moh_version.txt (rev 0)
+++ freeswitch/branches/seven/build/moh_version.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+1.0.8
\ No newline at end of file
Modified: freeswitch/branches/seven/build/sounds_version.txt (14471 => 14472)
--- freeswitch/branches/seven/build/sounds_version.txt 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/sounds_version.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1 +1 @@
-1.0.7
+1.0.10
Modified: freeswitch/branches/seven/build/turbo_build.sh (14471 => 14472)
--- freeswitch/branches/seven/build/turbo_build.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/build/turbo_build.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,12 +1,19 @@
arg=$1 ; shift
+prefix=`cat config.log | grep ^prefix=\' | awk -F \' '{print $2}'`
+if [ -z $prefix ] ; then
+ prefix="/usr/local/freeswitch"
+fi
+unset VERBOSE
switch_srcdir=`pwd`
if [ -z $MAKE ] ; then
MAKE=make
fi
if [ -z $arg ] ; then
- $MAKE clean
- $MAKE -j freeswitch
+ echo "Cleaning tree...."
+ $MAKE clean modwipe 2>&1 > /dev/null
+ echo "Building core...."
+ $MAKE -j freeswitch 2>&1 > /dev/null
MODS=`cat modules.conf | grep -v \#`
for i in $MODS ; do
MOD_NAME=`echo $i | sed -e 's|^.*/||'`
@@ -14,6 +21,7 @@
touch /tmp/$MOD_NAME.tmp
$0 $MOD_NAME $MOD_DIR
done
+ echo "Building mods...."
while [ 1 = 1 ] ; do
x=0
for i in $MODS ; do
@@ -23,7 +31,8 @@
done
if [ $x = 0 ] ; then
echo Build finished. Making install
- $MAKE install
+ $MAKE -j install 2>&1 > /dev/null
+ echo done
exit;
fi
sleep 1
@@ -41,14 +50,14 @@
MOD_NAME=$1 ; shift
MOD_DIR=$1 ; shift
-echo "Making module in $MOD_NAME"
+#echo "Making module in $MOD_NAME..."
if [ -f $MOD_DIR/Makefile ] ; then
- cd $MOD_DIR && BASE=$switch_srcdir $MAKE -j
+ cd $MOD_DIR && BASE=$switch_srcdir $MAKE -j 2>&1 > /dev/null
else
- cd $MOD_DIR && BASE=$switch_srcdir $MAKE -j -f $switch_srcdir/build/modmake.rules
+ cd $MOD_DIR && BASE=$switch_srcdir $MAKE -j -f $switch_srcdir/build/modmake.rules 2>&1 > /dev/null
fi
-echo "Finished making module in $MOD_NAME"
+#echo "Finished making module in $MOD_NAME"
sleep 1
rm /tmp/$MOD_NAME.tmp
Copied: freeswitch/branches/seven/cmake_modules (from rev 14471, freeswitch/trunk/cmake_modules)
Deleted: freeswitch/branches/seven/cmake_modules/FindAPR.cmake
Copied: freeswitch/branches/seven/cmake_modules/FindAPR.cmake (from rev 14471, freeswitch/trunk/cmake_modules/FindAPR.cmake) (0 => 14472)
--- freeswitch/branches/seven/cmake_modules/FindAPR.cmake (rev 0)
+++ freeswitch/branches/seven/cmake_modules/FindAPR.cmake 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,51 @@
+# Locate APR include paths and libraries
+
+# This module defines
+# APR_INCLUDES, where to find apr.h, etc.
+# APR_LIBS, the libraries to link against to use APR.
+# APR_FLAGS, the flags to use to compile
+# APR_DEFINITIONS, definitions to use when compiling code that uses APR.
+# APR_FOUND, set to 'yes' if found
+
+find_program(APR_CONFIG_EXECUTABLE
+ apr-1-config
+ /usr/local/apr/1.2.12/bin
+ /usr/local/bin
+ /usr/bin
+ C:/Progra~1/apr/bin
+ )
+
+mark_as_advanced(APR_CONFIG_EXECUTABLE)
+
+macro(_apr_invoke _varname _regexp)
+ execute_process(
+ COMMAND ${APR_CONFIG_EXECUTABLE} ${ARGN}
+ OUTPUT_VARIABLE _apr_output
+ RESULT_VARIABLE _apr_failed
+ )
+
+ if(_apr_failed)
+ message(FATAL_ERROR "apr-1-config ${ARGN} failed")
+ else(_apr_failed)
+ string(REGEX REPLACE "[\r\n]" "" _apr_output "${_apr_output}")
+ string(REGEX REPLACE " +$" "" _apr_output "${_apr_output}")
+
+ if(NOT ${_regexp} STREQUAL "")
+ string(REGEX REPLACE "${_regexp}" " " _apr_output "${_apr_output}")
+ endif(NOT ${_regexp} STREQUAL "")
+
+ separate_arguments(_apr_output)
+ set(${_varname} "${_apr_output}")
+ endif(_apr_failed)
+endmacro(_apr_invoke)
+
+_apr_invoke(APR_INCLUDES "(^| )-I" --includes)
+_apr_invoke(APR_FLAGS --cppflags --cflags)
+_apr_invoke(APR_EXTRALIBS "(^| )-l" --libs)
+_apr_invoke(APR_LIBS "" --link-ld)
+
+if(APR_INCLUDES AND APR_EXTRALIBS AND APR_LIBS)
+ set(APR_FOUND "YES")
+ message (STATUS "apr found: YES ${APR_LIBS}")
+endif(APR_INCLUDES AND APR_EXTRALIBS AND APR_LIBS)
+
Deleted: freeswitch/branches/seven/cmake_modules/FindAPRUtil.cmake
Copied: freeswitch/branches/seven/cmake_modules/FindAPRUtil.cmake (from rev 14471, freeswitch/trunk/cmake_modules/FindAPRUtil.cmake) (0 => 14472)
--- freeswitch/branches/seven/cmake_modules/FindAPRUtil.cmake (rev 0)
+++ freeswitch/branches/seven/cmake_modules/FindAPRUtil.cmake 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,49 @@
+# Locate APR-Util include paths and libraries
+
+# This module defines
+# APRUTIL_INCLUDES, where to find apr.h, etc.
+# APRUTIL_LIBS, the libraries to link against to use APR.
+# APRUTIL_FOUND, set to yes if found
+
+find_program(APRUTIL_CONFIG_EXECUTABLE
+ apu-1-config
+ /usr/local/apr-util/1.2.12/bin
+ /usr/local/bin
+ /usr/bin
+ C:/Progra~1/apr/bin
+ )
+
+mark_as_advanced(APRUTIL_CONFIG_EXECUTABLE)
+
+macro(_apu_invoke _varname _regexp)
+ execute_process(
+ COMMAND ${APRUTIL_CONFIG_EXECUTABLE} ${ARGN}
+ OUTPUT_VARIABLE _apr_output
+ RESULT_VARIABLE _apr_failed
+ )
+
+ if(_apr_failed)
+ message(FATAL_ERROR "apu-1-config ${ARGN} failed")
+ else(_apr_failed)
+ string(REGEX REPLACE "[\r\n]" "" _apr_output "${_apr_output}")
+ string(REGEX REPLACE " +$" "" _apr_output "${_apr_output}")
+
+ if(NOT ${_regexp} STREQUAL "")
+ string(REGEX REPLACE "${_regexp}" " " _apr_output "${_apr_output}")
+ endif(NOT ${_regexp} STREQUAL "")
+
+ separate_arguments(_apr_output)
+
+ set(${_varname} "${_apr_output}")
+ endif(_apr_failed)
+endmacro(_apu_invoke)
+
+_apu_invoke(APRUTIL_INCLUDES "(^| )-I" --includes)
+_apu_invoke(APRUTIL_LIBS "" --link-ld)
+
+if(APRUTIL_LIBS AND APRUTIL_INCLUDES)
+ set(APRUTIL_FOUND "YES")
+ set(APRUTIL_DEFINITIONS "")
+ message (STATUS "apr-util found: YES ${APRUTIL_LIBS}")
+endif(APRUTIL_LIBS AND APRUTIL_INCLUDES)
+
Deleted: freeswitch/branches/seven/cmake_modules/FindLibedit.cmake
Copied: freeswitch/branches/seven/cmake_modules/FindLibedit.cmake (from rev 14471, freeswitch/trunk/cmake_modules/FindLibedit.cmake) (0 => 14472)
--- freeswitch/branches/seven/cmake_modules/FindLibedit.cmake (rev 0)
+++ freeswitch/branches/seven/cmake_modules/FindLibedit.cmake 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+
+find_path(PATH_INC_EDIT NAMES "histedit.h" PATHS ${CMAKE_SOURCE_DIR}/libs/libedit/src/)
+
+if( NOT PATH_INC_EDIT )
+ message(FATAL_ERROR"Unable to locate libedit include files" )
+endif( NOT PATH_INC_EDIT )
+
+find_library(PATH_LIB_EDIT NAMES "libedit.a" PATHS ${CMAKE_SOURCE_DIR}/libs/libedit/src/.libs/)
+
+if( NOT PATH_LIB_EDIT )
+ message(FATAL_ERROR "Unable to locate libedit library file" )
+endif( NOT PATH_LIB_EDIT )
+
+MESSAGE( STATUS "PATH_INC_EDIT = \"${PATH_INC_EDIT}\"" )
+MESSAGE( STATUS "PATH_LIB_EDIT = \"${PATH_LIB_EDIT}\"" )
Deleted: freeswitch/branches/seven/cmake_modules/FindSndfile.cmake
Copied: freeswitch/branches/seven/cmake_modules/FindSndfile.cmake (from rev 14471, freeswitch/trunk/cmake_modules/FindSndfile.cmake) (0 => 14472)
--- freeswitch/branches/seven/cmake_modules/FindSndfile.cmake (rev 0)
+++ freeswitch/branches/seven/cmake_modules/FindSndfile.cmake 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,34 @@
+# - Find sndfile
+# Find the native sndfile includes and libraries
+#
+# SNDFILE_INCLUDE_DIR - where to find sndfile.h, etc.
+# SNDFILE_LIBRARIES - List of libraries when using libsndfile.
+# SNDFILE_FOUND - True if libsndfile found.
+
+if(SNDFILE_INCLUDE_DIR)
+ # Already in cache, be silent
+ set(SNDFILE_FIND_QUIETLY TRUE)
+endif(SNDFILE_INCLUDE_DIR)
+
+FIND_PATH(SNDFILE_INCLUDE_DIR NAMES sndfile.h PATHS ${CMAKE_SOURCE_DIR}/libs/libsndfile/src/)
+
+FIND_LIBRARY(SNDFILE_LIBRARY NAMES libsndfile.a PATHS ${CMAKE_SOURCE_DIR}/libs/libsndfile/src/.libs/)
+
+MESSAGE( STATUS "SNDFILE_INCLUDE_DIR = \"${SNDFILE_INCLUDE_DIR}\"" )
+MESSAGE( STATUS "SNDFILE_LIBRARY = \"${SNDFILE_LIBRARY}\"" )
+
+# Handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if
+# all listed variables are TRUE.
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(SNDFILE DEFAULT_MSG
+ SNDFILE_INCLUDE_DIR SNDFILE_LIBRARY)
+
+if(SNDFILE_FOUND)
+ set(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
+else(SNDFILE_FOUND)
+ set(SNDFILE_LIBRARIES)
+endif(SNDFILE_FOUND)
+
+mark_as_advanced(SNDFILE_INCLUDE_DIR SNDFILE_LIBRARY)
+MESSAGE( STATUS "SNDFILE_INCLUDE_DIR = \"${SNDFILE_INCLUDE_DIR}\"" )
+MESSAGE( STATUS "SNDFILE_LIBRARY = \"${SNDFILE_LIBRARY}\"" )
Modified: freeswitch/branches/seven/conf/autoload_configs/acl.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/acl.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/acl.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,26 +1,19 @@
<configuration name="acl.conf" description="Network Lists">
<network-lists>
+ <!--
+ These ACL's are automatically created on startup.
- <list name="dl-candidates" default="allow">
- <node type="deny" cidr="10.0.0.0/8"/>
- <node type="deny" cidr="172.16.0.0/12"/>
- <node type="deny" cidr="192.168.0.0/16"/>
- </list>
+ rfc1918.auto - RFC1918 Space
+ nat.auto - RFC1918 Excluding your local lan.
+ localnet.auto - ACL for your local lan.
+ loopback.auto - ACL for your local lan.
+ -->
- <list name="rfc1918" default="deny">
- <node type="allow" cidr="10.0.0.0/8"/>
- <node type="allow" cidr="172.16.0.0/12"/>
- <node type="allow" cidr="192.168.0.0/16"/>
- </list>
-
<list name="lan" default="allow">
<node type="deny" cidr="192.168.42.0/24"/>
<node type="allow" cidr="192.168.42.42/32"/>
</list>
- <list name="strict" default="deny">
- <node type="allow" cidr="208.102.123.124/32"/>
- </list>
<!--
This will traverse the directory adding all users
with the cidr= tag to this ACL, when this ACL matches
Copied: freeswitch/branches/seven/conf/autoload_configs/cidlookup.conf.xml (from rev 14471, freeswitch/trunk/conf/autoload_configs/cidlookup.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/cidlookup.conf.xml (rev 0)
+++ freeswitch/branches/seven/conf/autoload_configs/cidlookup.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,29 @@
+<configuration name="cidlookup.conf" description="cidlookup Configuration">
+ <settings>
+ <!-- comment out url to not setup a url based lookup -->
+ <param name="url" value="http://query.voipcnam.com/query.php?api_key=MYAPIKEY&number=${caller_id_number}"/>
+
+ <!-- set to false to not cache (in memcache) results from the url query -->
+ <param name="cache" value="true"/>
+ <!-- expire is in seconds -->
+ <param name="cache-expire" value="86400"/>
+
+ <param name="odbc-dsn" value="phone:phone:phone"/>
+
+ <!-- comment out sql to not setup a database (directory) lookup -->
+ <param name="sql" value="
+ SELECT name||' ('||type||')' AS name
+ FROM phonebook p JOIN numbers n ON p.id = n.phonebook_id
+ WHERE n.number='${caller_id_number}'
+ LIMIT 1
+ "/>
+ <!-- comment out citystate-sql to not setup a database (city/state)
+ lookup -->
+ <param name="citystate-sql" value="
+ SELECT ratecenter||' '||state as name
+ FROM npa_nxx_company_ocn
+ WHERE npa = ${caller_id_number:1:3} AND nxx = ${caller_id_number:4:3}
+ LIMIT 1
+ "/>
+ </settings>
+</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/conference.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/conference.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/conference.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -7,7 +7,7 @@
</advertise>
<!-- These are the default keys that map when you do not specify a caller control group -->
- <!-- Note: none and default are reserved names for group names -->
+ <!-- Note: none and default are reserved names for group names. Disabled if dist-dtmf member flag is set. -->
<caller-controls>
<group name="default">
<control action="mute" digits="0"/>
@@ -38,8 +38,9 @@
<!-- Energy level required for audio to be sent to the other users -->
<param name="energy-level" value="300"/>
- <!--Can be | delim of waste|mute|deaf waste will always transmit data to each channel
- even during silence -->
+ <!--Can be | delim of waste|mute|deaf|dist-dtmf waste will always transmit data to each channel
+ even during silence. dist-dtmf propagates dtmfs to all other members, but channel controls
+ via dtmf will be disabled. -->
<!--<param name="member-flags" value="waste"/>-->
<!-- Name of the caller control group to use for this profile -->
@@ -83,7 +84,6 @@
<param name="pin-sound" value="conference/conf-pin.wav"/>
<!-- File to play to when the pin is invalid -->
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
- <param name="comfort-noise-level" value="1400"/>
<!-- Conference pin -->
<!--<param name="pin" value="12345"/>-->
<!-- Default Caller ID Name for outbound calls -->
@@ -174,5 +174,15 @@
<param name="comfort-noise" value="true"/>
</profile>
+ <profile name="sla">
+ <param name="domain" value="$${domain}"/>
+ <param name="rate" value="16000"/>
+ <param name="interval" value="20"/>
+ <param name="caller-controls" value="none"/>
+ <param name="energy-level" value="200"/>
+ <param name="moh-sound" value="silence"/>
+ <param name="comfort-noise" value="true"/>
+ </profile>
+
</profiles>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/event_multicast.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/event_multicast.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/event_multicast.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -3,6 +3,11 @@
<param name="address" value="225.1.1.1"/>
<param name="port" value="4242"/>
<param name="bindings" value="all"/>
+ <param name="ttl" value="1"/>
+ <!-- Uncomment this to enable pre-shared key encryption on the packets. -->
+ <!-- For this option to work, you'll need to have the openssl development -->
+ <!-- headers installed when you ran ./configure -->
+ <!-- <param name="psk" value="ClueCon"/> -->
</settings>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/event_socket.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/event_socket.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/event_socket.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,5 +1,6 @@
<configuration name="event_socket.conf" description="Socket Client">
<settings>
+ <param name="nat-map" value="false"/>
<param name="listen-ip" value="127.0.0.1"/>
<param name="listen-port" value="8021"/>
<param name="password" value="ClueCon"/>
Modified: freeswitch/branches/seven/conf/autoload_configs/fifo.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/fifo.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/fifo.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<configuration name="fifo.conf" description="FIFO Configuration">
<fifos>
<fifo name="cool_fifo@$${domain}" importance="0">
- <!--<member timeout="60" simo="1" lag="20">user/1005@$${domain}</member>-->
+ <!--<member timeout="60" simo="1" lag="20">{member_wait=nowait}user/1005@$${domain}</member>-->
</fifo>
</fifos>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/iax.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/iax.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/iax.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -8,5 +8,7 @@
<param name="codec-prefs" value="PCMU@20i,PCMA,speex,L16"/>
<param name="codec-master" value="us"/>
<param name="codec-rates" value="8"/>
+ <!-- seconds till we give up when there is no media -->
+ <param name="media-timeout" value="300"/>
</settings>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/ivr.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/ivr.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/ivr.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -3,11 +3,11 @@
<!-- demo IVR setup -->
<!-- demo IVR, Main Menu -->
<menu name="demo_ivr"
- greet-long="phrase:demo_ivr_main_menu"
- greet-short="phrase:demo_ivr_main_menu_short"
- invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
- exit-sound="voicemail/vm-goodbye.wav"
- timeout ="10000"
+ greet-long="phrase:demo_ivr_main_menu"
+ greet-short="phrase:demo_ivr_main_menu_short"
+ invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
+ exit-sound="voicemail/vm-goodbye.wav"
+ timeout="10000"
inter-digit-timeout="2000"
max-failures="3"
max-timeouts="3"
@@ -15,8 +15,9 @@
<entry action="menu-exec-app" digits="1" param="bridge sofia/$${domain}/888@conference.freeswitch.org"/>
<entry action="menu-exec-app" digits="2" param="transfer 9996 XML default"/> <!-- FS echo -->
<entry action="menu-exec-app" digits="3" param="transfer 9999 XML default"/> <!-- MOH -->
- <entry action="menu-sub" digits="4" param="demo_ivr_submenu"/> <!-- demo sub menu -->
- <entry action="menu-exec-app" digits="5" param="transfer 1234*256 enum"/> <!-- Screaming monkeys -->
+ <entry action="menu-exec-app" digits="4" param="transfer 9991 XML default"/> <!-- ClueCon -->
+ <entry action="menu-exec-app" digits="5" param="transfer 1234*256 enum"/> <!-- Screaming monkeys -->
+ <entry action="menu-sub" digits="6" param="demo_ivr_submenu"/> <!-- demo sub menu -->
<entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML features"/>
<entry action="menu-top" digits="9"/> <!-- Repeat this menu -->
</menu>
@@ -49,10 +50,7 @@
max-failures="3">
<entry action="menu-exit" digits="*"/>
<entry action="menu-playback" digits="1" param="say:You pressed 1"/>
- <entry action="menu-call-transfer" digits="2" param=
-
-
-"1000"/>
+ <entry action="menu-call-transfer" digits="2" param="1000"/>
<entry action="menu-call-transfer" digits="3" param="1001"/>
</menu>
-->
Modified: freeswitch/branches/seven/conf/autoload_configs/lcr.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/lcr.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/lcr.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -16,5 +16,47 @@
<param name="id" value="2"/>
<param name="order_by" value="reliability,quality"/>
</profile>
+<!--
+ Some samples of how to do custom SQL:
+
+ =============================================================
+ PostgreSQL with contrib prefix module which supports fast
+ prefix queries. Ideal option.
+ =============================================================
+ <profile name="pg_prefix">
+ <param name="custom_sql" value="
+SELECT l.digits, c.carrier_name, l.rate, cg.prefix AS gw_prefix, cg.suffix AS gw_suffix, l.lead_strip, l.trail_strip, l.prefix, l.suffix
+FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1' AND digits_prefix @> '%q'
+AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ORDER BY digits DESC, random();
+ "/>
+ </profile>
+
+ =============================================================
+ PostgreSQL with contrib prefix module which supports fast
+ prefix queries. Ideal option. Alternate syntax which requies
+ a session but allows variable substitution.
+ =============================================================
+ <profile name="pg_prefix2">
+ <param name="custom_sql" value="
+SELECT l.digits, c.carrier_name, l.rate, cg.prefix AS gw_prefix, cg.suffix AS gw_suffix, l.lead_strip, l.trail_strip, l.prefix, l.suffix
+FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1' AND digits_prefix @> '${lcr_query_digits}'
+AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ORDER BY digits DESC, random();
+ "/>
+ </profile>
+
+ =============================================================
+ Demonstrates use of computed inlist.
+ =============================================================
+ <profile name="inlist">
+ <param name="custom_sql" value="
+SELECT l.digits, c.carrier_name, l.rate, cg.prefix AS gw_prefix, cg.suffix AS gw_suffix, l.lead_strip, l.trail_strip, l.prefix, l.suffix
+FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1' AND digits IN (${lcr_query_expanded_digits})
+AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ORDER BY digits DESC, random();
+ "/>
+ </profile>
+-->
</profiles>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/local_stream.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/local_stream.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/local_stream.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,4 +1,13 @@
<configuration name="local_stream.conf" description="stream files from local dir">
+ <!-- fallback to default if requested moh class isn't found -->
+ <directory name="default" path="$${base_dir}/sounds/music/8000">
+ <param name="rate" value="8000"/>
+ <param name="shuffle" value="true"/>
+ <param name="channels" value="1"/>
+ <param name="interval" value="20"/>
+ <param name="timer-name" value="soft"/>
+ </directory>
+
<directory name="moh/8000" path="$${base_dir}/sounds/music/8000">
<param name="rate" value="8000"/>
<param name="shuffle" value="true"/>
Modified: freeswitch/branches/seven/conf/autoload_configs/logfile.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/logfile.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/logfile.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -9,7 +9,7 @@
<!-- File to log to -->
<!--<param name="logfile" value="/var/log/freeswitch.log"/>-->
<!-- At this length in bytes rotate the log file (0 for never) -->
- <!--<param name="rollover" value="10485760"/>-->
+ <param name="rollover" value="10485760"/>
</settings>
<mappings>
<!--
Copied: freeswitch/branches/seven/conf/autoload_configs/memcache.conf.xml (from rev 14471, freeswitch/trunk/conf/autoload_configs/memcache.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/memcache.conf.xml (rev 0)
+++ freeswitch/branches/seven/conf/autoload_configs/memcache.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+<configuration name="memcache.conf" description="memcache Configuration">
+ <settings>
+ <!-- comma sep list of servers: eg: localhost,otherhost:port,anotherone -->
+ <param name="memcache-servers" value="localhost"/>
+ </settings>
+</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/modules.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/modules.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/modules.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -49,6 +49,8 @@
<load module="mod_limit"/>
<load module="mod_esf"/>
<load module="mod_fsv"/>
+ <load module="mod_cluechoo"/>
+ <!--<load module="mod_spy"/>-->
<!-- SNOM Module -->
<!--<load module="mod_snom"/>-->
@@ -66,7 +68,7 @@
<load module="mod_ilbc"/>
<load module="mod_speex"/>
<load module="mod_h26x"/>
- <!--<load module="mod_siren"/>-->
+ <load module="mod_siren"/>
<!--<load module="mod_celt"/>-->
<!-- File Format Interfaces -->
@@ -77,6 +79,7 @@
<!--For local streams (play all the files in a directory)-->
<load module="mod_local_stream"/>
<load module="mod_tone_stream"/>
+ <load module="mod_file_string"/>
<!-- Timers -->
@@ -91,11 +94,15 @@
<!-- <load module="mod_flite"/> -->
<!-- <load module="mod_pocketsphinx"/> -->
<!-- <load module="mod_cepstral"/> -->
- <!-- <load module="mod_openmrcp"/> -->
<!-- <load module="mod_rss"/> -->
<!-- Say -->
<load module="mod_say_en"/>
+ <load module="mod_say_ru"/>
<!-- <load module="mod_say_zh"/> -->
+
+ <!-- Third party modules -->
+ <!--<load module="mod_nibblebill"/>-->
+
</modules>
</configuration>
Copied: freeswitch/branches/seven/conf/autoload_configs/nibblebill.conf.xml (from rev 14471, freeswitch/trunk/conf/autoload_configs/nibblebill.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/nibblebill.conf.xml (rev 0)
+++ freeswitch/branches/seven/conf/autoload_configs/nibblebill.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+<configuration name="nibblebill.conf" description="Nibble Billing">
+ <settings>
+ <!-- See http://wiki.freeswitch.org/index.php?title=Mod_nibblebill for help with these options -->
+
+ <!-- Information for connecting to your database -->
+ <param name="db_username" value="bandwidth.com"/>
+ <param name="db_password" value="password"/>
+ <param name="db_dsn" value="bandwidth.com"/>
+
+ <!-- The database table where your CASH column is located -->
+ <param name="db_table" value="accounts"/>
+
+ <!-- The column name where we store the value of the account -->
+ <param name="db_column_cash" value="cash"/>
+
+ <!-- The column name for the unique ID identifying the account -->
+ <param name="db_column_account" value="id"/>
+
+
+ <!-- Default heartbeat interval. Set to 'off' for no heartbeat (i.e. bill only at end of call) -->
+ <param name="global_heartbeat" value="60"/>
+
+ <!-- By default, warn a caller when their balance is at $5.00. You can set this to a negative number. -->
+ <param name="lowbal_amt" value="5"/>
+ <param name="lowbal_action" value="play ding"/>
+
+ <!-- By default, terminate a caller when their balance hits $0.00. You can set this to a negative number. -->
+ <param name="nobal_amt" value="0"/>
+ <param name="nobal_action" value="hangup"/>
+
+ <!-- If a call goes beyond a certain dollar amount, flag or terminate it -->
+ <param name="percall_max_amt" value="100"/>
+ <param name="percall_action" value="hangup"/>
+
+ </settings>
+</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/opal.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/opal.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/opal.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -4,6 +4,9 @@
<param name="context" value="default"/>
<param name="dialplan" value="XML"/>
<param name="codec-prefs" value="PCMU"/>
+ <param name="gk-address" value=""/> <!-- empty to disable, "*" to search LAN -->
+ <param name="gk-identifer" value=""/> <!-- optional name of gk -->
+ <param name="gk-interface" value=""/> <!-- optional listener interface name -->
</settings>
<listeners>
<listener name="default">
Modified: freeswitch/branches/seven/conf/autoload_configs/pocketsphinx.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/pocketsphinx.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/pocketsphinx.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -4,7 +4,9 @@
<param name="silence-hits" value="25"/>
<param name="listen-hits" value="1"/>
<param name="auto-reload" value="true"/>
+ <!--<param name="language-weight" value="1"/>-->
<!--<param name="narrowband-model" value="communicator"/>-->
<!--<param name="wideband-model" value="wsj1"/>-->
+ <!--<param name="dictionary" value="default.dic"/>-->
</settings>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/portaudio.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/portaudio.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/portaudio.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -15,6 +15,8 @@
<!--<param name="ring-file" value="/sounds/ring.wav"/>-->
<!--Number of seconds to pause between rings -->
<!--<param name="ring-interval" value="5"/>-->
+ <!--Enable or Disable dual_streams-->
+ <!--<param name="dual-streams" value="true"/>-->
<!--file to play when calls are on hold-->
<param name="hold-file" value="$${hold_music}"/>
Modified: freeswitch/branches/seven/conf/autoload_configs/python.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/python.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/python.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -4,13 +4,13 @@
<!--<param name="xml-handler-bindings" value="dialplan"/>-->
<!--
- The following options identifies a py script that is launched
+ The following options identifies a py module that is launched
at startup and may live forever in the background.
You can define multiple lines, one for each script you
need to run.
-->
- <!--<param name="startup-script" value="startup_script_1.py"/>-->
- <!--<param name="startup-script" value="startup_script_2.py"/>-->
+ <!--<param name="startup-script" value="startup_script_1"/>-->
+ <!--<param name="startup-script" value="startup_script_2"/>-->
</settings>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/switch.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/switch.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/switch.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -10,8 +10,8 @@
<key name="7" value="console loglevel 0"/>
<key name="8" value="console loglevel 7"/>
<key name="9" value="sofia status profile internal"/>
- <key name="10" value="fsctl pause"/>
- <key name="11" value="fsctl resume"/>
+ <key name="10" value="sofia profile internal siptrace on"/>
+ <key name="11" value="sofia profile internal siptrace off"/>
<key name="12" value="version"/>
</cli-keybindings>
@@ -60,6 +60,7 @@
<!--RTP port range -->
<!--<param name="rtp-start-port" value="16384"/>-->
<!--<param name="rtp-end-port" value="32768"/>-->
+ <param name="rtp-enable-zrtp" value="true"/>
</settings>
</configuration>
Copied: freeswitch/branches/seven/conf/autoload_configs/unimrcp.conf.xml (from rev 14471, freeswitch/trunk/conf/autoload_configs/unimrcp.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/unimrcp.conf.xml (rev 0)
+++ freeswitch/branches/seven/conf/autoload_configs/unimrcp.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+<configuration name="unimrcp.conf" description="UniMRCP Client">
+ <settings>
+ <!-- UniMRCP profile to use for TTS -->
+ <param name="default-tts-profile" value="voxeo-prophecy8.0-mrcp1"/>
+ <!-- UniMRCP profile to use for ASR -->
+ <param name="default-asr-profile" value="voxeo-prophecy8.0-mrcp1"/>
+ <!-- UniMRCP logging level to appear in freeswitch.log. Options are:
+ EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
+ <param name="log-level" value="DEBUG"/>
+
+ <param name="max-connection-count" value="100"/>
+ <param name="offer-new-connection" value="1"/>
+ </settings>
+
+ <profiles>
+ <X-PRE-PROCESS cmd="include" data="../mrcp_profiles/*.xml"/>
+ </profiles>
+
+</configuration>
+
Modified: freeswitch/branches/seven/conf/autoload_configs/voicemail.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/voicemail.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/voicemail.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -9,11 +9,13 @@
<param name="digit-timeout" value="10000"/>
<param name="min-record-len" value="3"/>
<param name="max-record-len" value="300"/>
+ <param name="max-retries" value="3"/>
<param name="tone-spec" value="%(1000, 0, 640)"/>
<param name="callback-dialplan" value="XML"/>
<param name="callback-context" value="default"/>
<param name="play-new-messages-key" value="1"/>
<param name="play-saved-messages-key" value="2"/>
+ <param name="login-keys" value="0"/>
<param name="main-menu-key" value="0"/>
<param name="config-menu-key" value="5"/>
<param name="record-greeting-key" value="1"/>
@@ -31,6 +33,9 @@
<param name="ff-key" value="6"/>
<param name="rew-key" value="4"/>
<param name="skip-greet-key" value="#"/>
+ <!--<param name="previous-message-key" value=""/>-->
+ <!--<param name="next-message-key" value=""/>-->
+ <!--<param name="skip-info-key" value=""/>-->
<param name="record-silence-threshold" value="200"/>
<param name="record-silence-hits" value="2"/>
<param name="web-template-file" value="web-vm.tpl"/>
Modified: freeswitch/branches/seven/conf/autoload_configs/xml_cdr.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/xml_cdr.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/xml_cdr.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -34,9 +34,32 @@
<!-- either an absolute path, a relative path assuming ${prefix}/logs or a blank or omitted value will default to ${prefix}/logs/xml_cdr -->
<!-- <param name="err-log-dir" value="/tmp"/> -->
- <!-- optional: if enabled this will disable CA root certificate checks by libcurl -->
- <!-- note: default value is disabled. only enable if you want this! -->
- <!-- <param name="ignore-cacert-check" value="true" /> -->
+ <!-- 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: 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"/> -->
</settings>
</configuration>
Modified: freeswitch/branches/seven/conf/autoload_configs/xml_curl.conf.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/autoload_configs/xml_curl.conf.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/autoload_configs/xml_curl.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -11,9 +11,34 @@
<!-- set to true to disable Expect: 100-continue lighttpd requires this setting -->
<!--<param name="disable-100-continue" value="true"/>-->
- <!-- optional: if enabled this will disable CA root certificate checks by libcurl -->
- <!-- note: default value is disabled. only enable if you want this! -->
- <!-- <param name="ignore-cacert-check" value="true" /> -->
+ <!-- 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: 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"/>-->
</binding>
Modified: freeswitch/branches/seven/conf/dialplan/default.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/dialplan/default.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/dialplan/default.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!--
NOTICE:
@@ -8,46 +9,36 @@
they can access. You can also add a user in the directory with the cidr= attribute acl.conf.xml
will build the domains acl using this value.
-->
-
-<?xml version="1.0" encoding="utf-8"?>
<!-- http://wiki.freeswitch.org/wiki/Dialplan_XML -->
<include>
<context name="default">
<extension name="unloop">
- <condition field="$${unroll_loops}" expression="^true$"/>
+ <condition field="${unroll_loops}" expression="^true$"/>
<condition field="${sip_looped_call}" expression="^true$">
<action application="deflect" data="${destination_number}"/>
</condition>
</extension>
-
- <!--
- Try to get the domain from the sip_auth_realm otherwise it will
- default domain in vars.xml for cases it can't figure it out.
+ <!-- Example of doing things based on time of day.
+
+ year = 4 digit year. Example year="2009"
+ yday = 1-365
+ mon = 1-12
+ mday = 1-31
+ week = 1-52
+ wday = 1-7
+ hour = 0-23
+ minute = 0-59
+ minute-of-day = 1-1440
+
+ Example:
+ <condition minute-of-day="540-1080"> (9am to 6pm EVERY day)
+ do something ...
+ </condition>
-->
- <extension name="set_domain" continue="true">
- <condition field="${domain_name}" expression="^$"/>
- <condition field="source" expression="mod_sofia"/>
- <condition field="${sip_auth_realm}" expression="^$">
- <action application="set" data="domain_name=$${domain}"/>
- <anti-action application="set" data="domain_name=${sip_auth_realm}"/>
- </condition>
- </extension>
-
- <!-- Set the domain -->
- <extension name="set_domain_openzap" continue="true">
- <condition field="${domain_name}" expression="^$"/>
- <condition field="source" expression="mod_openzap">
- <action application="set" data="domain_name=$${domain}"/>
- </condition>
- </extension>
-
- <!-- Example of doing things based on time of day. -->
<extension name="tod_example" continue="true">
- <!-- man strftime - M-F, 9AM to 6PM -->
- <condition field="${strftime(%w)}" expression="^([1-5])$"/>
- <condition field="${strftime(%H%M)}" expression="^((09|1[0-7])[0-5][0-9]|1800)$">
+ <condition wday="2-6" hour="9-18">
<action application="set" data="open=true"/>
</condition>
</extension>
@@ -55,7 +46,7 @@
<extension name="global-intercept">
<condition field="destination_number" expression="^886$">
<action application="answer"/>
- <action application="intercept" data="${db(select/${domain_name}-last_dial/global)}"/>
+ <action application="intercept" data="${hash(select/${domain_name}-last_dial/global)}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
@@ -63,7 +54,7 @@
<extension name="group-intercept">
<condition field="destination_number" expression="^\*8$">
<action application="answer"/>
- <action application="intercept" data="${db(select/${domain_name}-last_dial/${callgroup})}"/>
+ <action application="intercept" data="${hash(select/${domain_name}-last_dial/${callgroup})}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
@@ -71,26 +62,18 @@
<extension name="intercept-ext">
<condition field="destination_number" expression="^\*\*(\d+)$">
<action application="answer"/>
- <action application="intercept" data="${db(select/${domain_name}-last_dial_ext/$1)}"/>
+ <action application="intercept" data="${hash(select/${domain_name}-last_dial_ext/$1)}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
<extension name="redial">
<condition field="destination_number" expression="^870$">
- <action application="transfer" data="${db(select/${domain_name}-last_dial/${caller_id_number})}"/>
+ <action application="transfer" data="${hash(select/${domain_name}-last_dial/${caller_id_number})}"/>
</condition>
</extension>
<extension name="global" continue="true">
- <condition field="${network_addr}" expression="^$" break="never">
- <action application="set" data="use_profile=${cond(${acl($${local_ip_v4} rfc1918)} == true ? nat : default)}"/>
- <anti-action application="set" data="use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)}"/>
- </condition>
- <!-- This will setup some variables if the user isn't authenticated. -->
- <condition field="${numbering_plan}" expression="^$" break="never">
- <action application="set_user" data="default@${domain_name}"/>
- </condition>
<condition field="${call_debug}" expression="^true$" break="never">
<action application="info"/>
</condition>
@@ -108,10 +91,11 @@
<!-- Offer SRTP on outbound legs if we have it on inbound. -->
<!-- <action application="export" data="sip_secure_media=true"/> -->
</condition>
+
<condition>
- <action application="db" data="insert/${domain_name}-spymap/${caller_id_number}/${uuid}"/>
- <action application="db" data="insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}"/>
- <action application="db" data="insert/${domain_name}-last_dial/global/${uuid}"/>
+ <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}"/>
</condition>
</extension>
@@ -147,7 +131,7 @@
<extension name="eavesdrop">
<condition field="destination_number" expression="^88(.*)$|^\*0(.*)$">
<action application="answer"/>
- <action application="eavesdrop" data="${db(select/${domain_name}-spymap/$1)}"/>
+ <action application="eavesdrop" data="${hash(select/${domain_name}-spymap/$1)}"/>
</condition>
</extension>
@@ -163,7 +147,7 @@
<extension name="call_return">
<condition field="destination_number" expression="^\*69$|^869$|^lcr$">
- <action application="transfer" data="${db(select/${domain_name}-call_return/${caller_id_number})}"/>
+ <action application="transfer" data="${hash(select/${domain_name}-call_return/${caller_id_number})}"/>
</condition>
</extension>
@@ -205,42 +189,34 @@
</extension>
<!--
- if the calling party is the called party, go to their VM
- if the calling party is NOT the called party dial the extension
- (1000-1019) for 30 seconds and go to voicemail if the
- call fails (continue_on_fail=true), otherwise hang up after a
- successful bridge (hangup_after-bridge=true)
+ dial the extension (1000-1019) for 30 seconds and go to voicemail if the
+ call fails (continue_on_fail=true), otherwise hang up after a successful
+ bridge (hangup_after-bridge=true)
-->
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
- </condition>
- <condition field="destination_number" expression="^${caller_id_number}$">
- <action application="set" data="voicemail_authorized=${sip_authorized}"/>
+ <!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
+ <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
+ <action application="bind_meta_app" data="2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
+ <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
+ <action application="set" data="ringback=${us-ring}"/>
+ <action application="set" data="transfer_ringback=$${hold_music}"/>
+ <action application="set" data="call_timeout=30"/>
+ <!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
+ <action application="set" data="hangup_after_bridge=true"/>
+ <!--<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> -->
+ <action application="set" data="continue_on_fail=true"/>
+ <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
+ <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
+ <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
+ <!--<action application="export" data="nolocal:sip_secure_media=${user_data(${dialed_extension}@${domain_name} var sip_secure_media)}"/>-->
+ <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
+ <action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
<action application="answer"/>
<action application="sleep" data="1000"/>
- <action application="voicemail" data="check default ${domain_name} ${dialed_extension}"/>
- <!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
- <anti-action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
- <anti-action application="bind_meta_app" data="2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
- <anti-action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
- <anti-action application="set" data="ringback=${us-ring}"/>
- <anti-action application="set" data="transfer_ringback=$${hold_music}"/>
- <anti-action application="set" data="call_timeout=30"/>
- <!-- <anti-action application="set" data="sip_exclude_contact=${network_addr}"/> -->
- <anti-action application="set" data="hangup_after_bridge=true"/>
- <!--<anti-action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> -->
- <anti-action application="set" data="continue_on_fail=true"/>
- <anti-action application="db" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
- <anti-action application="db" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
- <anti-action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
- <!--<anti-action application="export" data="nolocal:sip_secure_media=${user_data(${dialed_extension}@${domain_name} var sip_secure_media)}"/>-->
- <anti-action application="db" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
- <anti-action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
- <anti-action application="answer"/>
- <anti-action application="sleep" data="1000"/>
- <anti-action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
+ <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
</condition>
</extension>
@@ -264,7 +240,7 @@
<!-- voicemail operator extension -->
<extension name="operator">
- <condition field="destination_number" expression="^operator$|^0$">
+ <condition field="destination_number" expression="^(operator|0)$">
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="transfer" data="1000 XML features"/>
</condition>
@@ -272,7 +248,7 @@
<!-- voicemail main extension -->
<extension name="vmain">
- <condition field="destination_number" expression="^vmain|4000$">
+ <condition field="destination_number" expression="^vmain$|^4000$|^\*98$">
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="voicemail" data="check default ${domain_name}"/>
@@ -321,6 +297,14 @@
<extension name="freeswitch_public_conf_via_sip">
<condition field="destination_number" expression="^9(888|1616|3232)$">
<action application="export" data="hold_music=silence"/>
+ <!--
+ This will take the SAS from the b-leg and send it to the display on the a-leg phone.
+ Known working with Polycom and Snom maybe others.
+ -->
+ <!--
+ <action application="set" data="exec_after_bridge_app=${sched_api(+4 zrtp expand uuid_display ${uuid} \${uuid_getvar(\${uuid_getvar(${uuid} signal_bond)} zrtp_sas1_string )} \${uuid_getvar(\${uuid_getvar(${uuid} signal_bond)} zrtp_sas2_string )} )}"/>
+ <action application="export" data="nolocal:zrtp_secure_media=true"/>
+ -->
<action application="bridge" data="sofia/${use_profile}/$1@conference.freeswitch.org"/>
</condition>
</extension>
@@ -386,14 +370,14 @@
</extension>
<!-- Create a conference on the fly and pull someone in at the same time. -->
- <extension name="dyanmic conference">
+ <extension name="dynamic_conference">
<condition field="destination_number" expression="^5001$">
<action application="conference" data="bridge:mydynaconf:sofia/${use_profile}/1234@conference.freeswitch.org"/>
</condition>
</extension>
<extension name="rtp_multicast_page">
- <condition field="destination_number" expression="^pagegroup$|^7243">
+ <condition field="destination_number" expression="^pagegroup$|^7243$">
<action application="answer"/>
<action application="esf_page_group"/>
</condition>
@@ -560,6 +544,13 @@
</condition>
</extension>
+ <extension name="ClueCon">
+ <condition field="destination_number" expression="^9991$">
+ <action application="set" data="effective_caller_id_name=ClueCon"/>
+ <action application="bridge" data="sofia/$${domain}/brian@bkw.org"/>
+ </condition>
+ </extension>
+
<extension name="show_info">
<condition field="destination_number" expression="^9992$">
<action application="answer"/>
@@ -611,6 +602,14 @@
</condition>
</extension>
+ <!-- install zrtp_agent.lua into scripts (ZRTP == 9787) -->
+ <extension name="zrtp_enrollement">
+ <condition field="destination_number" expression="^9787$">
+ <action application="answer"/>
+ <action application="lua" data="zrtp_agent.lua"/>
+ </condition>
+ </extension>
+
<!--
You will no longer hear the bong tone. The wav file is playing stating the call is secure.
The file will not play unless you have both TLS and SRTP active.
@@ -622,7 +621,10 @@
<action application="answer"/>
<action application="execute_extension" data="is_secure XML features"/>
<action application="playback" data="$${hold_music}"/>
+ <anti-action application="set" data="zrtp_secure_media=true"/>
<anti-action application="answer"/>
+ <anti-action application="playback" data="silence_stream://2000"/>
+ <anti-action application="execute_extension" data="is_zrtp_secure XML features"/>
<anti-action application="playback" data="$${hold_music}"/>
</condition>
</extension>
@@ -642,9 +644,6 @@
-->
<!--
- This is an example of how to override the RURI on an outgoing invite to a registered contact.
- -->
- <!--
<extension name="refer">
<condition field="${sip_refer_to}">
<expression><![CDATA[<sip:${destination_number}@${domain_name}>]]></expression>
@@ -657,7 +656,11 @@
<action application="bridge" data="sofia/${use_profile}/${refer_user}@${refer_domain}"/>
</condition>
</extension>
-
+ -->
+ <!--
+ This is an example of how to override the RURI on an outgoing invite to a registered contact.
+ -->
+ <!--
<extension name="ruri">
<condition field="destination_number" expression="^ruri$">
<action application="bridge" data="sofia/${ruri_profile}/${ruri_user}${regex(${sofia_contact(${ruri_contact})}|^[^\@]+(.*)|%1)}"/>
Modified: freeswitch/branches/seven/conf/dialplan/features.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/dialplan/features.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/dialplan/features.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -37,7 +37,15 @@
</condition>
</extension>
- <extension name="is_secure">
+ <extension name="is_zrtp_secure" continue="true">
+ <condition field="${zrtp_secure_media_confirmed}" expression="^true$">
+ <action application="sleep" data="1000"/>
+ <action application="playback" data="misc/call_secured.wav"/>
+ <anti-action application="eval" data="not_secure"/>
+ </condition>
+ </extension>
+
+ <extension name="is_secure" continue="true">
<!-- Only Truly consider it secure if its TLS and SRTP -->
<condition field="${sip_via_protocol}" expression="tls"/>
<condition field="${sip_secure_media_confirmed}" expression="^true$">
Modified: freeswitch/branches/seven/conf/dialplan/public.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/dialplan/public.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/dialplan/public.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -14,7 +14,7 @@
<context name="public">
<extension name="unloop">
- <condition field="$${unroll_loops}" expression="^true$"/>
+ <condition field="${unroll_loops}" expression="^true$"/>
<condition field="${sip_looped_call}" expression="^true$">
<action application="deflect" data="${destination_number}"/>
</condition>
@@ -36,17 +36,6 @@
</condition>
</extension>
- <!-- Try to get domain_name from the sip_req_params variable -->
- <extension name="set_domain" continue="true">
- <condition field="${domain_name}" expression="^$"/>
- <condition field="source" expression="mod_sofia"/>
- <condition field="${sip_req_params}" expression="domain_name=([A-Z-a-z0-9.]+)">
- <!-- We need to export this so the B-Leg will have it after transfer too. -->
- <action application="export" data="domain_name=$1"/>
- <anti-action application="export" data="domain_name=${sip_req_host}"/>
- </condition>
- </extension>
-
<extension name="public_extensions">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="transfer" data="$1 XML default"/>
Modified: freeswitch/branches/seven/conf/directory/default/1000.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1000.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1000.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1000" mailbox="1000">
+ <user id="1000">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1000"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1001.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1001.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1001.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1001" mailbox="1001">
+ <user id="1001">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1001"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1002.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1002.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1002.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1002" mailbox="1002">
+ <user id="1002">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1002"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1003.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1003.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1003.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1003" mailbox="1003">
+ <user id="1003">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1003"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1004.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1004.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1004.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1004" mailbox="1004">
+ <user id="1004">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1004"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1005.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1005.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1005.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1005" mailbox="1005">
+ <user id="1005">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1005"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1006.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1006.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1006.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1006" mailbox="1006">
+ <user id="1006">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1006"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1007.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1007.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1007.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1007" mailbox="1007">
+ <user id="1007">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1007"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1008.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1008.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1008.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1008" mailbox="1008">
+ <user id="1008">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1008"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1009.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1009.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1009.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1009" mailbox="1009">
+ <user id="1009">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1009"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1010.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1010.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1010.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1010" mailbox="1010">
+ <user id="1010">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1010"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1011.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1011.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1011.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1011" mailbox="1011">
+ <user id="1011">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1011"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1012.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1012.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1012.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1012" mailbox="1012">
+ <user id="1012">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1012"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1013.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1013.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1013.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1013" mailbox="1013">
+ <user id="1013">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1013"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1014.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1014.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1014.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1014" mailbox="1014">
+ <user id="1014">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1014"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1015.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1015.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1015.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1015" mailbox="1015">
+ <user id="1015">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1015"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1016.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1016.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1016.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1016" mailbox="1016">
+ <user id="1016">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1016"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1017.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1017.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1017.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1017" mailbox="1017">
+ <user id="1017">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1017"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1018.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1018.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1018.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1018" mailbox="1018">
+ <user id="1018">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1018"/>
</params>
<variables>
Modified: freeswitch/branches/seven/conf/directory/default/1019.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/1019.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/1019.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,7 @@
<include>
- <user id="1019" mailbox="1019">
+ <user id="1019">
<params>
- <param name="password" value="1234"/>
+ <param name="password" value="$${default_password}"/>
<param name="vm-password" value="1019"/>
</params>
<variables>
Deleted: freeswitch/branches/seven/conf/directory/default/asterlink.com.noload
Modified: freeswitch/branches/seven/conf/directory/default/brian.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/brian.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/brian.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,7 +1,9 @@
<include>
- <!-- ipauth if you have an ip= in the user attributes ie ip="1.2.3.4" -->
- <!-- <user id="brian" ip="1.2.3.4"> -->
- <user id="brian" mailbox="9999" cidr="192.0.2.0/24">
+ <!--
+ ipauth if you have an cidr= in the user attributes ie cidr="1.2.3.4/32"
+ see <node type="allow" domain="$${domain}"/> in default acl.conf.xml
+ -->
+ <user id="brian" cidr="192.0.2.0/24">
<!-- Outbound Registrations Related to this user -->
<gateways>
<!--<gateway name="asterlink.com">-->
@@ -41,8 +43,8 @@
</gateways>
<params>
<!-- omit password for authless registration -->
- <param name="password" value="1234"/>
- <param name="vm-password" value="1234"/><!--if vm-password is omitted password param is used-->
+ <param name="password" value="$${default_password}"/>
+ <param name="vm-password" value="9999"/><!--if vm-password is omitted password param is used-->
<!--<param name="email-addr" value="me@mydomain.com"/>-->
<!--<param name="vm-delete-file" value="true"/>-->
<!--<param name="vm-attach-file" value="true"/>-->
Modified: freeswitch/branches/seven/conf/directory/default/example.com.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/directory/default/example.com.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/directory/default/example.com.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -14,7 +14,7 @@
<param name="register" value="$${default_provider_register}"/>
<param name="retry-seconds" value="30"/>
<param name="extension" value="$${default_provider_contact}"/>
- <param name="contact-params" value="domain_name=$${domain}"/>
+ <!--<param name="contact-params" value="domain_name=$${domain}"/>-->
<param name="context" value="public"/>
</gateway>
</gateways>
Deleted: freeswitch/branches/seven/conf/directory/default/ideasip.com.noload
Deleted: freeswitch/branches/seven/conf/directory/default/intelefone.net.noload
Deleted: freeswitch/branches/seven/conf/directory/default/pulver.com.noload
Deleted: freeswitch/branches/seven/conf/directory/default/sip.broadvoice.com.noload
Deleted: freeswitch/branches/seven/conf/directory/default/sipphone.com.noload
Deleted: freeswitch/branches/seven/conf/directory/default/voipuser.org.noload
Modified: freeswitch/branches/seven/conf/freeswitch.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/freeswitch.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/freeswitch.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,4 @@
+<?xml version="1.0"?>
<!--
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
@@ -16,7 +17,6 @@
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
-->
-<?xml version="1.0"?>
<document type="freeswitch/xml">
<!--#comment
All comments starting with #command will be preprocessed and never sent to the xml parser
@@ -56,6 +56,7 @@
<section name="phrases" description="Speech Phrase Management">
<macros>
<X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>
+ <X-PRE-PROCESS cmd="include" data="lang/ru/*.xml"/>
</macros>
</section>
Deleted: freeswitch/branches/seven/conf/jingle_profiles/client.noload
Modified: freeswitch/branches/seven/conf/jingle_profiles/client.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/jingle_profiles/client.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/jingle_profiles/client.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -9,7 +9,7 @@
<param name="context" value="public"/>
<param name="message" value="Jingle all the way"/>
<param name="rtp-ip" value="$${bind_server_ip}"/>
- <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip"/> -->
+ <!-- <param name="ext-rtp-ip" value="auto-nat"/> -->
<param name="auto-login" value="true"/>
<!-- SASL "plain" or "md5" -->
<param name="sasl" value="plain"/>
@@ -26,6 +26,7 @@
<!-- <param name="vad" value="out"/> -->
<param name="vad" value="both"/>
<!--<param name="avatar" value="/path/to/tiny.jpg"/>-->
- <!--<param name="candidate-acl" value="dl-candidates"/>-->
+ <!--<param name="candidate-acl" value="wan.auto"/>-->
+ <param name="local-network-acl" value="localnet.auto"/>
</x-profile>
</include>
Deleted: freeswitch/branches/seven/conf/jingle_profiles/server.noload
Modified: freeswitch/branches/seven/conf/jingle_profiles/server.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/jingle_profiles/server.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/jingle_profiles/server.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -16,6 +16,6 @@
<!--<param name="avatar" value="/path/to/tiny.jpg"/>-->
<!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
- <!--<param name="candidate-acl" value="dl-candidates"/>-->
+ <!--<param name="candidate-acl" value="wan.auto"/>-->
</x-profile>
</include>
Modified: freeswitch/branches/seven/conf/lang/en/demo/demo-ivr.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/lang/en/demo/demo-ivr.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/lang/en/demo/demo-ivr.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -5,120 +5,110 @@
<macro name="demo_ivr_count">
<input pattern="^(\d+)$">
<match>
- <action function="play-file" data="voicemail/vm-you_have.wav"/>
- <action function="say" data="$1" method="pronounced" type="name_spelled"/>
- <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="name_spelled"/>
+ <action function="play-file" data="voicemail/vm-messages.wav"/>
</match>
</input>
</macro>
- <macro name="demo_ivr_main_menu"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
+ <macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
<input pattern="(.*)">
<match>
<!-- string together several existing sound files to create one long greeting -->
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 1: Call FreeSWITCH conference-->
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
- <action function="execute" data="sleep(1500)"/>
+ <action function="play-file" data="silence_stream://1500"/>
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/1.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 2: Do FreeSWITCH echo test -->
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/2.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 3: Listen to Music on Hold -->
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/3.wav"/>
- <action function="execute" data="sleep(250)"/>
- <!-- Menu option 4: Hear a sample submenu -->
- <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
- <action function="execute" data="sleep(250)"/>
- <action function="play-file" data="ivr/ivr-please.wav"/>
- <action function="play-file" data="voicemail/vm-press.wav"/>
+
+ <!-- Menu option 4: Register for ClueCon -->
+ <action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
<action function="play-file" data="digits/4.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 5: Listen to screaming monkeys -->
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/5.wav"/>
- <action function="execute" data="sleep(250)"/>
+
+ <!-- Menu option 6: Hear a sample submenu -->
+ <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/6.wav"/>
+
<!-- Menu option 9: Repeat these options -->
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/9.wav"/>
- <action function="execute" data="sleep(2000)"/>
+ <action function="play-file" data="silence_stream://2000"/>
</match>
</input>
</macro>
<!-- 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">
+ <macro name="demo_ivr_main_menu_short" pause="100">
<input pattern="(.*)">
<match>
<!-- Menu option 1: Call FreeSWITCH conference-->
- <action function="execute" data="sleep(1000)"/>
+ <action function="play-file" data="silence_stream://1000"/>
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/1.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 2: Do FreeSWITCH echo test -->
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/2.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 3: Listen to Music on Hold -->
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/3.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 4: Hear a sample submenu -->
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/4.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 5: Listen to screaming monkeys -->
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/5.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option 9: Repeat these options -->
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/9.wav"/>
- <action function="execute" data="sleep(2000)"/>
+ <action function="play-file" data="silence_stream://2000"/>
</match>
</input>
</macro>
@@ -128,16 +118,14 @@
<input pattern="(.*)">
<match>
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
- <action function="execute" data="sleep(250)"/>
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
- <action function="execute" data="sleep(250)"/>
+
<!-- Menu option *: Return to top menu -->
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
- <action function="execute" data="sleep(250)"/>
<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"/>
- <action function="execute" data="sleep(250)"/>
+
</match>
</input>
</macro>
@@ -149,11 +137,10 @@
<match>
<!-- Menu option *: Return to top menu -->
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
- <action function="execute" data="sleep(250)"/>
<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"/>
- <action function="execute" data="sleep(250)"/>
+
</match>
</input>
</macro>
Modified: freeswitch/branches/seven/conf/lang/en/vm/sounds.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/lang/en/vm/sounds.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/lang/en/vm/sounds.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -332,4 +332,13 @@
</input>
</macro>
+ <macro name="voicemail_disk_quota_exceeded">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
+ </match>
+ </input>
+ </macro>
+
+
</include><!--This line will be ignored it's here to validate the xml and is optional -->
Copied: freeswitch/branches/seven/conf/lang/ru (from rev 14471, freeswitch/trunk/conf/lang/ru)
Copied: freeswitch/branches/seven/conf/lang/ru/demo (from rev 14471, freeswitch/trunk/conf/lang/ru/demo)
Deleted: freeswitch/branches/seven/conf/lang/ru/demo/demo-ivr.xml
Copied: freeswitch/branches/seven/conf/lang/ru/demo/demo-ivr.xml (from rev 14471, freeswitch/trunk/conf/lang/ru/demo/demo-ivr.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/lang/ru/demo/demo-ivr.xml (rev 0)
+++ freeswitch/branches/seven/conf/lang/ru/demo/demo-ivr.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+
+ <macro name="demo_ivr_count">
+ <input pattern="^(\d+)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-you_have.wav"/>
+ <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+ <action function="play-file" data="voicemail/vm-messages.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="demo_ivr_main_menu" pause="250"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
+ <input pattern="(.*)">
+ <match>
+ <!-- string together several existing sound files to create one long greeting -->
+ <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+ <action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
+ <action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
+ <!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
+
+ <!-- Menu option 1: Call FreeSWITCH conference-->
+ <action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
+ <action function="execute" data="sleep(1500)"/>
+ <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/1.wav"/>
+
+ <!-- Menu option 2: Do FreeSWITCH echo test -->
+ <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/2.wav"/>
+
+ <!-- Menu option 3: Listen to Music on Hold -->
+ <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/3.wav"/>
+
+ <!-- Menu option 4: Hear a sample submenu -->
+ <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/4.wav"/>
+
+ <!-- Menu option 5: Listen to screaming monkeys -->
+ <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/5.wav"/>
+
+ <!-- Menu option 9: Repeat these options -->
+ <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/9.wav"/>
+ <action function="execute" data="sleep(2000)"/>
+ </match>
+ </input>
+ </macro>
+
+ <!-- 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">
+ <input pattern="(.*)">
+ <match>
+ <!-- Menu option 1: Call FreeSWITCH conference-->
+ <action function="execute" data="sleep(1000)"/>
+ <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/1.wav"/>
+
+ <!-- Menu option 2: Do FreeSWITCH echo test -->
+ <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/2.wav"/>
+
+ <!-- Menu option 3: Listen to Music on Hold -->
+ <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/3.wav"/>
+
+ <!-- Menu option 4: Hear a sample submenu -->
+ <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/4.wav"/>
+
+ <!-- Menu option 5: Listen to screaming monkeys -->
+ <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/5.wav"/>
+
+ <!-- Menu option 9: Repeat these options -->
+ <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+ <action function="play-file" data="ivr/ivr-please.wav"/>
+ <action function="play-file" data="voicemail/vm-press.wav"/>
+ <action function="play-file" data="digits/9.wav"/>
+ <action function="execute" data="sleep(2000)"/>
+ </match>
+ </input>
+ </macro>
+
+ <!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
+ <macro name="demo_ivr_sub_menu">
+ <input pattern="(.*)">
+ <match>
+ <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+ <action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
+
+ <!-- Menu option *: Return to top menu -->
+ <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+ <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>
+
+ <!-- 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">
+ <input pattern="(.*)">
+ <match>
+ <!-- Menu option *: Return to top menu -->
+ <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+ <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 -->
Deleted: freeswitch/branches/seven/conf/lang/ru/demo/demo.xml
Copied: freeswitch/branches/seven/conf/lang/ru/demo/demo.xml (from rev 14471, freeswitch/trunk/conf/lang/ru/demo/demo.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/lang/ru/demo/demo.xml (rev 0)
+++ freeswitch/branches/seven/conf/lang/ru/demo/demo.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,100 @@
+<?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 -->
Deleted: freeswitch/branches/seven/conf/lang/ru/ru.xml
Copied: freeswitch/branches/seven/conf/lang/ru/ru.xml (from rev 14471, freeswitch/trunk/conf/lang/ru/ru.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/lang/ru/ru.xml (rev 0)
+++ freeswitch/branches/seven/conf/lang/ru/ru.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--тестовые файлы Вы звуковые файлы можно взять тут svn co http://svn.freeswitch.ru/bbv/mod_say_ru/ru/ -->
+<include>
+ <language name="ru" sound-path="$${base_dir}/sounds/ru/RU/elena" tts-engine="cepstral" tts-voice="elena">
+ <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 -->
+ </language>
+</include>
Copied: freeswitch/branches/seven/conf/lang/ru/vm (from rev 14471, freeswitch/trunk/conf/lang/ru/vm)
Deleted: freeswitch/branches/seven/conf/lang/ru/vm/sounds.xml
Copied: freeswitch/branches/seven/conf/lang/ru/vm/sounds.xml (from rev 14471, freeswitch/trunk/conf/lang/ru/vm/sounds.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/lang/ru/vm/sounds.xml (rev 0)
+++ freeswitch/branches/seven/conf/lang/ru/vm/sounds.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,346 @@
+<?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="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"/>-->
+ </match>
+ </input>
+ </macro>
+
+ <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"/>-->
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_fail_auth">
+ <input pattern="(.*)">
+ <match>
+ <action function="play-file" data="voicemail/vm-fail_auth.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_hello">
+ <input pattern="(.*)">
+ <match>
+ <action function="play-file" data="voicemail/vm-hello.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_goodbye">
+ <input pattern="(.*)">
+ <match>
+ <action function="play-file" data="voicemail/vm-goodbye.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_abort">
+ <input pattern="(.*)">
+ <match>
+ <action function="play-file" data="voicemail/vm-abort.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ <!-- от 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"/>
+ </match>
+ </input>
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </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"/>
+ </match>
+ </input>
+ </macro>
+
+
+ <macro name="voicemail_record_name">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-record_name1.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_invalid_extension">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_choose_greeting">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_choose_greeting_fail">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_record_greeting">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-record_greeting.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_record_message">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="voicemail/vm-record_message.wav"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_number">
+ <input pattern="^(\d+)$">
+ <match>
+ <action function="say" data="$1" method="pronounced" type="items"/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_phone_number">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_name">
+ <input pattern="^(.*)$">
+ <match>
+ <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">
+ <input pattern="^(too-small)$">
+ <match>
+ <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"/>
+ </match>
+ </input>
+ <input pattern="^(saved)$">
+ <match>
+ <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"/>
+ </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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_date">
+ <input pattern="^(.*)$">
+ <match>
+ <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 -->
Deleted: freeswitch/branches/seven/conf/lang/ru/vm/tts.xml
Copied: freeswitch/branches/seven/conf/lang/ru/vm/tts.xml (from rev 14471, freeswitch/trunk/conf/lang/ru/vm/tts.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/lang/ru/vm/tts.xml (rev 0)
+++ freeswitch/branches/seven/conf/lang/ru/vm/tts.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,239 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+ <macro name="voicemail_enter_id">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="please enter your i d, followed by $1."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_enter_pass">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="please enter your password, followed by $1."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_fail_auth">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="login incorrect."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_hello">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="welcome to your voicemail."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_goodbye">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="goodbye."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_abort">
+ <input pattern="(.*)">
+ <match>
+ <action function="speak-text" data="too many failed attempts."/>
+ </match>
+ </input>
+ </macro>
+
+ <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}."/>
+ </match>
+ </input>
+ <input pattern="^(\d+):(.*)$">
+ <match>
+ <action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </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."/>
+ </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."/>
+
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_invalid_extension">
+ <input pattern="^([0-9#*])$">
+ <match>
+ <action function="speak-text" data="$1 is not a valid extension."/>
+ </match>
+ </input>
+ </macro>
+
+ <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"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_forward_prepend">
+ <input pattern="^([0-9#*])$">
+ <match>
+ <action function="speak-text" data="To record an announcement, press $1."/>
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_choose_greeting">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="choose a greeting between 1 and 3."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_choose_greeting_fail">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="invalid value."/>
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </match>
+ </input>
+ </macro>
+
+ <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."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_greeting_selected">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="greeting $1 selected."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_play_greeting">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="$1 is not available."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_number">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="$1"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_message_number">
+ <input pattern="^([a-z]+):(.*)$">
+ <match>
+ <action function="speak-text" data="$1 message number $2."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_phone_number">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="$1."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_name">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="$1."/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_ack">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="speak-text" data="message $1"/>
+ </match>
+ </input>
+ </macro>
+
+ <macro name="voicemail_say_date">
+ <input pattern="^(.*)$">
+ <match>
+ <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 -->
Copied: freeswitch/branches/seven/conf/mrcp_profiles (from rev 14471, freeswitch/trunk/conf/mrcp_profiles)
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/loquendo-7-mrcp-v2.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/loquendo-7-mrcp-v2.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/loquendo-7-mrcp-v2.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/loquendo-7-mrcp-v2.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/loquendo-7-mrcp-v2.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+<include>
+ <!-- Loquendo MRCP Server 7 MRCPv2 -->
+ <profile name="loquendo7-mrcp2" version="2">
+ <!--param name="client-ext-ip" value="auto"-->
+ <param name="client-ip" value="auto"/>
+ <param name="client-port" value="5090"/>
+ <param name="server-ip" value="10.5.5.152"/>
+ <param name="server-port" value="5060"/>
+ <!--param name="force-destination" value="1"/-->
+ <param name="sip-transport" value="udp"/>
+ <!--param name="ua-name" value="FreeSWITCH"/-->
+ <!--param name="sdp-origin" value="FreeSWITCH"/-->
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ <param name="jsgf-mime-type" value="application/jsgf"/>
+ </profile>
+</include>
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/nuance-1.0.0-mrcp-v1.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/nuance-1.0.0-mrcp-v1.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/nuance-1.0.0-mrcp-v1.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/nuance-1.0.0-mrcp-v1.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/nuance-1.0.0-mrcp-v1.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<include>
+ <!-- Nuance MRCP 1.0.0 Server -->
+ <profile name="nuance-mrcp1" version="1">
+ <param name="server-ip" value="10.5.5.152"/>
+ <param name="server-port" value="554"/>
+ <param name="resource-location" value=""/>
+ <param name="speechsynth" value="synthesizer"/>
+ <param name="speechrecog" value="recognizer"/>
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ </profile>
+</include>
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v1.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v1.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/nuance-5.0-mrcp-v1.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v1.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v1.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<include>
+ <!-- Nuance Speech Server 5.0 MRCPv1 -->
+ <profile name="nuance5-mrcp1" version="1">
+ <param name="server-ip" value="10.5.5.152"/>
+ <param name="server-port" value="4900"/>
+ <param name="resource-location" value="media"/>
+ <param name="speechsynth" value="speechsynthesizer"/>
+ <param name="speechrecog" value="speechrecognizer"/>
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ </profile>
+</include>
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v2.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v2.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/nuance-5.0-mrcp-v2.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v2.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/nuance-5.0-mrcp-v2.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+<include>
+ <!-- Nuance Speech Server 5.0 MRCPv2 -->
+ <profile name="nuance5-mrcp2" version="2">
+ <!--param name="client-ext-ip" value="auto"-->
+ <param name="client-ip" value="auto"/>
+ <param name="client-port" value="5090"/>
+ <param name="server-ip" value="10.5.5.152"/>
+ <param name="server-port" value="5060"/>
+ <!--param name="force-destination" value="1"/-->
+ <param name="sip-transport" value="udp"/>
+ <!--param name="ua-name" value="FreeSWITCH"/-->
+ <!--param name="sdp-origin" value="FreeSWITCH"/-->
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ </profile>
+</include>
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/unimrcpserver-mrcp-v1.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/unimrcpserver-mrcp-v1.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/unimrcpserver-mrcp-v1.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/unimrcpserver-mrcp-v1.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/unimrcpserver-mrcp-v1.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<include>
+ <!-- UniMRCP Server MRCPv1 -->
+ <profile name="unimrcpserver-mrcp1" version="1">
+ <param name="server-ip" value="10.5.5.152"/>
+ <param name="server-port" value="1554"/>
+ <param name="resource-location" value=""/>
+ <param name="speechsynth" value="speechsynthesizer"/>
+ <param name="speechrecog" value="speechrecognizer"/>
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ </profile>
+</include>
Deleted: freeswitch/branches/seven/conf/mrcp_profiles/voxeo-prophecy-8.0-mrcp-v1.xml
Copied: freeswitch/branches/seven/conf/mrcp_profiles/voxeo-prophecy-8.0-mrcp-v1.xml (from rev 14471, freeswitch/trunk/conf/mrcp_profiles/voxeo-prophecy-8.0-mrcp-v1.xml) (0 => 14472)
--- freeswitch/branches/seven/conf/mrcp_profiles/voxeo-prophecy-8.0-mrcp-v1.xml (rev 0)
+++ freeswitch/branches/seven/conf/mrcp_profiles/voxeo-prophecy-8.0-mrcp-v1.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<include>
+ <!-- Voxeo Prophecy 8.0 MRCPv1 -->
+ <profile name="voxeo-prophecy8.0-mrcp1" version="1">
+ <param name="server-ip" value="99.185.85.31"/>
+ <param name="server-port" value="554"/>
+ <param name="resource-location" value=""/>
+ <param name="speechsynth" value="synthesizer"/>
+ <param name="speechrecog" value="recognizer"/>
+ <!--param name="rtp-ext-ip" value="auto"/-->
+ <param name="rtp-ip" value="auto"/>
+ <param name="rtp-port-min" value="4000"/>
+ <param name="rtp-port-max" value="5000"/>
+ <!--param name="playout-delay" value="50"/-->
+ <!--param name="max-playout-delay" value="200"/-->
+ <!--param name="ptime" value="20"/-->
+ <param name="codecs" value="PCMU PCMA L16/96/8000"/>
+ </profile>
+</include>
Modified: freeswitch/branches/seven/conf/sip_profiles/external.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/sip_profiles/external.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/sip_profiles/external.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,13 +1,15 @@
-<!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<profile name="external">
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<!-- This profile is only for outbound registrations to providers -->
<gateways>
<X-PRE-PROCESS cmd="include" data="external/*.xml"/>
</gateways>
<aliases>
+ <!--
<alias name="outbound"/>
- <alias name="nat"/> <!-- for backwards compatibility -->
+ <alias name="nat"/>
+ -->
</aliases>
<domains>
@@ -24,10 +26,10 @@
<param name="dtmf-duration" value="100"/>
<param name="codec-prefs" value="$${outbound_codec_prefs}"/>
<param name="hold-music" value="$${hold_music}"/>
- <param name="use-rtp-timer" value="true"/>
<param name="rtp-timer-name" value="soft"/>
<!--<param name="enable-100rel" value="true"/>-->
<!-- This could be set to "passive" -->
+ <param name="local-network-acl" value="localnet.auto"/>
<param name="manage-presence" value="false"/>
<!-- used to share presence info across sofia profiles
@@ -47,14 +49,13 @@
<param name="inbound-codec-negotiation" value="generous"/>
<param name="nonce-ttl" value="60"/>
<param name="auth-calls" value="false"/>
- <param name="rtp-timeout-sec" value="1800"/>
<!--
DO NOT USE HOSTNAMES, ONLY IP ADDRESSES IN THESE SETTINGS!
-->
<param name="rtp-ip" value="$${local_ip_v4}"/>
<param name="sip-ip" value="$${local_ip_v4}"/>
- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
- <param name="ext-sip-ip" value="$${external_sip_ip}"/>
+ <param name="ext-rtp-ip" value="auto-nat"/>
+ <param name="ext-sip-ip" value="auto-nat"/>
<param name="rtp-timeout-sec" value="300"/>
<param name="rtp-hold-timeout-sec" value="1800"/>
<!--<param name="enable-3pcc" value="true"/>-->
Modified: freeswitch/branches/seven/conf/sip_profiles/internal/example.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/sip_profiles/internal/example.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/sip_profiles/internal/example.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -28,6 +28,8 @@
<!--<param name="caller-id-in-from" value="false"/>-->
<!--extra sip params to send in the contact-->
<!--<param name="contact-params" value="tport=tcp"/>-->
+ <!-- Put the extension in the contact -->
+ <!--<param name="extension-in-contact" value="true"/>-->
<!--send an options ping every x seconds, failure will unregister and/or mark it down-->
<!--<param name="ping" value="25"/>-->
<!--</gateway>-->
Modified: freeswitch/branches/seven/conf/sip_profiles/internal-ipv6.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/sip_profiles/internal-ipv6.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/sip_profiles/internal-ipv6.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,8 +1,8 @@
-<!--
- This is an example of a sofia profile setup to listen on IPv6.
--->
-<!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<profile name="internal-ipv6">
+ <!--
+ This is an example of a sofia profile setup to listen on IPv6.
+ -->
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<!--aliases are other names that will work as a valid profile name for this profile-->
<settings>
<!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> -->
@@ -119,6 +119,10 @@
<!-- set to true to have the profile determine stun is not useful and turn it off globally-->
<!--<param name="stun-auto-disable" value="true"/>-->
+ <!-- the following can be used as workaround with bogus SRV/NAPTR records -->
+ <!--<param name="disable-srv" value="false" />-->
+ <!--<param name="disable-naptr" value="false" />-->
+
</settings>
</profile>
Modified: freeswitch/branches/seven/conf/sip_profiles/internal.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/sip_profiles/internal.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/sip_profiles/internal.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,15 +1,17 @@
-<!--
- This is a sofia sip profile/user agent. This will service exactly one ip and port.
- In FreeSWITCH you can run multiple sip user agents on their own ip and port.
-
- When you hear someone say "sofia profile" this is what they are talking about.
--->
-
-<!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<profile name="internal">
+ <!--
+ This is a sofia sip profile/user agent. This will service exactly one ip and port.
+ In FreeSWITCH you can run multiple sip user agents on their own ip and port.
+
+ When you hear someone say "sofia profile" this is what they are talking about.
+ -->
+
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
<!--aliases are other names that will work as a valid profile name for this profile-->
<aliases>
+ <!--
<alias name="default"/>
+ -->
</aliases>
<!-- Outbound Registrations -->
<gateways>
@@ -45,24 +47,36 @@
<param name="dialplan" value="XML"/>
<param name="dtmf-duration" value="100"/>
<param name="codec-prefs" value="$${global_codec_prefs}"/>
- <param name="use-rtp-timer" value="true"/>
<param name="rtp-timer-name" value="soft"/>
<!-- ip address to use for rtp, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
<param name="rtp-ip" value="$${local_ip_v4}"/>
<!-- ip address to bind to, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
<param name="sip-ip" value="$${local_ip_v4}"/>
<param name="hold-music" value="$${hold_music}"/>
- <param name="apply-nat-acl" value="rfc1918"/>
+ <param name="apply-nat-acl" value="nat.auto"/>
<!--<param name="aggressive-nat-detection" value="true"/>-->
+ <!--
+ There are known issues (asserts and segfaults) when 100rel is enabled.
+ It is not recommended to enable 100rel at this time.
+ -->
<!--<param name="enable-100rel" value="true"/>-->
+ <!--
+ enable/disable session timers
+ -->
+ <!--<param name="enable-timer" value="false"/>-->
<!--<param name="minimum-session-expires" value="120"/>-->
<param name="apply-inbound-acl" value="domains"/>
+ <!--
+ This defines your local network, by default we detect your local network
+ and create this localnet.auto ACL for this.
+ -->
+ <param name="local-network-acl" value="localnet.auto"/>
<!--<param name="apply-register-acl" value="domains"/>-->
<!--<param name="dtmf-type" value="info"/>-->
<param name="record-template" value="$${base_dir}/recordings/${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
<!--enable to use presence -->
<param name="manage-presence" value="true"/>
-
+ <!--<param name="manage-shared-appearance" value="true"/>-->
<!-- used to share presence info across sofia profiles -->
<!-- Name of the db to use for this profile -->
<!--<param name="dbname" value="share_presence"/>-->
@@ -93,6 +107,10 @@
<param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
<!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
<param name="tls-version" value="$${sip_tls_version}"/>
+
+ <!-- turn on auto-flush during bridge (skip timer sleep when the socket already has data)
+ (reduces delay on latent connections default true, must be disabled explicitly)-->
+ <!--<param name="rtp-autoflush-during-bridge" value="false"/>-->
<!--If you don't want to pass through timestamps from 1 RTP call to another (on a per call basis with rtp_rewrite_timestamps chanvar)-->
<!--<param name="rtp-rewrite-timestamps" value="true"/>-->
@@ -124,6 +142,12 @@
<!--Uncomment if you want to force the outbound leg of a bridge to only offer the codec
that the originator is using-->
<!--<param name="disable-transcoding" value="true"/>-->
+ <!-- Handle 302 Redirect in the dialplan -->
+ <!--<param name="manual-redirect" value="true"/> -->
+ <!-- Disable Transfer -->
+ <!--<param name="disable-transfer" value="true"/> -->
+ <!-- Disable Register -->
+ <!--<param name="disable-register" value="true"/> -->
<!-- Used for when phones respond to a challenged ACK with method INVITE in the hash -->
<!--<param name="NDLB-broken-auth-hash" value="true"/>-->
<!-- add a ;received="<ip>:<port>" to the contact when replying to register for nat handling -->
@@ -133,8 +157,15 @@
<param name="inbound-reg-force-matching-username" value="true"/>
<!-- on authed calls, authenticate *all* the packets not just invite -->
<param name="auth-all-packets" value="false"/>
- <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/> -->
- <!-- <param name="ext-sip-ip" value="$${external_sip_ip}"/> -->
+ <!--
+ Possible options for ext-rtp-ip or ext-sip-ip
+
+ auto - Use guessed ip.
+ auto-nat - Use ip learned from NAT-PMP or UPNP
+ -->
+ <param name="ext-rtp-ip" value="auto-nat"/>
+ <param name="ext-sip-ip" value="auto-nat"/>
+
<!-- rtp inactivity timeout -->
<param name="rtp-timeout-sec" value="300"/>
<param name="rtp-hold-timeout-sec" value="1800"/>
@@ -187,6 +218,8 @@
<!--<param name="inbound-use-callid-as-uuid" value="true"/>-->
<!-- on outbound calls set the callid to match the uuid of the session -->
<!--<param name="outbound-use-uuid-as-callid" value="true"/>-->
+ <!-- set to false disable this feature -->
+ <!--<param name="rtp-autofix-timing" value="false"/>-->
<!-- clear clears them all or supply the name to add or the name prefixed with ~ to remove
valid values:
@@ -197,6 +230,39 @@
-->
<!--<param name="auto-rtp-bugs" data="clear"/>-->
+
+ <!-- the following can be used as workaround with bogus SRV/NAPTR records -->
+ <!--<param name="disable-srv" value="false" />-->
+ <!--<param name="disable-naptr" value="false" />-->
+
+ <!-- The following can be used to fine-tune timers within sofia's transport layer
+ Those settings are for advanced users and can safely be left as-is -->
+
+ <!-- Initial retransmission interval (in milliseconds).
+ Set the T1 retransmission interval used by the SIP transaction engine.
+ The T1 is the initial duration used by request retransmission timers A and E (UDP) as well as response retransmission timer G. -->
+ <!-- <param name="timer-T1" value="500" /> -->
+
+ <!-- Transaction timeout (defaults to T1 * 64).
+ Set the T1x64 timeout value used by the SIP transaction engine.
+ The T1x64 is duration used for timers B, F, H, and J (UDP) by the SIP transaction engine.
+ The timeout value T1x64 can be adjusted separately from the initial retransmission interval T1. -->
+ <!-- <param name="timer-T1X64" value="32000" /> -->
+
+
+ <!-- Maximum retransmission interval (in milliseconds).
+ Set the maximum retransmission interval used by the SIP transaction engine.
+ The T2 is the maximum duration used for the timers E (UDP) and G by the SIP transaction engine.
+ Note that the timer A is not capped by T2. Retransmission interval of INVITE requests grows exponentially
+ until the timer B fires. -->
+ <!-- <param name="timer-T2" value="4000" /> -->
+
+ <!--
+ Transaction lifetime (in milliseconds).
+ Set the lifetime for completed transactions used by the SIP transaction engine.
+ A completed transaction is kept around for the duration of T4 in order to catch late responses.
+ The T4 is the maximum duration for the messages to stay in the network and the duration of SIP timer K. -->
+ <!-- <param name="timer-T4" value="4000" /> -->
</settings>
</profile>
Modified: freeswitch/branches/seven/conf/vars.xml (14471 => 14472)
--- freeswitch/branches/seven/conf/vars.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/conf/vars.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,6 +1,20 @@
+<include>
<!-- Preprocessor Variables
These are introduced when configuration strings must be consistent across modules.
- -->
+ NOTICE: YOU CAN NOT COMMENT OUT AN X-PRE-PROCESS line, Remove the line instead.
+
+ WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+
+ YOU SHOULD CHANGE THIS default_password value if you don't want to be subject to any
+ toll fraud in the future. It's your responsibility to secure your own system.
+
+ This default config is used to demonstrate the feature set of FreeSWITCH.
+
+ WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+ -->
+ <X-PRE-PROCESS cmd="set" data="default_password=1234"/>
+ <!-- Did you change it yet? -->
+
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${base_dir}/sounds/en/us/callie"/>
<!--
This setting is what sets the default domain FreeSWITCH will use if all else fails.
@@ -10,14 +24,17 @@
information on this topic.
-->
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
+ <X-PRE-PROCESS cmd="set" data="domain_name=$${domain}"/>
<X-PRE-PROCESS cmd="set" data="hold_music=local_stream://moh"/>
+ <X-PRE-PROCESS cmd="set" data="use_profile=internal"/>
+
<!--
- xmpp_client_profile and xmpp_server_profile
- xmpp_client_profile can be any string.
- xmpp_server_profile is appended to "dingaling_" to form the database name
- containing the "subscriptions" table.
- used by: dingaling.conf.xml enum.conf.xml
- -->
+ Enable ZRTP globally you can override this on a per channel basis
+
+ http://wiki.freeswitch.org/wiki/ZRTP (on how to enable zrtp)
+ -->
+ <X-PRE-PROCESS cmd="set" data="zrtp_secure_media=true"/>
+
<!--
Examples of codec options: (module must be compiled and loaded)
@@ -68,8 +85,17 @@
H264 - H.264 Video
-->
- <X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM"/>
+ <X-PRE-PROCESS cmd="set" data="global_codec_prefs=G7221@32000h,G7221@16000h,G722,PCMU,PCMA,GSM"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM"/>
+
+ <!--
+ xmpp_client_profile and xmpp_server_profile
+ xmpp_client_profile can be any string.
+ xmpp_server_profile is appended to "dingaling_" to form the database name
+ containing the "subscriptions" table.
+ used by: dingaling.conf.xml enum.conf.xml
+ -->
+
<X-PRE-PROCESS cmd="set" data="xmpp_client_profile=xmppc"/>
<X-PRE-PROCESS cmd="set" data="xmpp_server_profile=xmpps"/>
<!--
@@ -92,16 +118,25 @@
-->
<!-- external_rtp_ip
- Used as the public IP address for SDP.
- Can be an ip address or a string like "stun:stun.server.com"
+ Can be an one of:
+ ip address: "12.34.56.78"
+ a stun server lookup: "stun:stun.server.com"
+ a DNS name: "host:host.server.com"
+ where fs.mydomain.com is a DNS A record-useful when fs is on
+ a dynamic IP address, and uses a dynamic DNS updater.
If unspecified, the bind_server_ip value is used.
Used by: sofia.conf.xml dingaling.conf.xml
-->
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=stun:stun.freeswitch.org"/>
<!-- external_sip_ip
- Used as the public IP address for SDP.
- Can be an ip address or a string like "stun:stun.server.com"
+ Used as the public IP address for SDP.
+ Can be an one of:
+ ip address: "12.34.56.78"
+ a stun server lookup: "stun:stun.server.com"
+ a DNS name: "host:host.server.com"
+ where fs.mydomain.com is a DNS A record-useful when fs is on
+ a dynamic IP address, and uses a dynamic DNS updater.
If unspecified, the bind_server_ip value is used.
Used by: sofia.conf.xml dingaling.conf.xml
-->
@@ -127,9 +162,10 @@
<X-PRE-PROCESS cmd="set" data="default_country=US"/>
<X-PRE-PROCESS cmd="set" data="uk-ring=%(400,200,400,450);%(400,2200,400,450)"/>
- <X-PRE-PROCESS cmd="set" data="us-ring=%(2000, 4000, 440.0, 480.0)"/>
- <X-PRE-PROCESS cmd="set" data="fr-ring=%(1500, 3500, 440.0, 0.0)"/>
- <X-PRE-PROCESS cmd="set" data="rs-ring=%(1000, 4000, 425.0, 0.0)"/>
+ <X-PRE-PROCESS cmd="set" data="us-ring=%(2000,4000,440.0,480.0)"/>
+ <X-PRE-PROCESS cmd="set" data="fr-ring=%(1500,3500,440.0,0.0)"/>
+ <X-PRE-PROCESS cmd="set" data="rs-ring=%(1000,4000,425.0,0.0)"/>
+ <X-PRE-PROCESS cmd="set" data="ru-ring=%(350,350,425)"/>
<X-PRE-PROCESS cmd="set" data="bong-ring=v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
<X-PRE-PROCESS cmd="set" data="sit=%(274,0,913.8);%(274,0,1370.6);%(380,0,1776.7)"/>
<!--
@@ -147,7 +183,7 @@
<X-PRE-PROCESS cmd="set" data="default_provider_contact=5000"/>
<!--
- SIP and TLS settings.
+ SIP and TLS settings. http://wiki.freeswitch.org/wiki/Tls
-->
<X-PRE-PROCESS cmd="set" data="sip_tls_version=tlsv1"/>
@@ -164,3 +200,4 @@
<X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
<X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>
<X-PRE-PROCESS cmd="set" data="external_ssl_dir=$${base_dir}/conf/ssl"/>
+</include>
Modified: freeswitch/branches/seven/configure.in (14471 => 14472)
--- freeswitch/branches/seven/configure.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/configure.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -35,7 +35,6 @@
AC_ARG_WITH([modinstdir],
[AS_HELP_STRING([--with-modinstdir=DIR], [Install modules into this location (default: $prefix/mod)])], [modinstdir="$withval"], [modinstdir="${prefix}/mod"])
-
AC_SUBST(modinstdir)
AC_DEFINE_UNQUOTED([SWITCH_MOD_DIR],"${modinstdir}",[where to install the modules to])
@@ -53,6 +52,18 @@
# Checks for programs.
AC_PROG_CC
AC_PROG_CXX
+
+#check if the g++ compiler works
+AC_CACHE_CHECK([whether the C++ compiler works], [ac_cv_sys_cxx_works], [
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([int main() { }], [ac_cv_sys_cxx_works=yes],
+ [ac_cv_sys_cxx_works=no])
+ AC_LANG_POP([C++])
+ ])
+[ if [ "x$ac_cv_sys_cxx_works" = "xno" ]; then ]
+ AC_MSG_FAILURE([The C++ compiler does not work. Please (re)install the C++ compiler])
+[ fi ]
+
AC_PROG_AWK
AC_PROG_MAKE_SET
AC_PROG_INSTALL
@@ -76,31 +87,10 @@
AX_CC_MAXOPT
fi
-
-# Optional Features
-
-AC_ARG_ENABLE(resample,
-[AC_HELP_STRING([--disable-resample],[build without embedded resampler])],[enable_resample="$enableval"],[enable_resample="yes"])
-
-# We should add checking for out of tree libresample here
-RESAMPLE_LIB=
-RESAMPLE_CFLAGS=
-if test "${enable_resample}" = "yes"; then
- RESAMPLE_LIB="libs/libresample/libresample.la"
- RESAMPLE_CFLAGS="-I${switch_srcdir}/libs/libresample/include"
-else
- AC_DEFINE([DISABLE_RESAMPLE],[],[Disable the embedded resampler])
-fi
-
-AC_SUBST(RESAMPLE_LIB)
-AC_SUBST(RESAMPLE_CFLAGS)
-
-AM_CONDITIONAL([USE_INTREE_RESAMPLE],[test "${enable_resample}" = "yes"])
-
# set defaults for use on all platforms
SWITCH_AM_CFLAGS="-I${switch_srcdir}/src/include -I${switch_srcdir}/libs/libteletone/src"
SWITCH_AM_CXXFLAGS="-I${switch_srcdir}/src/include -I${switch_srcdir}/libs/libteletone/src"
-SWITCH_AM_LDFLAGS="-lm -L/usr/local/lib"
+SWITCH_AM_LDFLAGS="-lm"
#set SOLINK variable based on compiler and host
if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then
@@ -132,6 +122,30 @@
;;
esac
+##
+# detect libtool major version,
+# set libtool library extension based on this
+# to work around some brokeness when using 'la' with libtool-1.5
+#
+AC_MSG_CHECKING([libtool major version])
+libtool="${switch_builddir}/libtool"
+LIBTOOL_MAJOR_VERSION="`$libtool --version 2>/dev/null| sed -e 's/([[^)]]*)//g;s/^[[^0-9]]*//;s/[[- ]].*//g;q'| awk 'BEGIN { FS = "." } { print $1 }' `"
+if test -z "$LIBTOOL_MAJOR_VERSION" ; then
+ LIBTOOL_MAJOR_VERSION="`sed -n -e '/^VERSION/{s/^.*=\"\?\([[0-9]]\+\)\..\+/\1/;p;}' ${switch_srcdir}/build/config/ltmain.sh`"
+fi
+if test -z "$LIBTOOL_MAJOR_VERSION" ; then
+ AC_MSG_ERROR([Failed to detect your libtool version, please open a bug report on http://jira.freeswitch.org/])
+fi
+AC_MSG_RESULT([${LIBTOOL_MAJOR_VERSION}])
+
+LIBTOOL_LIB_EXTEN="$DYNAMIC_LIB_EXTEN"
+
+if test "${LIBTOOL_MAJOR_VERSION}" = "2" ; then
+ LIBTOOL_LIB_EXTEN="la"
+fi
+AC_MSG_RESULT([using libtool library extension... ${LIBTOOL_LIB_EXTEN}])
+
+
# Enable 64 bit build
AC_ARG_ENABLE(64,
[AC_HELP_STRING([--enable-64],[build with 64 bit support])],[enable_64="$enable_64"],[enable_64="no"])
@@ -140,6 +154,9 @@
if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then
APR_ADDTO(SWITCH_AM_CFLAGS, -KPIC)
APR_ADDTO(SWITCH_AM_CFLAGS, -DPIC)
+ APR_ADDTO(SWITCH_AM_CFLAGS, -erroff=E_END_OF_LOOP_CODE_NOT_REACHED)
+ APR_ADDTO(SWITCH_AM_CFLAGS, -errtags=yes)
+ APR_ADDTO(SWITCH_AM_CXXFLAGS, -errtags=yes)
APR_ADDTO(SWITCH_AM_CXXFLAGS, -KPIC)
APR_ADDTO(SWITCH_AM_CXXFLAGS, -DPIC)
APR_ADDTO(SWITCH_AM_CXXFLAGS, "-features=extensions")
@@ -149,13 +166,87 @@
APR_ADDTO(SWITCH_AM_CFLAGS, -m64)
APR_ADDTO(SWITCH_AM_CXXFLAGS, -m64)
APR_ADDTO(SWITCH_AM_LDFLAGS, -m64)
+ LIBS="$LIBS -m64"
fi
elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
APR_ADDTO(SWITCH_AM_CFLAGS, -fPIC)
APR_ADDTO(SWITCH_AM_CXXFLAGS, -fPIC)
APR_ADDTO(SWITCH_AM_CFLAGS, -Werror)
+ if test "${enable_64}" = "yes"; then
+ LIBS="$LIBS -m64"
+ fi
fi
+#
+# gcc visibility cflag checks
+#
+AC_ARG_ENABLE([visibility],
+ [AS_HELP_STRING([--disable-visibility], [Disable or enable API visibility support (default: use if available)])],
+ [enable_visibility="${enableval}"],
+ [enable_visibility="detect"]
+)
+HAVE_VISIBILITY="no"
+
+if test "x${enable_visibility}" != "xno" ; then
+
+ case "${ax_cv_c_compiler_vendor}" in
+ gnu)
+ save_CFLAGS="${CFLAGS}"
+ CFLAGS="${CFLAGS} -fvisibility=hidden"
+ AC_MSG_CHECKING([whether the compiler supports -fvisibility=hidden])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [int foo __attribute__ ((visibility("default")));],
+ [;]
+ )],
+
+ [AC_MSG_RESULT([yes])
+ APR_ADDTO([SWITCH_AM_CFLAGS], [-fvisibility=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1])
+ APR_ADDTO([SWITCH_AM_CXXFLAGS], [-fvisibility=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1])
+ HAVE_VISIBILITY="yes"],
+
+ [AC_MSG_RESULT([no])]
+ )
+ CFLAGS="${save_CFLAGS}"
+ ;;
+
+ sun)
+ # save_CFLAGS="${CFLAGS}"
+ # CFLAGS="${CFLAGS} -xldscope=hidden"
+ # AC_MSG_CHECKING([whether the compiler supports -xldscope=hidden])
+ # AC_COMPILE_IFELSE(
+ # [AC_LANG_PROGRAM(
+ # [int foo __attribute__ ((visibility("default")));],
+ # [;]
+ # )],
+ #
+ # [AC_MSG_RESULT([yes])
+ # APR_ADDTO([SWITCH_AM_CFLAGS], [-xldscope=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1])
+ # APR_ADDTO([SWITCH_AM_CXXFLAGS], [-xldscope=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1])
+ # HAVE_VISIBILITY="yes"],
+ #
+ # [AC_MSG_RESULT([no])]
+ # )
+ # CFLAGS="${save_CFLAGS}"
+ ;;
+
+ *)
+ if test "x${enable_visibility}" = "xyes" ; then
+ AC_MSG_ERROR([Non-GNU / SUN compilers are currently unsupported])
+ else
+ AC_MSG_WARN([Non-GNU / SUN compilers are currently unsupported])
+ fi
+ ;;
+ esac
+
+ #
+ # visibility explicitly requested but not supported by this compiler => error
+ #
+ if test "x${enable_visibility}" = "xyes" -a "x${HAVE_VISIBILITY}" = "xno" ; then
+ AC_MSG_ERROR([API visibility not supported by this compiler])
+ fi
+fi
+
# Enable debugging (default: on)
# (rename option if the default is changed)
AC_ARG_ENABLE(debug,
@@ -172,8 +263,30 @@
fi
+AC_ARG_ENABLE(zrtp,
+ [AS_HELP_STRING([--enable-zrtp], [Compile with zrtp Support])],,[enable_zrtp="no"])
+if test "x$enable_zrtp" = "xyes" ; then
+ saved_LIBS=$LIBS
+ LIBS="$saved_LIBS -L/usr/local/lib -lbn -lpthread"
+ AC_CHECK_LIB(zrtp, zrtp_init, [has_zrtp="yes"], [has_zrtp="no"])
+ LIBS=$saved_LIBS
+ if test "x$has_zrtp" = "xno"; then
+ AC_ERROR([Cannot locate zrtp libraries])
+ fi
+ APR_ADDTO(SWITCH_AM_CFLAGS, -DENABLE_ZRTP)
+fi
+AM_CONDITIONAL([ENABLE_ZRTP],[test "x$enable_zrtp" != "xno"])
+
+
AM_CONDITIONAL([WANT_DEBUG],[test "${enable_debug}" = "yes"])
+AC_ARG_ENABLE(core-odbc-support,
+ [AS_HELP_STRING([--enable-core-odbc-support], [Compile with ODBC Support])],,[enable_core_odbc_support="no"])
+AX_LIB_ODBC
+if test "$ac_cv_found_odbc" = "yes" ; then
+ enable_core_odbc_support="yes"
+fi
+
ESL_LDFLAGS=
PLATFORM_CORE_DEPLIBS=
# tweak platform specific flags
@@ -187,7 +300,7 @@
;;
*-solaris2*)
APR_ADDTO(SWITCH_AM_CFLAGS, -DPATH_MAX=2048)
- APR_ADDTO(ESL_LDFLAGS, -lnsl)
+ APR_ADDTO(ESL_LDFLAGS, -lnsl -lsocket)
;;
*bsd*)
APR_ADDTO(SWITCH_AM_CFLAGS, -I/usr/local/include)
@@ -203,6 +316,7 @@
AC_SUBST(PLATFORM_CORE_DEPLIBS)
AC_SUBST(SOLINK)
AC_SUBST(DYNAMIC_LIB_EXTEN)
+AC_SUBST(LIBTOOL_LIB_EXTEN)
# Checks for header files.
AC_HEADER_DIRENT
@@ -229,7 +343,7 @@
AC_FUNC_MALLOC
AC_TYPE_SIGNAL
AC_FUNC_STRFTIME
-AC_CHECK_FUNCS([gethostname vasprintf mmap mlock mlockall usleep])
+AC_CHECK_FUNCS([gethostname vasprintf mmap mlock mlockall usleep getifaddrs])
AC_CHECK_FUNCS([sched_setscheduler setpriority setrlimit setgroups initgroups])
AC_CHECK_FUNCS([wcsncmp setgroups asprintf setenv pselect gettimeofday localtime_r gmtime_r strcasecmp stricmp _stricmp])
@@ -237,6 +351,14 @@
AC_CHECK_LIB(rt, clock_nanosleep, [AC_DEFINE(HAVE_CLOCK_NANOSLEEP, 1, [Define if you have clock_nanosleep()])])
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket))
+AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[
+#include <sys/types.h>
+#include <time.h>])
+
+AC_CHECK_MEMBERS([struct tm.tm_zone],,,[
+#include <sys/types.h>
+#include <time.h>])
+
AC_CHECK_DECL([RLIMIT_MEMLOCK],
[AC_DEFINE([HAVE_RLIMIT_MEMLOCK],[1],[RLIMIT_MEMLOCK constant for setrlimit])],,
[#ifdef HAVE_SYS_RESOURCE_H
@@ -365,6 +487,16 @@
uint64_t_fmt='#define SWITCH_UINT64_T_FMT "lu"'
int64_value="long"
long_value=long
+ case "$host" in
+ *-solaris2*|*apple-darwin*)
+ if test "$ac_cv_sizeof_long_long" = "8"; then
+ int64_t_fmt='#define SWITCH_INT64_T_FMT "lld"'
+ uint64_t_fmt='#define SWITCH_UINT64_T_FMT "llu"'
+ int64_value="long long"
+ long_value="long long"
+ fi
+ ;;
+ esac
elif test "$ac_cv_sizeof_long_long" = "8"; then
int64_t_fmt='#define SWITCH_INT64_T_FMT "lld"'
uint64_t_fmt='#define SWITCH_UINT64_T_FMT "llu"'
@@ -479,8 +611,6 @@
LIBCURL_CHECK_CONFIG([yes], [7.13.0], [LIBCURL_DEPS=''], [LIBCURL_DEPS='${switch_srcdir}/libs/curl/lib/libcurl.la';LIBCURL='${switch_srcdir}/libs/curl/lib/libcurl.la';LIBCURL_CPPFLAGS='-I${switch_srcdir}/libs/curl/include'])
AC_SUBST(LIBCURL_DEPS)
-AC_ARG_ENABLE(core-odbc-support,
- [AS_HELP_STRING([--enable-core-odbc-support], [Compile with ODBC Support])],,[enable_core_odbc_support="no"])
AC_ARG_ENABLE(core-libedit-support,
[AS_HELP_STRING([--disable-core-libedit-support], [Compile without libedit Support])], [enable_core_libedit_support="$enableval"], [enable_core_libedit_support="yes"])
@@ -491,8 +621,15 @@
[AC_MSG_ERROR([libtermcap, libcurses or libncurses are required!])] )] )
fi
+SAC_OPENSSL
+
+if test x$HAVE_OPENSSL = x1; then
+ openssl_CFLAGS="$openssl_CFLAGS -DHAVE_OPENSSL";
+fi
+
AX_CHECK_JAVA
+
AM_CONDITIONAL([ADD_ODBC],[test "x$enable_core_odbc_support" != "xno"])
AM_CONDITIONAL([ADD_LIBEDIT],[test "x$enable_core_libedit_support" != "xno"])
AM_CONDITIONAL([HAVE_MYSQL],[test "$found_mysql" = "yes"])
@@ -618,13 +755,16 @@
AC_MSG_WARN([python support disabled, building mod_python will fail!])
fi
+CHECK_ERLANG
+
AC_CONFIG_FILES([Makefile
src/Makefile
src/mod/Makefile
src/mod/endpoints/mod_sofia/Makefile
- src/mod/event_handlers/mod_radius_cdr/Makefile
+ src/mod/asr_tts/mod_unimrcp/Makefile
src/mod/languages/mod_java/Makefile
src/mod/languages/mod_python/Makefile
+ src/mod/event_handlers/mod_erlang_event/Makefile
src/include/switch_am_config.h
build/getsounds.sh
build/getlib.sh
@@ -641,16 +781,16 @@
#LIBS+=> core.log || error="yes";if test -n "$(VERBOSE)" -o "$$error" = "yes";then cat core.log;fi;if test "$$error" = "yes";then exit 1;fi
LIBTOOL='`if test -z "$(VERBOSE)" ; then echo $(SHELL) $(switch_builddir)/quiet_libtool ;else echo $(switch_builddir)/libtool; fi;`'
TOUCH_TARGET='if test -f "$@";then touch "$@";fi;'
-CONF_MODULES='\`grep -v "\#" $(switch_builddir)/modules.conf | sed -e "s|^.*/||" | sort | uniq \`'
-CONF_DISABLED_MODULES='\`grep "\#" $(switch_builddir)/modules.conf | sed -e "s|^.*/||" | sort | uniq \`'
-OUR_MODS='`if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods=\`for i in $$tmp_mods ; do echo $$i-all ; done \`; echo $$mods `'
-OUR_CLEAN_MODS='`if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods=\`for i in $$tmp_mods ; do echo $$i-clean ; done \`; echo $$mods `'
-OUR_INSTALL_MODS='`if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods=\`for i in $$tmp_mods ; do echo $$i-install ; done\`; echo $$mods `'
-OUR_UNINSTALL_MODS='`if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods=\`for i in $$tmp_mods ; do echo $$i-uninstall ; done\`; echo $$mods `'
-OUR_DISABLED_MODS='`tmp_mods="$(CONF_DISABLED_MODULES)"; mods=\`for i in $$tmp_mods ; do echo $$i-all ; done \`; echo $$mods `'
-OUR_DISABLED_CLEAN_MODS='`tmp_mods="$(CONF_DISABLED_MODULES)"; mods=\`for i in $$tmp_mods ; do echo $$i-clean ; done \`; echo $$mods `'
-OUR_DISABLED_INSTALL_MODS='`tmp_mods="$(CONF_DISABLED_MODULES)"; mods=\`for i in $$tmp_mods ; do echo $$i-install ; done\`; echo $$mods `'
-OUR_DISABLED_UNINSTALL_MODS='`tmp_mods="$(CONF_DISABLED_MODULES)"; mods=\`for i in $$tmp_mods ; do echo $$i-uninstall ; done\`; echo $$mods `'
+CONF_MODULES='$$(grep -v "\#" $(switch_builddir)/modules.conf | sed -e "s|^.*/||" | sort | uniq )'
+CONF_DISABLED_MODULES='$$(grep "\#" $(switch_builddir)/modules.conf | grep -v "\#\#" | sed -e "s|^.*/||" | sort | uniq )'
+OUR_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-all ; done )"; echo $$mods )'
+OUR_CLEAN_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-clean ; done )"; echo $$mods )'
+OUR_INSTALL_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-install ; done)"; echo $$mods )'
+OUR_UNINSTALL_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-uninstall ; done)"; echo $$mods )'
+OUR_DISABLED_MODS='$$(tmp_mods="$(CONF_DISABLED_MODULES)"; mods="$$(for i in $$tmp_mods ; do echo $$i-all ; done )"; echo $$mods )'
+OUR_DISABLED_CLEAN_MODS='$$(tmp_mods="$(CONF_DISABLED_MODULES)"; mods="$$(for i in $$tmp_mods ; do echo $$i-clean ; done )"; echo $$mods )'
+OUR_DISABLED_INSTALL_MODS='$$(tmp_mods="$(CONF_DISABLED_MODULES)"; mods="$$(for i in $$tmp_mods ; do echo $$i-install ; done)"; echo $$mods )'
+OUR_DISABLED_UNINSTALL_MODS='$$(tmp_mods="$(CONF_DISABLED_MODULES)"; mods="$$(for i in $$tmp_mods ; do echo $$i-uninstall ; done)"; echo $$mods )'
AM_MAKEFLAGS='"OUR_MODULES=$(OUR_MODS)" "OUR_CLEAN_MODULES=$(OUR_CLEAN_MODS)" "OUR_INSTALL_MODULES=$(OUR_INSTALL_MODS)" "OUR_UNINSTALL_MODULES=$(OUR_UNINSTALL_MODS)" "OUR_DISABLED_MODULES=$(OUR_DISABLED_MODS)" "OUR_DISABLED_CLEAN_MODULES=$(OUR_DISABLED_CLEAN_MODS)" "OUR_DISABLED_INSTALL_MODULES=$(OUR_DISABLED_INSTALL_MODS)" "OUR_DISABLED_UNINSTALL_MODULES=$(OUR_DISABLED_UNINSTALL_MODS)" `test -n "$(VERBOSE)" || echo -s`'
#AM_MAKEFLAGS='`test -n "$(VERBOSE)" || echo -s`'
@@ -672,7 +812,6 @@
# Run configure in all the subdirs
AC_CONFIG_SUBDIRS(libs/srtp)
AC_CONFIG_SUBDIRS(libs/sqlite)
-AC_CONFIG_SUBDIRS(libs/libresample)
if test "$enable_core_libedit_support" = "yes" ; then
AC_CONFIG_SUBDIRS(libs/libedit)
fi
@@ -681,7 +820,7 @@
AC_CONFIG_SUBDIRS(libs/apr)
AC_CONFIG_SUBDIRS(libs/apr-util)
AC_CONFIG_SUBDIRS(libs/voipcodecs)
-AC_CONFIG_SUBDIRS(libs/codec/ilbc)
+AC_CONFIG_SUBDIRS(libs/ilbc)
AC_CONFIG_SUBDIRS(libs/curl)
AC_CONFIG_SUBDIRS(libs/iksemel)
AC_CONFIG_SUBDIRS(libs/js/nsprpub)
@@ -692,6 +831,8 @@
AC_CONFIG_SUBDIRS(libs/speex)
AC_CONFIG_SUBDIRS(libs/portaudio)
AC_CONFIG_SUBDIRS(libs/openzap)
-AC_CHECK_LIB([tiff], [TIFFOpen], AC_CONFIG_SUBDIRS(libs/spandsp), , -lm)
+AC_CONFIG_SUBDIRS(libs/unimrcp)
+AC_CONFIG_SUBDIRS(libs/tiff-3.8.2)
+AC_CONFIG_SUBDIRS(libs/spandsp)
AC_OUTPUT
Copied: freeswitch/branches/seven/contrib (from rev 14471, freeswitch/trunk/contrib)
Property changes: freeswitch/branches/seven/contrib
Name: svn:mergeinfo
+
Copied: freeswitch/branches/seven/contrib/3c (from rev 14471, freeswitch/trunk/contrib/3c)
Copied: freeswitch/branches/seven/contrib/DelphiWorld (from rev 14471, freeswitch/trunk/contrib/DelphiWorld)
Deleted: freeswitch/branches/seven/contrib/DelphiWorld/skypiax_originator.xml
Copied: freeswitch/branches/seven/contrib/DelphiWorld/skypiax_originator.xml (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/skypiax_originator.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/DelphiWorld/skypiax_originator.xml (rev 0)
+++ freeswitch/branches/seven/contrib/DelphiWorld/skypiax_originator.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+<!-- skype_iax originator -->
+<!-- this extention will request a skype speed dial number and bridge it unstid of adding some extentions to your dialplan -->
+<!-- just place it in /prefix/conf/dialplan/default and call 2020 -->
+<include>
+<extension name="skypiax_originator">
+ <condition field="destination_number" expression="^(2020)$">
+ <action application="play_and_get_digits" data="2 5 3 7000 # conference/8000/conf-pin.wav /invalid.wav dest"/>
+<action application="sleep" data="3000"/>
+<action application="set" data="ringback=$${us-ring}"/>
+<action application="bridge" data="{absolute_codec_string=g722}skypiax/skypiax1/${dest}"/>
+ </condition>
+</extension>
+</include>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/DelphiWorld/time.xml
Copied: freeswitch/branches/seven/contrib/DelphiWorld/time.xml (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/time.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/DelphiWorld/time.xml (rev 0)
+++ freeswitch/branches/seven/contrib/DelphiWorld/time.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,11 @@
+<!-- this is a small dialplan extension that speak time if you call 2910 -->
+<include>
+ <extension name="SpeakTime">
+ <condition field="destination_number" expression="^2910$">
+<action application="set" data="actime=${strftime(%H:%M)}"/>
+<action application="set" data="tts_engine=flite"/>
+<action application="set" data="tts_voice=slt"/>
+ <action application="speak" data="Is it +${actime}"/>
+</condition>
+ </extension>
+</include>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/welcome_ivr)
Deleted: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/readme.txt
Copied: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/readme.txt (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/welcome_ivr/readme.txt) (0 => 14472)
--- freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/readme.txt (rev 0)
+++ freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/readme.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+Simple LUA IVR Sample
+
+this is a small IVR in lua using the flite TTS Engine
+modules required:
+mod_flite
+and mod_lua offcourss
+see me in the IRC Channel if any error or suggestion
+thanks to raulfragoso for the first time!
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.lua
Copied: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.lua (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/welcome_ivr/welcome.lua) (0 => 14472)
--- freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.lua (rev 0)
+++ freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.lua 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,35 @@
+session:answer();
+while (session:ready() == true) do
+session:setAutoHangup(false)
+session:set_tts_parms("flite", "kal");
+session:speak("Welcome. Welcome to the VoIp World!. this is a Blind Users Programing Community. powered by Freeswitch, the free / ultimate PBX. thank to anthm!");
+session:sleep(100);
+session:speak("please select an Action.");
+session:sleep(100);
+session:speak("to call the conference, press 1");
+session:sleep(100);
+session:speak("to call Freeswitch IVR, press 2");
+session:sleep(100);
+session:speak("to call Voice Mail, press 3");
+session:sleep(100);
+session:speak("for Music on hold, press 4");
+session:sleep(100);
+session:speak("to call me, press 0");
+session:sleep(3000);
+digits = session:getDigits(1, "", 3000);
+if (digits == "1") then
+ session:execute("transfer","3001");
+end
+if (digits == "2") then
+ session:execute("transfer","5000");
+end
+if (digits == "3") then
+ session:execute("transfer","4000");
+end
+if (digits == "4") then
+ session:execute("transfer","9999");
+end
+if (digits == "0") then
+ session:execute("transfer","voipaware@sip.voipuser.org");
+end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.xml
Copied: freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.xml (from rev 14471, freeswitch/trunk/contrib/DelphiWorld/welcome_ivr/welcome.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.xml (rev 0)
+++ freeswitch/branches/seven/contrib/DelphiWorld/welcome_ivr/welcome.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+<include>
+ <extension name="welcome_ivr">
+ <condition field="destination_number" expression="^2910$">
+<action application="lua" data="welcome.lua"/>
+ </condition>
+ </extension>
+</include>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/Phil (from rev 14471, freeswitch/trunk/contrib/Phil)
Copied: freeswitch/branches/seven/contrib/Phil/pylons (from rev 14471, freeswitch/trunk/contrib/Phil/pylons)
Deleted: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchcdr.py
Copied: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchcdr.py (from rev 14471, freeswitch/trunk/contrib/Phil/pylons/freeswitchcdr.py) (0 => 14472)
--- freeswitch/branches/seven/contrib/Phil/pylons/freeswitchcdr.py (rev 0)
+++ freeswitch/branches/seven/contrib/Phil/pylons/freeswitchcdr.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,60 @@
+import logging
+
+from freeswitch.lib.base import *
+
+
+import xml
+from xml.sax.handler import ContentHandler
+
+
+log = logging.getLogger(__name__)
+
+
+class FreeswitchcdrController(BaseController):
+
+
+ # simple method to display the uuid of a call that got terminated
+ def cdr(self):
+
+ next = 0
+ uuid = []
+
+ try:
+ cdr = request.POST.getone('cdr')
+ # needs to be casted to a string as the unicode string can't be parsed correctly by the sax parser
+ cdr = str(cdr)
+
+ cdrHandler = CDR_XML_Handler()
+ xml.sax.parseString(cdr, cdrHandler)
+ uuid = cdrHandler.uuid
+ print uuid
+
+
+ except KeyError, e:
+ print e
+ return
+
+
+
+
+class CDR_XML_Handler(ContentHandler):
+
+ def __init__(self):
+ self.uuid = []
+ self.uuidString = ""
+ self.isUuidElement = 0
+
+ def startElement(self, name, attrs):
+
+ if name == 'uuid':
+ self.isUuidElement = 1
+ uuidString = ""
+
+ def characters(self, ch):
+ if self.isUuidElement == 1:
+ self.uuidString += ch
+
+ def endElement(self, name):
+ if name == 'uuid':
+ self.isUuidElement= 0
+ self.uuid.append(self.uuidString)
Deleted: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdialplan.py
Copied: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdialplan.py (from rev 14471, freeswitch/trunk/contrib/Phil/pylons/freeswitchdialplan.py) (0 => 14472)
--- freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdialplan.py (rev 0)
+++ freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdialplan.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,154 @@
+import logging
+
+from freeswitch.lib.base import *
+
+
+
+log = logging.getLogger(__name__)
+
+class FreeswitchdialplanController(BaseController):
+
+
+
+
+ # needs to be checked what's the best return string when an error occures
+ error = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''</section>\n'''\
+ '''</document>'''
+
+
+
+ # the name forward is a bit confusing as it is actually a FS bridge
+ # the next two methods allow you to forward a single call to n number of outbound calls
+ def forwardCreate(self, number, gateway, forwardString):
+ if forwardString != '':
+ forwardString = forwardString + ','
+
+ return forwardString + '''sofia/gateway/%s/%s''' % (gateway, number)
+
+
+
+ def forwardFinishCreate(self, didNumber, forwardString):
+ return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''<context name="public">\n'''\
+ '''<extension name="extension%s">\n'''\
+ '''<condition field="destination_number" expression="^(%s)$">\n'''\
+ '''<action application="bridge" data="%s"/>\n'''\
+ '''</condition>\n'''\
+ '''</extension>\n'''\
+ '''</context>\n'''\
+ '''</section>\n'''\
+ '''</document>\n''' % (didNumber, didNumber, forwardString)
+
+
+ # bridge one inbound call with a single outbound call
+ def bridge(self, didNumber, outboundNumber, gateway):
+
+ return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''<context name="public">\n'''\
+ '''<extension name="extension%s">\n'''\
+ '''<condition field="destination_number" expression="^(%s)$">\n'''\
+ '''<action application="bridge" data="sofia/gateway/%s/%s"/>\n'''\
+ '''</condition>\n'''\
+ '''</extension>\n'''\
+ '''</context>\n'''\
+ '''</section>\n'''\
+ '''</document>\n''' % (didNumber, didNumber, gateway, outboundNumber)
+
+
+
+ def voicemail(self, didNumber, mailbox_id):
+
+ return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''<context name="public">\n'''\
+ '''<extension name="voicemail%s">\n'''\
+ '''<condition field="destination_number" expression="^(%s)$">\n'''\
+ '''<action application="voicemail" data="default $${domain} %s"/>\n'''\
+ '''</condition>\n'''\
+ '''</extension>\n'''\
+ '''</context>\n'''\
+ '''</section>\n'''\
+ '''</document>''' % (didNumber, didNumber, mailbox_id)
+
+ def checkVoicemail(self, didNumber, mailbox_id):
+
+ return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''<context name="public">\n'''\
+ '''<extension name="voicemail%s">\n'''\
+ '''<condition field="destination_number" expression="^(%s)$">\n'''\
+ '''<action application="voicemail" data="check default $${domain} %s"/>\n'''\
+ '''</condition>\n'''\
+ '''</extension>\n'''\
+ '''</context>\n'''\
+ '''</section>\n'''\
+ '''</document>''' % (didNumber, didNumber, mailbox_id)
+
+
+ # if you hungup the call before it has been answered a busy is issued
+ def busy(self, didNumber):
+ return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''<context name="public">\n'''\
+ '''<extension name="extension%s">\n'''\
+ '''<condition field="destination_number" expression="^(%s)$">\n'''\
+ '''<action application="hungup" data=""/>\n'''\
+ '''</condition>\n'''\
+ '''</extension>\n'''\
+ '''</context>\n'''\
+ '''</section>\n'''\
+ '''</document>\n''' % (destinationNumber, didNumber)
+
+
+
+
+ def dialplan(self):
+
+ action = "voicemail"
+
+ # replace with your sofia gateway
+ gateway = 'sipgate2'
+
+ # replace with phone numbers
+ forwards = ['the did number extension - gateway', 'the number to forward to']
+
+ # that is the username of the mailbox
+ mailbox_id = 'test'
+
+
+ didNumber = str(request.POST.getone('Caller-Destination-Number'))
+
+
+ # ------------------------------------------------------------ Forward -------------------------------------------------------
+ # if the action is forward, we forward to all numbers in forwards
+ if action == "forward":
+
+ forwardString = ''
+ for f in forwards:
+ forwardString = self.forwardCreate(f, gateway, forwardString)
+
+ return self.forwardFinishCreate(didNumber, forwardString)
+
+
+
+ elif action == "checkVoicemail":
+
+ return self.checkVoicemail(didNumber, mailbox_id)
+
+
+
+ elif action == "voicemail":
+
+ return self.voicemail(didNumber, mailbox_id)
+
+
Deleted: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdirectory.py
Copied: freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdirectory.py (from rev 14471, freeswitch/trunk/contrib/Phil/pylons/freeswitchdirectory.py) (0 => 14472)
--- freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdirectory.py (rev 0)
+++ freeswitch/branches/seven/contrib/Phil/pylons/freeswitchdirectory.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,67 @@
+import logging
+
+from freeswitch.lib.base import *
+
+
+
+
+log = logging.getLogger(__name__)
+
+class FreeswitchdirectoryController(BaseController):
+
+ bootReply = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="directory" description="arbitrary stuff here">\n'''\
+ '''</section>\n'''\
+ '''</document>'''
+
+ error = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\
+ '''</section>\n'''\
+ '''</document>'''
+
+ def user(self, didNumber, domain, mailbox_id):
+ test = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\
+ '''<document type="freeswitch/xml">\n'''\
+ '''<section name="directory" description="arbitrary stuff here">\n'''\
+ '''<domain name="%s">\n'''\
+ '''<groups>\n'''\
+ '''<group name="default">\n'''\
+ '''<users>\n'''\
+ '''<user id="%s" mailbox="%s">\n'''\
+ '''<params>\n'''\
+ '''<param name="password" value="1234"/>\n'''\
+ '''<param name="vm-password" value="0000"/>\n'''\
+ '''</params>\n'''\
+ '''<variables>\n'''\
+ '''<variable name="accountcode" value="%s"/>\n'''\
+ '''<variable name="user_context" value="default"/>\n'''\
+ '''<variable name="vm_extension" value="%s"/>\n'''\
+ '''<variable name="max_calls" value="1"/>\n'''\
+ '''<variable name="fail_over" value="415"/>\n'''\
+ '''<variable name="cringback" value="us-ring"/>\n'''\
+ '''</variables>\n'''\
+ '''</user>\n'''\
+ '''</users>\n'''\
+ '''</group>\n'''\
+ '''</groups>\n'''\
+ '''</domain>\n'''\
+ '''</section>\n'''\
+ '''</document>''' % (domain, mailbox_id, mailbox_id, mailbox_id, mailbox_id)
+
+ return test
+
+
+ # a very simple reply that creates a user for the voicemail.
+ def directory(self):
+
+ try:
+ return self.user(request.POST.getone('mailbox'), request.POST.getone('domain'), request.POST.getone('user'))
+
+ except KeyError, e:
+ pass
+
+ return self.bootReply
+
+
Copied: freeswitch/branches/seven/contrib/clubpetey (from rev 14471, freeswitch/trunk/contrib/clubpetey)
Copied: freeswitch/branches/seven/contrib/cparker (from rev 14471, freeswitch/trunk/contrib/cparker)
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius)
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/Makefile
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/Makefile (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+RADCLIENT_VERSION=1.1.6
+RADCLIENT=freeradius-client-$(RADCLIENT_VERSION)
+RADCLIENT_DIR=$(switch_srcdir)/libs/$(RADCLIENT)
+RADCLIENT_LIBDIR=$(RADCLIENT_DIR)/lib
+RADCLIENT_LA=${RADCLIENT_LIBDIR}/libfreeradius-client.la
+
+LOCAL_CFLAGS=-I$(RADCLIENT_DIR)/include
+LOCAL_LIBADD=$(RADCLIENT_LA)
+
+BASE=../../..
+include $(BASE)/build/modmake.rules
+
+$(RADCLIENT_DIR):
+ $(GETLIB) $(RADCLIENT).tar.gz
+
+$(RADCLIENT_DIR)/Makefile: $(RADCLIENT_DIR)
+ cd $(RADCLIENT_DIR) && ./configure --disable-shared --with-pic
+ $(TOUCH_TARGET)
+
+$(RADCLIENT_LA): $(RADCLIENT_DIR)/Makefile
+ cd $(RADCLIENT_DIR) && CFLAGS=$(CFLAGS) $(MAKE)
+ $(TOUCH_TARGET)
+
+
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/README
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/README (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/README (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+THIS MODULE IS HIGHLY EXPERIMENTAL. USE MAY RESULT IN HAIR LOSS, DISMEMBERMENT,
+OR EVEN DEATH.
+
+
+That out of the way, it is a way to provide a RADIUS interface to perform
+authentication and authorization functionality to FreeSWITCH.
+
+It uses the FreeRADIUS Client Library, which is part of the FreeRADIUS project.
+The version used to create/test this library is the tagged release 1.1.6.
+
+In order to use this module, you will need to edit the top level 'configure.in'
+as well as 'modules.conf'.
+
+More information/details can be found on the wiki:
+
+ http://wiki.freeswitch.org/wiki/Mod_xml_radius
+
+Questions/comments/suggestions, please find 's3g_fault' on IRC.
+
+
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf)
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/README
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/README (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/README (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+Install/copy these into /usr/local/freeswitch/conf/autoload_configs
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/dictionary
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/dictionary (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf/dictionary) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/dictionary (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/dictionary 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,381 @@
+#
+# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl
+#
+# This file contains dictionary translations for parsing
+# requests and generating responses. All transactions are
+# composed of Attribute/Value Pairs. The value of each attribute
+# is specified as one of 4 data types. Valid data types are:
+#
+# string - 0-253 octets
+# ipaddr - 4 octets in network byte order
+# integer - 32 bit value in big endian order (high byte first)
+# date - 32 bit value in big endian order - seconds since
+# 00:00:00 GMT, Jan. 1, 1970
+#
+# Enumerated values are stored in the user file with dictionary
+# VALUE translations for easy administration.
+#
+# Example:
+#
+# ATTRIBUTE VALUE
+# --------------- -----
+# Framed-Protocol = PPP
+# 7 = 1 (integer encoding)
+#
+
+#
+# Following are the proper new names. Use these.
+#
+ATTRIBUTE User-Name 1 string
+ATTRIBUTE Password 2 string
+ATTRIBUTE CHAP-Password 3 string
+ATTRIBUTE NAS-IP-Address 4 ipaddr
+ATTRIBUTE NAS-Port-Id 5 integer
+ATTRIBUTE Service-Type 6 integer
+ATTRIBUTE Framed-Protocol 7 integer
+ATTRIBUTE Framed-IP-Address 8 ipaddr
+ATTRIBUTE Framed-IP-Netmask 9 ipaddr
+ATTRIBUTE Framed-Routing 10 integer
+ATTRIBUTE Filter-Id 11 string
+ATTRIBUTE Framed-MTU 12 integer
+ATTRIBUTE Framed-Compression 13 integer
+ATTRIBUTE Login-IP-Host 14 ipaddr
+ATTRIBUTE Login-Service 15 integer
+ATTRIBUTE Login-TCP-Port 16 integer
+ATTRIBUTE Reply-Message 18 string
+ATTRIBUTE Callback-Number 19 string
+ATTRIBUTE Callback-Id 20 string
+ATTRIBUTE Framed-Route 22 string
+ATTRIBUTE Framed-IPX-Network 23 ipaddr
+ATTRIBUTE State 24 string
+ATTRIBUTE Class 25 string
+ATTRIBUTE Vendor-Specific 26 string
+ATTRIBUTE Session-Timeout 27 integer
+ATTRIBUTE Idle-Timeout 28 integer
+ATTRIBUTE Termination-Action 29 integer
+ATTRIBUTE Called-Station-Id 30 string
+ATTRIBUTE Calling-Station-Id 31 string
+ATTRIBUTE NAS-Identifier 32 string
+ATTRIBUTE Proxy-State 33 string
+ATTRIBUTE Login-LAT-Service 34 string
+ATTRIBUTE Login-LAT-Node 35 string
+ATTRIBUTE Login-LAT-Group 36 string
+ATTRIBUTE Framed-AppleTalk-Link 37 integer
+ATTRIBUTE Framed-AppleTalk-Network 38 integer
+ATTRIBUTE Framed-AppleTalk-Zone 39 string
+ATTRIBUTE Acct-Status-Type 40 integer
+ATTRIBUTE Acct-Delay-Time 41 integer
+ATTRIBUTE Acct-Input-Octets 42 integer
+ATTRIBUTE Acct-Output-Octets 43 integer
+ATTRIBUTE Acct-Session-Id 44 string
+ATTRIBUTE Acct-Authentic 45 integer
+ATTRIBUTE Acct-Session-Time 46 integer
+ATTRIBUTE Acct-Input-Packets 47 integer
+ATTRIBUTE Acct-Output-Packets 48 integer
+ATTRIBUTE Acct-Terminate-Cause 49 integer
+ATTRIBUTE Acct-Multi-Session-Id 50 string
+ATTRIBUTE Acct-Link-Count 51 integer
+ATTRIBUTE Event-Timestamp 55 integer
+ATTRIBUTE CHAP-Challenge 60 string
+ATTRIBUTE NAS-Port-Type 61 integer
+ATTRIBUTE Port-Limit 62 integer
+ATTRIBUTE Login-LAT-Port 63 integer
+ATTRIBUTE Connect-Info 77 string
+
+#
+# RFC3162 IPv6 attributes
+#
+ATTRIBUTE NAS-IPv6-Address 95 string
+ATTRIBUTE Framed-Interface-Id 96 string
+ATTRIBUTE Framed-IPv6-Prefix 97 string
+ATTRIBUTE Login-IPv6-Host 98 string
+ATTRIBUTE Framed-IPv6-Route 99 string
+ATTRIBUTE Framed-IPv6-Pool 100 string
+
+ATTRIBUTE Digest-Response 206 string
+ATTRIBUTE Digest-Attributes 207 string # stupid format
+
+#define PW_DIGEST_REALM 1063 /* string */
+#define PW_DIGEST_NONCE 1064 /* string */
+#define PW_DIGEST_METHOD 1065 /* string */
+#define PW_DIGEST_URI 1066 /* string */
+#define PW_DIGEST_QOP 1067 /* string */
+#define PW_DIGEST_ALGORITHM 1068 /* string */
+#define PW_DIGEST_BODY_DIGEST 1069 /* string */
+#define PW_DIGEST_CNONCE 1070 /* string */
+#define PW_DIGEST_NONCE_COUNT 1071 /* string */
+#define PW_DIGEST_USER_NAME 1072 /* string */
+
+ATTRIBUTE Digest-Realm 1063 string
+ATTRIBUTE Digest-Nonce 1064 string
+ATTRIBUTE Digest-Method 1065 string
+ATTRIBUTE Digest-URI 1066 string
+ATTRIBUTE Digest-QOP 1067 string
+ATTRIBUTE Digest-Algorithm 1068 string
+ATTRIBUTE Digest-Body-Digest 1069 string
+ATTRIBUTE Digest-CNonce 1070 string
+ATTRIBUTE Digest-Nonce-Count 1071 string
+ATTRIBUTE Digest-User-Name 1072 string
+
+#
+# Experimental Non Protocol Attributes used by Cistron-Radiusd
+#
+ATTRIBUTE Huntgroup-Name 221 string
+ATTRIBUTE User-Category 1029 string
+ATTRIBUTE Group-Name 1030 string
+ATTRIBUTE Simultaneous-Use 1034 integer
+ATTRIBUTE Strip-User-Name 1035 integer
+ATTRIBUTE Fall-Through 1036 integer
+ATTRIBUTE Add-Port-To-IP-Address 1037 integer
+ATTRIBUTE Exec-Program 1038 string
+ATTRIBUTE Exec-Program-Wait 1039 string
+ATTRIBUTE Hint 1040 string
+
+#
+# Non-Protocol Attributes
+# These attributes are used internally by the server
+#
+ATTRIBUTE Expiration 21 date
+ATTRIBUTE Auth-Type 1000 integer
+ATTRIBUTE Menu 1001 string
+ATTRIBUTE Termination-Menu 1002 string
+ATTRIBUTE Prefix 1003 string
+ATTRIBUTE Suffix 1004 string
+ATTRIBUTE Group 1005 string
+ATTRIBUTE Crypt-Password 1006 string
+ATTRIBUTE Connect-Rate 1007 integer
+
+#
+# Integer Translations
+#
+
+# User Types
+
+VALUE Service-Type Login-User 1
+VALUE Service-Type Framed-User 2
+VALUE Service-Type Callback-Login-User 3
+VALUE Service-Type Callback-Framed-User 4
+VALUE Service-Type Outbound-User 5
+VALUE Service-Type Administrative-User 6
+VALUE Service-Type NAS-Prompt-User 7
+
+# Framed Protocols
+
+VALUE Framed-Protocol PPP 1
+VALUE Framed-Protocol SLIP 2
+
+# Framed Routing Values
+
+VALUE Framed-Routing None 0
+VALUE Framed-Routing Broadcast 1
+VALUE Framed-Routing Listen 2
+VALUE Framed-Routing Broadcast-Listen 3
+
+# Framed Compression Types
+
+VALUE Framed-Compression None 0
+VALUE Framed-Compression Van-Jacobson-TCP-IP 1
+
+# Login Services
+
+VALUE Login-Service Telnet 0
+VALUE Login-Service Rlogin 1
+VALUE Login-Service TCP-Clear 2
+VALUE Login-Service PortMaster 3
+
+# Status Types
+
+VALUE Acct-Status-Type Start 1
+VALUE Acct-Status-Type Stop 2
+VALUE Acct-Status-Type Alive 3
+VALUE Acct-Status-Type Accounting-On 7
+VALUE Acct-Status-Type Accounting-Off 8
+
+# Authentication Types
+
+VALUE Acct-Authentic RADIUS 1
+VALUE Acct-Authentic Local 2
+VALUE Acct-Authentic PowerLink128 100
+
+# Termination Options
+
+VALUE Termination-Action Default 0
+VALUE Termination-Action RADIUS-Request 1
+
+# NAS Port Types, available in 3.3.1 and later
+
+VALUE NAS-Port-Type Async 0
+VALUE NAS-Port-Type Sync 1
+VALUE NAS-Port-Type ISDN 2
+VALUE NAS-Port-Type ISDN-V120 3
+VALUE NAS-Port-Type ISDN-V110 4
+
+# Acct Terminate Causes, available in 3.3.2 and later
+
+VALUE Acct-Terminate-Cause User-Request 1
+VALUE Acct-Terminate-Cause Lost-Carrier 2
+VALUE Acct-Terminate-Cause Lost-Service 3
+VALUE Acct-Terminate-Cause Idle-Timeout 4
+VALUE Acct-Terminate-Cause Session-Timeout 5
+VALUE Acct-Terminate-Cause Admin-Reset 6
+VALUE Acct-Terminate-Cause Admin-Reboot 7
+VALUE Acct-Terminate-Cause Port-Error 8
+VALUE Acct-Terminate-Cause NAS-Error 9
+VALUE Acct-Terminate-Cause NAS-Request 10
+VALUE Acct-Terminate-Cause NAS-Reboot 11
+VALUE Acct-Terminate-Cause Port-Unneeded 12
+VALUE Acct-Terminate-Cause Port-Preempted 13
+VALUE Acct-Terminate-Cause Port-Suspended 14
+VALUE Acct-Terminate-Cause Service-Unavailable 15
+VALUE Acct-Terminate-Cause Callback 16
+VALUE Acct-Terminate-Cause User-Error 17
+VALUE Acct-Terminate-Cause Host-Request 18
+
+#
+# Non-Protocol Integer Translations
+#
+
+VALUE Auth-Type Local 0
+VALUE Auth-Type System 1
+VALUE Auth-Type SecurID 2
+VALUE Auth-Type Crypt-Local 3
+VALUE Auth-Type Reject 4
+
+#
+# Cistron extensions
+#
+VALUE Auth-Type Pam 253
+VALUE Auth-Type Accept 254
+
+#
+# Experimental Non-Protocol Integer Translations for Cistron-Radiusd
+#
+VALUE Fall-Through No 0
+VALUE Fall-Through Yes 1
+VALUE Add-Port-To-IP-Address No 0
+VALUE Add-Port-To-IP-Address Yes 1
+
+#
+# Configuration Values
+# uncomment these two lines to turn account expiration on
+#
+
+#VALUE Server-Config Password-Expiration 30
+#VALUE Server-Config Password-Warning 5
+
+# -*- text -*-
+#
+# dictionary.freeswitch
+#
+# cparker@segv.org
+#
+# Version: $Id: $
+#
+
+VENDOR Freeswitch 27880
+
+#
+# Standard attribute
+#
+BEGIN-VENDOR Freeswitch
+
+ATTRIBUTE Freeswitch-AVPair 1 string Freeswitch
+ATTRIBUTE Freeswitch-CLID 2 string Freeswitch
+ATTRIBUTE Freeswitch-Dialplan 3 string Freeswitch
+ATTRIBUTE Freeswitch-Src 4 string Freeswitch
+ATTRIBUTE Freeswitch-Dst 5 string Freeswitch
+ATTRIBUTE Freeswitch-Src-Channel 6 string Freeswitch
+ATTRIBUTE Freeswitch-Dst-Channel 7 string Freeswitch
+ATTRIBUTE Freeswitch-Ani 8 string Freeswitch
+ATTRIBUTE Freeswitch-Aniii 9 string Freeswitch
+ATTRIBUTE Freeswitch-Lastapp 10 string Freeswitch
+ATTRIBUTE Freeswitch-Lastdata 11 string Freeswitch
+ATTRIBUTE Freeswitch-Disposition 12 string Freeswitch
+ATTRIBUTE Freeswitch-Hangupcause 13 integer Freeswitch
+ATTRIBUTE Freeswitch-Billusec 15 integer Freeswitch
+ATTRIBUTE Freeswitch-AMAFlags 16 integer Freeswitch
+ATTRIBUTE Freeswitch-RDNIS 17 string Freeswitch
+ATTRIBUTE Freeswitch-Context 18 string Freeswitch
+ATTRIBUTE Freeswitch-Source 19 string Freeswitch
+ATTRIBUTE Freeswitch-Callstartdate 20 string Freeswitch
+ATTRIBUTE Freeswitch-Callanswerdate 21 string Freeswitch
+ATTRIBUTE Freeswitch-Calltransferdate 22 string Freeswitch
+ATTRIBUTE Freeswitch-Callenddate 23 string Freeswitch
+
+#
+# Freeswitch-Hangupcause
+#
+VALUE Freeswitch-Hangupcause None 0
+VALUE Freeswitch-Hangupcause Unallocated-Number 1
+VALUE Freeswitch-Hangupcause No-Route-Transit-Net 2
+VALUE Freeswitch-Hangupcause No-Route-Destination 3
+VALUE Freeswitch-Hangupcause Channel-Unacceptable 6
+VALUE Freeswitch-Hangupcause Call-Awarded-Delivery 7
+VALUE Freeswitch-Hangupcause Normal-Clearing 16
+VALUE Freeswitch-Hangupcause User-Busy 17
+VALUE Freeswitch-Hangupcause No-User-Response 18
+VALUE Freeswitch-Hangupcause No-Answer 19
+VALUE Freeswitch-Hangupcause Subscriber-Absent 20
+VALUE Freeswitch-Hangupcause Call-Rejected 21
+VALUE Freeswitch-Hangupcause Number-Changed 22
+VALUE Freeswitch-Hangupcause Redirecto-To-New-Destination 23
+VALUE Freeswitch-Hangupcause Exchange-Routing-Error 25
+VALUE Freeswitch-Hangupcause Destination-Out-Of-Order 27
+VALUE Freeswitch-Hangupcause Invalid-Number-Format 28
+VALUE Freeswitch-Hangupcause Facility-Rejected 29
+VALUE Freeswitch-Hangupcause Response-To-Status-Enquiry 30
+VALUE Freeswitch-Hangupcause Normal-Unspecified 31
+VALUE Freeswitch-Hangupcause Normal-Circuit-Congestion 34
+VALUE Freeswitch-Hangupcause Network-Out-Of-Order 38
+VALUE Freeswitch-Hangupcause Normal-Temporary-Failure 41
+VALUE Freeswitch-Hangupcause Switch-Congestion 42
+VALUE Freeswitch-Hangupcause Access-Info-Discarded 43
+VALUE Freeswitch-Hangupcause Requested-Chan-Unavail 44
+VALUE Freeswitch-Hangupcause Pre-Empted 45
+VALUE Freeswitch-Hangupcause Facility-Not-Subscribed 50
+VALUE Freeswitch-Hangupcause Outgoing-Call-Barred 52
+VALUE Freeswitch-Hangupcause Incoming-Call-Barred 54
+VALUE Freeswitch-Hangupcause Bearercapability-Notauth 57
+VALUE Freeswitch-Hangupcause Bearercapability-Notavail 58
+VALUE Freeswitch-Hangupcause Service-Unavailable 63
+VALUE Freeswitch-Hangupcause Bearercapability-Notimpl 65
+VALUE Freeswitch-Hangupcause Chan-Not-Implemented 66
+VALUE Freeswitch-Hangupcause Facility-Not-Implemented 69
+VALUE Freeswitch-Hangupcause Service-Not-Implemented 79
+VALUE Freeswitch-Hangupcause Invalid-Call-Reference 81
+VALUE Freeswitch-Hangupcause Incompatible-Destination 88
+VALUE Freeswitch-Hangupcause Invalid-Msg-Unspecified 95
+VALUE Freeswitch-Hangupcause Mandatory-IE-Missing 96
+VALUE Freeswitch-Hangupcause Message-Type-Nonexist 97
+VALUE Freeswitch-Hangupcause Wrong-Message 98
+VALUE Freeswitch-Hangupcause IE-Nonexist 99
+VALUE Freeswitch-Hangupcause Invalid-IE-Contents 100
+VALUE Freeswitch-Hangupcause Wrong-Call-State 101
+VALUE Freeswitch-Hangupcause Recovery-On-Timer-Expire 102
+VALUE Freeswitch-Hangupcause Mandatory-IE-Length-Error 103
+VALUE Freeswitch-Hangupcause Protocol-Error 111
+VALUE Freeswitch-Hangupcause Interworking 127
+VALUE Freeswitch-Hangupcause Success 142
+VALUE Freeswitch-Hangupcause Originator-Cancel 487
+VALUE Freeswitch-Hangupcause Crash 500
+VALUE Freeswitch-Hangupcause System-Shutdown 501
+VALUE Freeswitch-Hangupcause Lose-Race 502
+VALUE Freeswitch-Hangupcause Manager-Request 503
+VALUE Freeswitch-Hangupcause Blind-Transfer 600
+VALUE Freeswitch-Hangupcause Attended-Transfer 601
+VALUE Freeswitch-Hangupcause Allotted-Timeout 602
+VALUE Freeswitch-Hangupcause User-Challenge 603
+VALUE Freeswitch-Hangupcause Media-Timeout 604
+VALUE Freeswitch-Hangupcause Picked-Off 605
+VALUE Freeswitch-Hangupcause User-Not-Registered 606
+
+#
+#
+#
+
+END-VENDOR Freeswitch
+
+#ATTRIBUTE Digest-Response 206 string
+#ATTRIBUTE Digest-Attributes 207 octets # stupid format
+
+
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/mod_xml_radius.conf.xml
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/mod_xml_radius.conf.xml (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf/mod_xml_radius.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/mod_xml_radius.conf.xml (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/mod_xml_radius.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,48 @@
+<configuration name="mod_xml_radius.conf" description="XML RADIUS Configuration">
+ <bindings>
+ <binding name="directory"/>
+ <!-- <binding name="dialplan"/> -->
+ </bindings>
+ <settings>
+ <!-- location of the radius dictionary file -->
+ <param name="dictionary" value="/usr/local/freeswitch/conf/radius/dictionary"/>
+ <!-- location of the radius sequence file -->
+ <param name="seqfile" value="/var/run/radius_auth.seq"/>
+
+ <!-- accounting servers, up to 8 allowed -->
+ <!-- value is "host:port:secret", port is optional -->
+ <!-- use IP ADDRESSES, not hostnames -->
+ <param name="authserver" value="127.0.0.1:1812:testing123"/>
+ <!--<param name="authserver" value="10.0.0.254:1813:testing123"/> -->
+ <!--<param name="authserver" value="192.168.10.10:1813:testing123"/> -->
+
+ <!-- number of retries for each server -->
+ <param name="radius_retries" value="3"/>
+ <!-- number of seconds to wait between retries -->
+ <param name="radius_timeout" value="5"/>
+ <!-- The length of time in seconds that we skip a nonresponsive RADIUS
+ server for transaction requests. Server(s) being in the "dead" state
+ are tried only after all other non-dead servers have been tried and
+ failed or timeouted. The deadtime interval starts when the server
+ does not respond to an authentication/accounting request transmissions.
+ When the interval expires, the "dead" server would be re-tried again,
+ and if it's still down then it will be considered "dead" for another
+ such interval and so on. This option is no-op if there is only one
+ server in the list. Set to 0 in order to disable the feature. -->
+ <param name="radius_deadtime" value="0"/>
+ </settings>
+ <templates>
+
+ <template name="not_found">
+ <document type="freeswitch/xml">
+ <section name="result">
+ <result status="not found"/>
+ </section>
+ </document>
+ </template>
+
+ <X-PRE-PROCESS cmd="include" data="xml_radius_templates/*.xml"/>
+
+ </templates>
+</configuration>
+
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/xml_radius_templates (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf/xml_radius_templates)
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/xml_radius_templates/directory.xml
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/xml_radius_templates/directory.xml (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/conf/xml_radius_templates/directory.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/xml_radius_templates/directory.xml (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/conf/xml_radius_templates/directory.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,25 @@
+<include>
+ <template name="directory">
+ <document type="freeswitch/xml">
+ <section name="directory" description="arbitrary stuff here">
+<domain name="${domain}">
+ <groups>
+ <group name="default">
+ <users>
+ <user id="${user}" number-alias="${radius_alias}">
+ <params>
+ <param name="vm-password" value="${radius_vm_pass}"/>
+ </params>
+ <variables>
+ <variable name="international" value="${radius_international}"/>
+ <variable name="usenat" value="${radius_natuser}"/>
+ </variables>
+ </user>
+ </users>
+ </group>
+ </groups>
+ </domain>
+ </section>
+ </document>
+ </template>
+</include>
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.c
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.c (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/mod_xml_radius.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.c (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,634 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Chris Parker <cparker@segv.org>
+ *
+ * mod_xml_radius.c -- use radius to realtime create xml directory, dialplan bindings
+ *
+ */
+#include <switch.h>
+#include <sys/stat.h>
+#include <freeradius-client.h>
+#include "mod_xml_radius.h"
+
+typedef enum {
+ XML_RADIUS_DIRECTORY = 0,
+ XML_RADIUS_DIALPLAN = 0,
+} xml_radius_query_type_t;
+
+#define XML_RADIUS_SYNTAX "[debug_on|debug_off]"
+
+static char cf[] = "mod_xml_radius.conf";
+static char my_dictionary[PATH_MAX];
+static char my_seqfile[PATH_MAX];
+static char *my_deadtime; /* 0 */
+static char *my_timeout; /* 5 */
+static char *my_retries; /* 3 */
+static char my_servers[SERVER_MAX][255];
+
+static struct {
+ int shutdown;
+ switch_memory_pool_t *pool;
+ switch_mutex_t *mutex;
+ switch_thread_rwlock_t *rwlock;
+ switch_xml_t templates_tag;
+} globals;
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load);
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_radius_shutdown);
+SWITCH_MODULE_DEFINITION(mod_xml_radius, mod_xml_radius_load, mod_xml_radius_shutdown, NULL);
+
+static switch_bool_t debug = SWITCH_FALSE;
+
+#if 0
+static int logi = 0;
+static void logger(char *str)
+{
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG[%i] [%s]\n", ++logi, str);
+}
+#endif
+
+
+static rc_handle *my_radius_init(void)
+{
+ int i = 0;
+ rc_handle *rad_config;
+
+ rad_config = rc_new();
+
+ if (rad_config == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Error initializing rc_handle!\n");
+ return NULL;
+ }
+
+ rad_config = rc_config_init(rad_config);
+
+ if (rad_config == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "error initializing radius config!\n");
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ /* Some hardcoded ( for now ) defaults needed to initialize radius */
+ if (rc_add_config(rad_config, "auth_order", "radius", "mod_xml_radius.c", 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting auth_order = radius failed\n");
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ if (rc_add_config(rad_config, "seqfile", my_seqfile, "mod_xml_radius.c", 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting seqfile = %s failed\n", my_seqfile);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+
+ /* Add the module configs to initialize rad_config */
+
+ for (i = 0; i < SERVER_MAX && my_servers[i][0] != '\0'; i++) {
+ if (rc_add_config(rad_config, "authserver", my_servers[i], cf, 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting authserver = %s failed\n", my_servers[i]);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+ }
+
+ if (rc_add_config(rad_config, "dictionary", my_dictionary, cf, 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed setting dictionary = %s failed\n", my_dictionary);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ if (rc_add_config(rad_config, "radius_deadtime", my_deadtime, cf, 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting radius_deadtime = %s failed\n", my_deadtime);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ if (rc_add_config(rad_config, "radius_timeout", my_timeout, cf, 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting radius_timeout = %s failed\n", my_timeout);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ if (rc_add_config(rad_config, "radius_retries", my_retries, cf, 0) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting radius_retries = %s failed\n", my_retries);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ /* Read the dictionary file(s) */
+ if (rc_read_dictionary(rad_config, rc_conf_str(rad_config, "dictionary")) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "reading dictionary file(s): %s\n", my_dictionary);
+ rc_destroy(rad_config);
+ return NULL;
+ }
+
+ return rad_config;
+}
+
+
+SWITCH_STANDARD_API(xml_radius_function)
+{
+ if (session) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if (switch_strlen_zero(cmd)) {
+ goto usage;
+ }
+
+ if (!strcasecmp(cmd, "debug_on")) {
+ debug = SWITCH_TRUE;
+ } else if (!strcasecmp(cmd, "debug_off")) {
+ debug = SWITCH_FALSE;
+ } else {
+ goto usage;
+ }
+
+ stream->write_function(stream, "OK\n");
+ return SWITCH_STATUS_SUCCESS;
+
+ usage:
+ stream->write_function(stream, "USAGE: %s\n", XML_RADIUS_SYNTAX);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+typedef struct xml_binding {
+ char *bindings;
+} xml_binding_t;
+
+
+static switch_status_t xml_radius_expand_tag(switch_xml_t xml_in, switch_event_t *params, switch_xml_t xml_out, int *off)
+{
+ switch_xml_t xml_in_tmp = NULL;
+ int i;
+
+ if (switch_strlen_zero(xml_out->name)) {
+ xml_out->name = strdup(xml_in->name);
+ } else if (!(xml_out = switch_xml_add_child_d(xml_out, xml_in->name, *off++))) {
+ return SWITCH_STATUS_FALSE;
+ }
+ for (i = 0; xml_in->attr[i]; i+=2) {
+ char *tmp_attr;
+ tmp_attr = switch_event_expand_headers(params, xml_in->attr[i+1]);
+ switch_xml_set_attr(xml_out, xml_in->attr[i], tmp_attr);
+ }
+ for (xml_in_tmp = xml_in->child; xml_in_tmp; xml_in_tmp = xml_in_tmp->ordered) {
+ xml_radius_expand_tag(xml_in_tmp, params, xml_out, off);
+ }
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+static switch_status_t xml_radius_expand_template(char *template_name, switch_event_t *params, switch_xml_t xml_out, int *off)
+{
+ switch_xml_t template_tag = NULL, sub_tag = NULL;
+
+ for (template_tag = switch_xml_child(globals.templates_tag, "template"); template_tag; template_tag = template_tag->next) {
+ char *template_tag_name = (char*) switch_xml_attr_soft(template_tag, "name");
+ if (!strcmp(template_tag_name, template_name)) {
+ for (sub_tag = template_tag->child; sub_tag; sub_tag = sub_tag->ordered) {
+ xml_radius_expand_tag(sub_tag, params, xml_out, off);
+ }
+ return SWITCH_STATUS_SUCCESS;
+ }
+ }
+ return SWITCH_STATUS_FALSE;
+}
+
+
+
+static switch_xml_t xml_radius_search(const char *section, const char *tag_name, const char *key_name, const char *key_value, switch_event_t *params, void *user_data)
+{
+ xml_binding_t *binding = (xml_binding_t *) user_data;
+ switch_event_header_t *hi;
+ xml_radius_query_type_t query_type;
+ switch_event_t *rad_event;
+ rc_handle *rad_config;
+ VALUE_PAIR *send = NULL;
+ VALUE_PAIR *received = NULL;
+ VALUE_PAIR *vp = NULL;
+ char msg[4096];
+ uint32_t client_port = 0;
+ char *uuid_str, *user_name, *digest_response, *digest_realm, *digest_nonce, *digest_cnonce,
+ *digest_method, *digest_uri, *digest_algorithm, *digest_username, *digest_qop, *digest_nc ;
+
+ switch_xml_t xml_out = NULL;
+ if ((xml_out = switch_xml_new(""))) {
+ //switch_xml_set_attr_d(xml_out, "document type", "freeswitch/xml");
+ }
+
+ /*int off = 0; */
+ int off = 0, ret = 1;
+
+ if (debug) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DEBUG in xml_radius_search Section: %s, Tag: %s, Key: %s, Value: %s\n", section, tag_name, key_name, key_value);
+ }
+
+ if (!binding) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No bindings... sorry bud returning now\n");
+ return NULL;
+ }
+ if (!strcmp(section, "directory")) {
+ query_type = XML_RADIUS_DIRECTORY;
+ } else if (!strcmp(section, "dialplan")) {
+ query_type = XML_RADIUS_DIALPLAN;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid section: %s\n", section);
+ return NULL;
+ }
+
+ if (params) {
+ if ((hi = params->headers)) {
+ for (; hi; hi = hi->next) {
+ if (debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG in xml_radius_search, header [%s]=[%s]\n", hi->name, hi->value);
+ }
+ }
+ //xml_odbc_render_template(globals.template, params, xml_out, &off); // TODO globals.template should be replace with something specific for this section
+ }
+ } else {
+ goto cleanup;
+ }
+
+ uuid_str = switch_event_get_header(params, "Core-UUID");
+ digest_response = switch_event_get_header(params, "sip_auth_response");
+ digest_realm = switch_event_get_header(params, "sip_auth_realm");
+ digest_nonce = switch_event_get_header(params, "sip_auth_nonce");
+ digest_cnonce = switch_event_get_header(params, "sip_auth_cnonce");
+ digest_method = switch_event_get_header(params, "sip_auth_method");
+ digest_uri = switch_event_get_header(params, "sip_auth_uri");
+ digest_algorithm = switch_event_get_header(params, "sip_auth_algorithm");
+ digest_username = switch_event_get_header(params, "sip_auth_username");
+ digest_qop = switch_event_get_header(params, "sip_auth_qop");
+ digest_nc = switch_event_get_header(params, "sip_auth_nc");
+
+ if(digest_algorithm == NULL) {
+ digest_algorithm = switch_mprintf("MD5");
+ }
+
+ if( (uuid_str == NULL) ||
+ (digest_response == NULL) ||
+ (digest_realm == NULL) ||
+ (digest_nonce == NULL) ||
+ (digest_method == NULL) ||
+ (digest_uri == NULL) ||
+ (digest_algorithm == NULL) ||
+ (digest_username == NULL)
+ ) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "[mod_xml_radius] Insufficient headers to perform digest auth\n");
+ /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s:%s:%s:%s:%s:%s:%s:%s", uuid_str, digest_response, digest_realm, digest_nonce, digest_method, digest_uri, digest_algorithm, digest_username); */
+ return NULL;
+ }
+
+
+ user_name = switch_mprintf("%s@%s", digest_username, digest_realm);
+
+ /* Initialize RADIUS and add attributes to the AUTH REQUEST packet */
+
+ if(switch_event_dup(&rad_event, params) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed creating radius event.\n");
+ return NULL;
+ }
+
+ switch_thread_rwlock_rdlock(globals.rwlock);
+
+ rad_config = my_radius_init();
+
+ if (rad_config == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Error initializing radius\n");
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_ACCT_SESSION_ID, uuid_str, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Acct-Session-ID: %s\n", uuid_str);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_USER_NAME, user_name, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding User-Name: %s\n", user_name);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_RESPONSE, digest_response, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Response: %s\n", digest_response);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_REALM, digest_realm, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Realm: %s\n", digest_realm);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_NONCE, digest_nonce, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Nonce: %s\n", digest_nonce);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if(digest_cnonce != NULL) {
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_CNONCE, digest_cnonce, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest CNonce: %s\n", digest_cnonce);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Missing Digest CNonce\n");
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_METHOD, digest_method, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Method: %s\n", digest_method);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_URI, digest_uri, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest URI: %s\n", digest_uri);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_ALGORITHM, digest_algorithm, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Algorithm: %s\n", digest_algorithm);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_USER_NAME, digest_username, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Username: %s\n", digest_username);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+
+ if(digest_qop != NULL) {
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_QOP, digest_qop, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest QOP: %s\n", digest_qop);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Missing Digest QOP.\n");
+ }
+
+
+ if(digest_nc != NULL) {
+ if (rc_avpair_add(rad_config, &send, PW_DIGEST_NONCE_COUNT, digest_nc, -1, 0) == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed adding Digest Nonce Counce: %s\n", digest_nc);
+ rc_destroy(rad_config);
+ goto cleanup;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Missing Nonce Count.\n");
+ }
+
+ /* SEND IT! */
+
+ if(rc_auth(rad_config, client_port, send, &received, msg) == OK_RC) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Auth Success.\n");
+
+ char name[2048], value[2048]; /* more than enough for radius attribute */
+ char *split[2];
+ /* walk the received radius value-pairs and print them out */
+ vp = received;
+ while(vp) {
+ strncpy(name, "radius_", 7);
+ rc_avpair_tostr(rad_config, vp, name+7, sizeof(name)-7, value, sizeof(value));
+ if(debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "[mod_xml_radius] Received AVP: %s = %s\n", name, value);
+ }
+ /* if name = Freeradius-AVPair then value contains a 'name="value"' string we need to parse out */
+ if(strcmp(name,"Freeradius-AVPair")) {
+ if(switch_separate_string(value,'=',split, (sizeof(split) / sizeof(split[0]))) == 2) {
+ strncpy(name+7, split[0], sizeof(name)-7);
+ strncpy(value, split[1], sizeof(value));
+ }
+ }
+ if(switch_event_add_header_string(rad_event, SWITCH_STACK_BOTTOM, name, value) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Failed to add header: %s = %s\n", name, value);
+ }
+ vp = vp->next;
+
+ }
+
+ if(query_type == XML_RADIUS_DIRECTORY) {
+ xml_radius_expand_template("directory", rad_event, xml_out, &off);
+ } else if(query_type == XML_RADIUS_DIALPLAN) {
+ xml_radius_expand_template("dialplan", rad_event, xml_out, &off);
+ }
+
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_xml_radius] Auth Rejected!\n");
+
+ /* TO DO: Generate the Failure XML Here fromt the Reply Attributes */
+
+ /* Return "NOT FOUND" template */
+
+ xml_radius_expand_template("not_found", rad_event, xml_out, &off);
+
+ }
+
+ if ((hi = rad_event->headers)) {
+ for (; hi; hi = hi->next) {
+ if (debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG in xml_radius_search, new haeader [%s]=[%s]\n", hi->name, hi->value);
+ }
+ }
+ }
+
+ rc_destroy(rad_config);
+ rc_avpair_free(send);
+ rc_avpair_free(received);
+
+ /* End of RADIUS bits */
+
+ if (debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Debug dump of XML generated:\n%s", switch_xml_toxml(xml_out, SWITCH_FALSE));
+ }
+
+ ret = 0;
+
+ cleanup:
+
+ switch_event_destroy(&rad_event);
+ switch_thread_rwlock_unlock(globals.rwlock);
+
+ if (ret) {
+ switch_xml_free(xml_out);
+ return NULL;
+ }
+
+ return xml_out;
+}
+
+
+static switch_status_t load_config(void)
+{
+ switch_xml_t cfg, xml, bindings_tag, binding_tag, templates_tag, settings, param;
+ xml_binding_t *binding = NULL;
+
+ switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+ int num_servers = 0;
+ int i = 0;
+
+ my_timeout = "5";
+ my_retries = "3";
+ my_deadtime = "0";
+ strncpy(my_seqfile, "/var/run/radius_auth.seq", PATH_MAX - 1);
+ strncpy(my_dictionary, "/usr/local/freeswitch/conf/radius/dictionary", PATH_MAX - 1);
+
+ for (i = 0; i < SERVER_MAX; i++) {
+ my_servers[i][0] = '\0';
+ }
+
+ if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
+ return SWITCH_STATUS_TERM;
+ }
+
+
+ if (!(bindings_tag = switch_xml_child(cfg, "bindings"))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing <bindings> tag!\n");
+ status = SWITCH_STATUS_TERM;
+ goto done;
+ }
+
+ if (!(templates_tag = switch_xml_child(cfg, "templates"))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing <templates> tag!\n");
+ status = SWITCH_STATUS_TERM;
+ goto done;
+ }
+
+ globals.templates_tag = templates_tag;
+
+ for (binding_tag = switch_xml_child(bindings_tag, "binding"); binding_tag; binding_tag = binding_tag->next) {
+ char *bname = (char*) switch_xml_attr_soft(binding_tag, "name");
+ if (!(binding = malloc(sizeof(*binding)))) {
+ goto done;
+ }
+ memset(binding, 0, sizeof(*binding));
+
+ binding->bindings = strdup(bname);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Binding [%s] XML RADIUS Fetch Function [%s]\n",
+ switch_strlen_zero(bname) ? "N/A" : bname, binding->bindings ? binding->bindings : "all");
+ switch_xml_bind_search_function(xml_radius_search, switch_xml_parse_section_string(bname), binding);
+ binding = NULL;
+ }
+
+ if ((settings = switch_xml_child(cfg, "settings"))) {
+ for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+ char *var = (char *) switch_xml_attr_soft(param, "name");
+ char *val = (char *) switch_xml_attr_soft(param, "value");
+
+ if (!strcmp(var, "authserver")) {
+ if (num_servers < SERVER_MAX) {
+ strncpy(my_servers[num_servers], val, 255 - 1);
+ num_servers++;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
+ "you can only specify %d radius servers, ignoring excess server entry\n", SERVER_MAX);
+ }
+ } else if (!strcmp(var, "dictionary")) {
+ strncpy(my_dictionary, val, PATH_MAX - 1);
+ } else if (!strcmp(var, "seqfile")) {
+ strncpy(my_seqfile, val, PATH_MAX - 1);
+ } else if (!strcmp(var, "radius_timeout")) {
+ my_timeout = strdup(val);
+ } else if (!strcmp(var, "radius_retries")) {
+ my_retries = strdup(val);
+ } else if (!strcmp(var, "radius_deadtime")) {
+ my_deadtime = strdup(val);
+ }
+ }
+ }
+ switch_xml_free(xml);
+
+ if (num_servers < 1) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "you must specify at least 1 radius server\n");
+ return SWITCH_STATUS_TERM;
+ }
+
+ done:
+
+ return status;
+}
+
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load)
+{
+
+ switch_core_new_memory_pool(&globals.pool);
+ switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, globals.pool);
+
+ switch_api_interface_t *xml_radius_api_interface;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "XML RADIUS module loading...\n");
+
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+
+ SWITCH_ADD_API(xml_radius_api_interface, "xml_radius", "XML RADIUS", xml_radius_function, XML_RADIUS_SYNTAX);
+ switch_console_set_complete("add xml_radius debug_on");
+ switch_console_set_complete("add xml_radius debug_off");
+ //switch_console_set_complete("add xml_odbc render_template");
+
+ switch_thread_rwlock_create(&globals.rwlock, pool);
+
+ if (load_config() != SWITCH_STATUS_SUCCESS) {
+ return SWITCH_STATUS_TERM;
+ }
+
+ /* indicate that the module should continue to be loaded */
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_radius_shutdown)
+{
+
+ globals.shutdown = 1;
+ switch_thread_rwlock_wrlock(globals.rwlock);
+ switch_thread_rwlock_unlock(globals.rwlock);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Deleted: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.h
Copied: freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.h (from rev 14471, freeswitch/trunk/contrib/cparker/mod_xml_radius/mod_xml_radius.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.h (rev 0)
+++ freeswitch/branches/seven/contrib/cparker/mod_xml_radius/mod_xml_radius.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application Call Detail Recorder module
+ * Copyright 2006, Author: Yossi Neiman of Cartis Solutions, Inc. <freeswitch AT cartissolutions.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application Call Detail Recorder module
+ *
+ * The Initial Developer of the Original Code is
+ * Chris Parker <cparker AT segv.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Chris Parker <cparker AT segv.org>
+ *
+ * Description: Contains definitions and structs used by the radius cdr module.
+ *
+ * mod_radius_cdr.h
+ *
+ */
+
+#ifndef MODRADIUSCDR
+#define MODRADIUSCDR
+
+#define PW_FS_PEC 27880
+
+#define PW_FS_AVPAIR 1
+#define PW_FS_CLID 2
+#define PW_FS_DIALPLAN 3
+#define PW_FS_SRC 4
+#define PW_FS_DST 5
+#define PW_FS_SRC_CHANNEL 6
+#define PW_FS_DST_CHANNEL 7
+#define PW_FS_ANI 8
+#define PW_FS_ANIII 9
+#define PW_FS_LASTAPP 10
+#define PW_FS_LASTDATA 11
+#define PW_FS_DISPOSITION 12
+#define PW_FS_HANGUPCAUSE 13
+#define PW_FS_BILLUSEC 15
+#define PW_FS_AMAFLAGS 16
+#define PW_FS_RDNIS 17
+#define PW_FS_CONTEXT 18
+#define PW_FS_SOURCE 19
+#define PW_FS_CALLSTARTDATE 20
+#define PW_FS_CALLANSWERDATE 21
+#define PW_FS_CALLTRANSFERDATE 22
+#define PW_FS_CALLENDDATE 23
+
+
+#endif
Copied: freeswitch/branches/seven/contrib/diegoviola (from rev 14471, freeswitch/trunk/contrib/diegoviola)
Copied: freeswitch/branches/seven/contrib/diegoviola/ruby (from rev 14471, freeswitch/trunk/contrib/diegoviola/ruby)
Copied: freeswitch/branches/seven/contrib/diegoviola/ruby/callcard (from rev 14471, freeswitch/trunk/contrib/diegoviola/ruby/callcard)
Deleted: freeswitch/branches/seven/contrib/diegoviola/ruby/callcard/callcard.rb
Copied: freeswitch/branches/seven/contrib/diegoviola/ruby/callcard/callcard.rb (from rev 14471, freeswitch/trunk/contrib/diegoviola/ruby/callcard/callcard.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/diegoviola/ruby/callcard/callcard.rb (rev 0)
+++ freeswitch/branches/seven/contrib/diegoviola/ruby/callcard/callcard.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,60 @@
+#!/usr/bin/env ruby
+
+require 'fsr'
+require 'fsr/listener/outbound'
+require 'activerecord'
+
+FSR.load_all_commands
+
+class Card < ActiveRecord::Base
+ ActiveRecord::Base.establish_connection(
+ :adapter => "mysql",
+ :host => "localhost",
+ :username => "root",
+ :password => "secret",
+ :database => "callcard"
+ )
+end
+
+class CallCard < FSR::Listener::Outbound
+ def session_initiated
+ exten = @session.headers[:caller_caller_id_number]
+ pin_wav = "/usr/local/freeswitch/sounds/en/us/callie/conference/8000/conf-pin.wav"
+ bad_pin_wav = "/usr/local/freeswitch/sounds/en/us/callie/conference/8000/conf-bad-pin.wav"
+ dial_tone = "tone_stream://%(10000,0,350,440)"
+ FSR::Log.info "*** Answering incoming call from #{exten}"
+ answer do
+ play_and_get_digits(pin_wav, bad_pin_wav, 2, 10, 3, 7000, ["#"], "pin_number", "\\d") do |pin_number|
+ @card = Card.find_by_card_number(pin_number)
+ if @card then
+ FSR::Log.info "*** Success, grabbed #{pin_number} from #{exten}"
+ play_and_get_digits(dial_tone, bad_pin_wav, 2, 10, 3, 7000, ["#"], "destination_number", "\\d") do |destination_number|
+ FSR::Log.info "*** Success, grabbed #{destination_number} from #{exten}"
+ FSR::Log.info "*** Setting up the billing variables."
+ uuid_setvar(@session.headers[:unique_id], 'nibble_rate', @card.rate)
+ uuid_setvar(@session.headers[:unique_id], 'nibble_account', @card.id)
+ FSR::Log.info "*** Bridging."
+ FSR::Log.info "*** You have #{duration} minutes to talk."
+ speak("You have #{duration} minutes to talk.")
+ #api("sched_api +#{(duration*60)-60} none uuid_displace #{@session.headers[:unique_id]} start tone_stream://%(500,0,500)")
+ #transfer("#{destination_number}", "XML", "default") { close_connection }
+ bridge("sofia/internal/#{destination_number}@0.0.0.0")
+ end
+ else
+ FSR::Log.info "*** Failure, grabbed #{pin_number} from #{exten}"
+ playback(bad_pin_wav)
+ FSR::Log.info "*** Hanging up the call."
+ hangup
+ end
+ end
+ end
+ end
+
+ def duration
+ @duration = @card.balance.to_i / @card.rate.to_i
+ return @duration
+ end
+end
+
+FSR.start_oes! CallCard, :port => 8084, :host => "127.0.0.1"
+
Copied: freeswitch/branches/seven/contrib/dschreiber (from rev 14471, freeswitch/trunk/contrib/dschreiber)
Copied: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill (from rev 14471, freeswitch/trunk/contrib/dschreiber/mod_nibblebill)
Property changes: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill
Name: svn:ignore
+ Makefile
Deleted: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/mod_nibblebill.c
Copied: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/mod_nibblebill.c (from rev 14471, freeswitch/trunk/contrib/dschreiber/mod_nibblebill/mod_nibblebill.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/mod_nibblebill.c (rev 0)
+++ freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/mod_nibblebill.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,882 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005/2006, Anthony Minessale II <anthmct@yahoo.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthmct@yahoo.com>
+ *
+ * The Initial Developer of this module is
+ * Darren Schreiber <d@d-man.org>
+ *
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Darren Schreiber <d@d-man.org>
+ *
+ * mod_nibblebill.c - Nibble Billing
+ * Purpose is to allow real-time debiting of credit or cash from a database while calls are in progress. I had the following goals:
+ *
+ * Debit credit/cash from accounts real-time
+ * Allow for billing at different rates during a single call
+ * Allow for warning callers when their balance is low (via audio, in-channel)
+ * Allow for disconnecting or re-routing calls when balance is depleted
+ * Allow for billing to function as listed above with multiple concurrent calls
+ *
+ * Thanks go to bandwidth.com for funding this work.
+ *
+ *
+ * TODO: Fix what happens when the DB is not available
+ * TODO: Fix what happens when the DB queries fail (right now, all are acting like success)
+ * TODO: Make the actions function for when funds are depleted
+ * TODO: Add buffering abilities
+ * TODO: Make error handling for database, such that when the database is down (or not installed) we just log to a text file
+ * FUTURE: Possibly make the hooks not tied per-channel, and instead just do this as a supervision style application with one thread that watches all calls
+ */
+
+#include <switch.h>
+
+
+/* Defaults */
+static char SQL_LOOKUP[] = "SELECT %s FROM %s WHERE %s='%s'";
+static char SQL_SAVE[] = "UPDATE %s SET %s=%s-%f WHERE %s='%s'";
+
+typedef struct
+{
+ switch_time_t lastts; /* Last time we did any billing */
+ float total; /* Total amount billed so far */
+
+ switch_time_t pausets; /* Timestamp of when a pause action started. 0 if not paused */
+ float bill_adjustments; /* Adjustments to make to the next billing, based on pause/resume events */
+
+} nibble_data_t;
+
+
+typedef struct nibblebill_results
+{
+ float balance;
+
+ float percall_max; /* Overrides global on a per-user level */
+ float lowbal_amt; /* ditto */
+} nibblebill_results_t;
+
+
+/* Keep track of our config, event hooks and database connection variables, for this module only */
+static struct
+{
+ /* Memory */
+ switch_memory_pool_t *pool;
+
+ /* Event hooks */
+ switch_event_node_t *node;
+
+ /* Global mutex (don't touch a session when it's already being touched) */
+ switch_mutex_t *mutex;
+
+ /* Global billing config options */
+ float percall_max_amt; /* Per-call billing limit (safety check, for fraud) */
+ char *percall_action; /* Exceeded length of per-call action */
+ float lowbal_amt; /* When we warn them they are near depletion */
+ char *lowbal_action; /* Low balance action */
+ float nobal_amt; /* Minimum amount that must remain in the account */
+ char *nobal_action; /* Drop action */
+
+ /* Other options */
+ int global_heartbeat; /* Supervise and bill every X seconds, 0 means off */
+
+ /* Database settings */
+ char *db_username;
+ char *db_password;
+ char *db_dsn;
+ char *db_table;
+ char *db_column_cash;
+ char *db_column_account;
+ switch_odbc_handle_t *master_odbc;
+} globals;
+
+static void nibblebill_pause(switch_core_session_t *session);
+
+/**************************
+* Setup FreeSWITCH Macros *
+**************************/
+/* Define the module's load function */
+SWITCH_MODULE_LOAD_FUNCTION(mod_nibblebill_load);
+
+/* Define the module's shutdown function */
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_nibblebill_shutdown);
+
+/* Define the module's name, load function, shutdown function and runtime function */
+SWITCH_MODULE_DEFINITION(mod_nibblebill, mod_nibblebill_load, mod_nibblebill_shutdown, NULL);
+
+/* String setting functions */
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_username, globals.db_username);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_password, globals.db_password);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_dsn, globals.db_dsn);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_table, globals.db_table);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_column_cash, globals.db_column_cash);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_column_account, globals.db_column_account);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_percall_action, globals.percall_action);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_lowbal_action, globals.lowbal_action);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_nobal_action, globals.nobal_action);
+
+static int nibblebill_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ nibblebill_results_t *cbt = (nibblebill_results_t *) pArg;
+
+ cbt->balance = atof(argv[0]);
+
+ return 0;
+}
+
+static switch_status_t load_config(void)
+{
+ char *cf = "nibblebill.conf";
+ switch_xml_t cfg, xml = NULL, param, settings;
+ switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+ if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
+ status = SWITCH_STATUS_SUCCESS; /* We don't fail because we can still write to a text file or buffer */
+ goto setdefaults;
+ }
+
+ if ((settings = switch_xml_child(cfg, "settings"))) {
+ for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+ char *var = (char *) switch_xml_attr_soft(param, "name");
+ char *val = (char *) switch_xml_attr_soft(param, "value");
+
+ if (!strcasecmp(var, "db_username")) {
+ set_global_db_username(val);
+ } else if (!strcasecmp(var, "db_password")) {
+ set_global_db_password(val);
+ } else if (!strcasecmp(var, "db_dsn")) {
+ set_global_db_dsn(val);
+ } else if (!strcasecmp(var, "db_table")) {
+ set_global_db_table(val);
+ } else if (!strcasecmp(var, "db_column_cash")) {
+ set_global_db_column_cash(val);
+ } else if (!strcasecmp(var, "db_column_account")) {
+ set_global_db_column_account(val);
+ } else if (!strcasecmp(var, "percall_action")) {
+ set_global_percall_action(val);
+ } else if (!strcasecmp(var, "percall_max_amt")) {
+ globals.percall_max_amt = atof(val);
+ } else if (!strcasecmp(var, "lowbal_action")) {
+ set_global_lowbal_action(val);
+ } else if (!strcasecmp(var, "lowbal_amt")) {
+ globals.lowbal_amt = atof(val);
+ } else if (!strcasecmp(var, "nobal_action")) {
+ set_global_nobal_action(val);
+ } else if (!strcasecmp(var, "nobal_amt")) {
+ globals.nobal_amt = atof(val);
+ } else if (!strcasecmp(var, "global_heartbeat")) {
+ globals.global_heartbeat = atoi(val);
+ }
+ }
+ }
+
+/* Set defaults for any variables still not set */
+setdefaults:
+ if (switch_strlen_zero(globals.db_username)) {
+ set_global_db_username("bandwidth.com");
+ }
+ if (switch_strlen_zero(globals.db_password)) {
+ set_global_db_password("dev");
+ }
+ if (switch_strlen_zero(globals.db_dsn)) {
+ set_global_db_dsn("bandwidth.com");
+ }
+ if (switch_strlen_zero(globals.percall_action)) {
+ set_global_percall_action("hangup");
+ }
+ if (switch_strlen_zero(globals.lowbal_action)) {
+ set_global_lowbal_action("play ding");
+ }
+ if (switch_strlen_zero(globals.nobal_action)) {
+ set_global_nobal_action("hangup");
+ }
+
+ if (switch_odbc_available() && globals.db_dsn) {
+ if (!(globals.master_odbc = switch_odbc_handle_new(globals.db_dsn, globals.db_username, globals.db_password))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot create handle to ODBC Database!\n");
+ status = SWITCH_STATUS_FALSE;
+ goto done;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Opened ODBC Database handle!\n");
+ }
+
+ if (switch_odbc_handle_connect(globals.master_odbc) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
+ "Cannot connect to ODBC driver/database %s (user: %s / pass %s)!\n",
+ globals.db_dsn, globals.db_username, globals.db_password);
+ status = SWITCH_STATUS_FALSE;
+ goto done;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Opened ODBC Database!\n");
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected ODBC DSN: %s\n", globals.db_dsn);
+ } else if (globals.db_dsn) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
+ "ODBC does not appear to be installed in the core. You need to run ./configure --enable-core-odbc-support\n");
+ }
+
+done:
+
+ if (xml) {
+ switch_xml_free(xml);
+ }
+ return status;
+}
+
+void debug_event_handler(switch_event_t *event)
+{
+ switch_event_header_t *event_header = NULL;
+
+ if (!event) {
+ return;
+ }
+
+ /* Print out all event headers, for fun */
+ if (event->headers) {
+ for (event_header = event->headers; event_header; event_header = event_header->next) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Header info: %s => %s\n", event_header->name, event_header->value);
+ }
+ }
+}
+
+
+static void transfer_call(switch_core_session_t *session, char *destination)
+{
+ char *argv[4] = { 0 };
+
+ switch_separate_string(destination, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+
+ const char *uuid;
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ /* Find the uuid of our B leg. If it exists, transfer it first */
+ if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
+ /* Make sure we are in the media path on B leg */
+ switch_ivr_media(uuid, SMF_REBRIDGE);
+
+ /* Get info on the B leg */
+ switch_core_session_t *b_session;
+ if ((b_session = switch_core_session_locate(uuid))) {
+ /* Transfer the B leg */
+ switch_ivr_session_transfer(b_session, argv[0], argv[1], argv[2]);
+ switch_core_session_rwunlock(b_session);
+ }
+ }
+
+ /* Make sure we are in the media path on A leg */
+ uuid = switch_core_session_get_uuid(session);
+ switch_ivr_media(uuid, SMF_REBRIDGE);
+
+ /* Transfer the A leg */
+ switch_ivr_session_transfer(session, argv[0], argv[1], argv[2]);
+}
+
+
+/* At this time, billing never succeeds if you don't have a database. */
+static switch_status_t bill_event(float billamount, const char *billaccount)
+{
+ char sql[1024] = "";
+ switch_odbc_statement_handle_t stmt;
+
+ if (!switch_odbc_available()) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ snprintf(sql, 1024, SQL_SAVE, globals.db_table, globals.db_column_cash, globals.db_column_cash, billamount, globals.db_column_account, billaccount);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Doing update query\n[%s]\n", sql);
+
+ if (switch_odbc_handle_exec(globals.master_odbc, sql, &stmt) != SWITCH_ODBC_SUCCESS) {
+ char *err_str;
+ err_str = switch_odbc_handle_get_error(globals.master_odbc, stmt);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ERR: [%s]\n[%s]\n", sql, switch_str_nil(err_str));
+ switch_safe_free(err_str);
+ } else {
+ /* TODO: Failover to a flat/text file if DB is unavailable */
+
+ return SWITCH_STATUS_SUCCESS;
+ }
+ switch_odbc_statement_handle_free(&stmt);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+static float get_balance(const char *billaccount)
+{
+ char sql[1024] = "";
+ nibblebill_results_t pdata;
+ float balance = 0.00;
+
+ if (!switch_odbc_avaliable()) {
+ return -1.0f;
+ }
+
+ memset(&pdata, 0, sizeof(pdata));
+ snprintf(sql, 1024, SQL_LOOKUP, globals.db_column_cash, globals.db_table, globals.db_column_account, billaccount);
+
+ if (switch_odbc_handle_callback_exec(globals.master_odbc, sql, nibblebill_callback, &pdata) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error running this query: [%s]\n", sql);
+ /* TODO: Return -1 for safety */
+
+ return -1.00f;
+ } else {
+ /* Successfully retrieved! */
+ balance = pdata.balance;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Retrieved current balance for account %s (balance = %f)\n", billaccount, balance);
+ }
+
+ return balance;
+}
+
+
+
+/* This is where we actually charge the guy
+ This can be called anytime a call is in progress or at the end of a call before the session is destroyed */
+static switch_status_t do_billing(switch_core_session_t *session)
+{
+ /* FS vars we will use */
+ switch_channel_t *channel;
+ switch_caller_profile_t *profile;
+
+ /* Local vars */
+ nibble_data_t *nibble_data;
+ switch_time_t ts = switch_micro_time_now();
+ float billamount;
+ char date[80] = "";
+ char *tmp;
+ char *uuid;
+ switch_size_t retsize;
+ switch_time_exp_t tm;
+
+
+ if (!session) {
+ /* wtf? Why are we here? */
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ uuid = switch_core_session_get_uuid(session);
+
+ /* Get channel var */
+ channel = switch_core_session_get_channel(session);
+ if (!channel) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ /* Variables kept in FS but relevant only to this module */
+ const char *billrate = switch_channel_get_variable(channel, "nibble_rate");
+ const char *billaccount = switch_channel_get_variable(channel, "nibble_account");
+
+
+ /* Return if there's no billing information on this session */
+ if (!billrate || !billaccount) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Attempting to bill at $%s per minute to account %s\n", billrate, billaccount);
+
+ /* Get caller profile info from channel */
+ profile = switch_channel_get_caller_profile(channel);
+
+ if (!profile) {
+ /* No caller profile (why would this happen?) */
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ if (profile->times->answered < 1) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Not billing %s - call is not in answered state\n", billaccount);
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ /* Lock this session's data for this module while we tinker with it */
+ if (globals.mutex) {
+ switch_mutex_lock(globals.mutex);
+ }
+
+ /* Get our nibble data var. This will be NULL if it's our first call here for this session */
+ nibble_data = (nibble_data_t *) switch_channel_get_private(channel, "_nibble_data_");
+
+ /* Are we in paused mode? If so, we don't do anything here - go back! */
+ if (nibble_data && (nibble_data->pausets > 0)) {
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Received heartbeat, but we're paused - ignoring\n");
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ /* Have we done any billing on this channel yet? If no, set up vars for doing so */
+ if (!nibble_data) {
+ nibble_data = switch_core_session_alloc(session, sizeof(*nibble_data));
+ if (!nibble_data) {
+ switch_assert(nibble_data);
+ }
+ memset(nibble_data, 0, sizeof(*nibble_data));
+
+ /* Setup new billing data (based on call answer time, in case this module started late with active calls) */
+ nibble_data->lastts = profile->times->answered; /* Set the initial answer time to match when the call was really answered */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Beginning new billing on %s\n", uuid);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Last successful billing time was %s\n", date);
+ }
+
+ switch_time_exp_lt(&tm, nibble_data->lastts);
+ switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%d seconds passed since last bill time of %s\n", (int) ((ts - nibble_data->lastts) / 1000000), date);
+
+
+ if ((ts - nibble_data->lastts) >= 0) {
+ /* Convert billrate into microseconds and multiply by # of microseconds that have passed since last *successful* bill */
+ billamount = (atof(billrate) / 1000000 / 60) * ((ts - nibble_data->lastts)) - nibble_data->bill_adjustments;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Billing $%f to %s (Call: %s / %f so far)\n", billamount, billaccount, uuid, nibble_data->total);
+
+ /* DO ODBC BILLING HERE and reset counters if it's successful! */
+ if (bill_event(billamount, billaccount) == SWITCH_STATUS_SUCCESS) {
+ /* Increment total cost */
+ nibble_data->total += billamount;
+
+ /* Reset manual billing adjustments from pausing */
+ nibble_data->bill_adjustments = 0;
+
+ /* Update channel variable with current billing */
+ tmp = switch_mprintf("%f", nibble_data->total);
+ switch_channel_set_variable(channel, "nibble_total_billed", tmp);
+ switch_safe_free(tmp);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Failed to log to database!\n");
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Just tried to bill %s negative minutes! wtf? That should be impossible.\n", uuid);
+ }
+
+ /* Update the last time we billed */
+ nibble_data->lastts = ts;
+
+ /* Save this location, but only if the channel/session are not hungup (otherwise, we're done) */
+ if (channel && switch_channel_get_state(channel) != CS_HANGUP) {
+ switch_channel_set_private(channel, "_nibble_data_", nibble_data);
+
+ /* See if this person has enough money left to continue the call */
+ float balance;
+ balance = get_balance(billaccount);
+ if (balance < globals.nobal_amt) {
+ /* Not enough money - reroute call to nobal location */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Balance of %f fell below allowed amount of %f! (Account %s)\n", balance, globals.nobal_amt, billaccount);
+
+ /* IMPORTANT: Billing must be paused before the transfer occurs! This prevents infinite loops, since the transfer will result */
+ /* in nibblebill checking the call again in the routing process for an allowed balance! */
+ /* If you intend to give the user the option to re-up their balance, you must clear & resume billing once the balance is updated! */
+ nibblebill_pause(session);
+ transfer_call(session, globals.nobal_action);
+ }
+ }
+
+ /* Done changing - release lock */
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+
+ /* Go check if this call is allowed to continue */
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* You can turn on session heartbeat on a channel to have us check billing more often */
+static void event_handler(switch_event_t *event)
+{
+ if (!event){
+ /* WTF? We should never get here - it means an event came in without the event info */
+ return;
+ }
+
+ /* FS vars we'll need */
+ switch_core_session_t *session;
+ char *uuid = switch_event_get_header(event, "Unique-ID");
+
+ /* Make sure everything is sane */
+ if (!uuid){
+ /* Donde esta channel? */
+ return;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Received request via %s!\n", switch_event_name (event->event_id));
+
+ /* Display debugging info */
+ if (switch_event_get_header(event, "nibble_debug")) {
+ debug_event_handler(event);
+ }
+
+ /* Get session var */
+ session = switch_core_session_locate(uuid);
+ if (!session) {
+ return;
+ }
+
+ /* Go bill */
+ do_billing(session);
+
+
+ switch_core_session_rwunlock(session);
+}
+
+static void nibblebill_pause(switch_core_session_t *session)
+{
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ switch_time_t ts = switch_micro_time_now();
+ nibble_data_t *nibble_data;
+
+ if (!channel) {
+ return;
+ }
+
+ /* Lock this session's data for this module while we tinker with it */
+ if (globals.mutex) {
+ switch_mutex_lock(globals.mutex);
+ }
+
+ /* Get our nibble data var. This will be NULL if it's our first call here for this session */
+ nibble_data = (nibble_data_t *) switch_channel_get_private(channel, "_nibble_data_");
+
+ if (!nibble_data) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Can't pause - channel is not initialized for billing!\n");
+ return;
+ }
+
+ /* Set pause counter if not already set */
+ if (nibble_data->pausets == 0)
+ nibble_data->pausets = ts;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Paused billing timestamp!\n");
+
+ /* Done checking - release lock */
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+
+}
+
+static void nibblebill_resume(switch_core_session_t *session)
+{
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ switch_time_t ts = switch_micro_time_now();
+ nibble_data_t *nibble_data;
+
+ if (!channel) {
+ return;
+ }
+
+ /* Get our nibble data var. This will be NULL if it's our first call here for this session */
+ nibble_data = (nibble_data_t *) switch_channel_get_private(channel, "_nibble_data_");
+
+ if (!nibble_data) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Can't resume - channel is not initialized for billing (This is expected at hangup time)!\n");
+ return;
+ }
+
+ if (nibble_data->pausets == 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Can't resume - channel is not paused! (This is expected at hangup time)\n");
+ return;
+ }
+
+ /* Lock this session's data for this module while we tinker with it */
+ if (globals.mutex) {
+ switch_mutex_lock(globals.mutex);
+ }
+
+ const char *billrate = switch_channel_get_variable(channel, "nibble_rate");
+
+ /* Calculate how much was "lost" to billings during pause - we do this here because you never know when the billrate may change during a call */
+ nibble_data->bill_adjustments += (atof(billrate) / 1000000 / 60) * ((ts - nibble_data->pausets));
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Resumed billing! Subtracted %f from this billing cycle.\n", (atof(billrate) / 1000000 / 60) * ((ts - nibble_data->pausets)));
+
+ nibble_data->pausets = 0;
+
+ /* Done checking - release lock */
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+
+}
+
+static void nibblebill_reset(switch_core_session_t *session)
+{
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ switch_time_t ts = switch_micro_time_now();
+ nibble_data_t *nibble_data;
+
+ if (!channel) {
+ return;
+ }
+
+ /* Get our nibble data var. This will be NULL if it's our first call here for this session */
+ nibble_data = (nibble_data_t *) switch_channel_get_private(channel, "_nibble_data_");
+
+ if (!nibble_data) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Can't reset - channel is not initialized for billing!\n");
+ return;
+ }
+
+ /* Lock this session's data for this module while we tinker with it */
+ if (globals.mutex) {
+ switch_mutex_lock(globals.mutex);
+ }
+
+ /* Update the last time we billed */
+ nibble_data->lastts = ts;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Reset last billing timestamp marker to right now!\n");
+
+ /* Done checking - release lock */
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+
+}
+
+static float nibblebill_check(switch_core_session_t *session)
+{
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ nibble_data_t *nibble_data;
+ float amount = 0;
+
+ if (!channel) {
+ return -99999;
+ }
+
+ /* Get our nibble data var. This will be NULL if it's our first call here for this session */
+ nibble_data = (nibble_data_t *) switch_channel_get_private(channel, "_nibble_data_");
+
+ if (!nibble_data) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Can't check - channel is not initialized for billing!\n");
+ return -99999;
+ }
+
+ /* Lock this session's data for this module while we tinker with it */
+ if (globals.mutex) {
+ switch_mutex_lock(globals.mutex);
+ }
+
+ amount = nibble_data->total;
+
+ /* Done checking - release lock */
+ if (globals.mutex) {
+ switch_mutex_unlock(globals.mutex);
+ }
+
+ return amount;
+}
+
+static void nibblebill_adjust(switch_core_session_t *session, float amount)
+{
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+
+ if (!channel) {
+ return;
+ }
+
+ /* Variables kept in FS but relevant only to this module */
+ const char *billaccount = switch_channel_get_variable(channel, "nibble_account");
+
+ /* Return if there's no billing information on this session */
+ if (!billaccount) {
+ return;
+ }
+
+ /* Add or remove amount from adjusted billing here. Note, we bill the OPPOSITE */
+ if (bill_event(-amount, billaccount) == SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Recorded adjustment to %s for $%f\n", billaccount, amount);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to record adjustment to %s for $%f\n", billaccount, amount);
+ }
+
+}
+
+
+#define APP_SYNTAX "pause | resume | reset | adjust <amount> | heartbeat <seconds> | check"
+SWITCH_STANDARD_APP(nibblebill_app_function)
+{
+ int argc = 0;
+ char *lbuf = NULL;
+ char *argv[3] = { 0 };
+
+ if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
+ && (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
+ if (!strcasecmp(argv[0], "adjust") && argc == 2) {
+ nibblebill_adjust(session, atof(argv[1]));
+ } else if (!strcasecmp(argv[0], "flush")) {
+ do_billing(session);
+ } else if (!strcasecmp(argv[0], "pause")) {
+ nibblebill_pause(session);
+ } else if (!strcasecmp(argv[0], "resume")) {
+ nibblebill_resume(session);
+ } else if (!strcasecmp(argv[0], "check")) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Current billing is at $%f\n", nibblebill_check(session));
+ } else if (!strcasecmp(argv[0], "reset")) {
+ nibblebill_reset(session);
+ } else if (!strcasecmp(argv[0], "heartbeat") && argc == 2) {
+ switch_core_session_enable_heartbeat(session, atoi(argv[1]));
+ }
+ }
+
+}
+
+/* We get here from the API only (theoretically) */
+#define API_SYNTAX "<uuid> [pause | resume | reset | adjust <amount> | heartbeat <seconds> | check]"
+SWITCH_STANDARD_API(nibblebill_api_function)
+{
+ switch_core_session_t *psession = NULL;
+ char *mycmd = NULL, *argv[3] = { 0 };
+ int argc = 0;
+
+ if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) {
+ argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+ if ((argc == 2 || argc == 3) && !switch_strlen_zero(argv[0])) {
+ char *uuid = argv[0];
+ if ((psession = switch_core_session_locate(uuid))) {
+ switch_channel_t *channel;
+ channel = switch_core_session_get_channel(psession);
+
+ if (!strcasecmp(argv[1], "adjust") && argc == 3) {
+ nibblebill_adjust(psession, atof(argv[2]));
+ } else if (!strcasecmp(argv[1], "flush")) {
+ do_billing(psession);
+ } else if (!strcasecmp(argv[1], "pause")) {
+ nibblebill_pause(psession);
+ } else if (!strcasecmp(argv[1], "resume")) {
+ nibblebill_resume(psession);
+ } else if (!strcasecmp(argv[1], "check")) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Current billing is at $%f\n", nibblebill_check(psession));
+ } else if (!strcasecmp(argv[1], "reset")) {
+ nibblebill_reset(psession);
+ } else if (!strcasecmp(argv[1], "heartbeat") && argc == 3) {
+ switch_core_session_enable_heartbeat(psession, atoi(argv[2]));
+ }
+
+ switch_core_session_rwunlock(psession);
+ } else {
+ stream->write_function(stream, "-ERR No Such Channel!\n");
+ }
+ } else {
+ stream->write_function(stream, "-USAGE: %s\n", API_SYNTAX);
+ }
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* Check if session has variable "billrate" set. If it does, activate the heartbeat variable
+ switch_core_session_enable_heartbeat(switch_core_session_t *session, uint32_t seconds)
+ switch_core_session_sched_heartbeat(switch_core_session_t *session, uint32_t seconds)*/
+
+static switch_status_t sched_billing(switch_core_session_t *session)
+{
+
+ if (globals.global_heartbeat > 0) {
+ switch_core_session_enable_heartbeat(session, globals.global_heartbeat);
+ }
+
+ /* TODO: Check account balance here */
+
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
+static switch_status_t process_hangup(switch_core_session_t *session)
+{
+
+ /* Resume any paused billings, just in case */
+// nibblebill_resume(session);
+
+ /* Now go handle like normal billing */
+ do_billing(session);
+
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
+switch_state_handler_table_t nibble_state_handler =
+{
+ /* on_init */ NULL,
+ /* on_routing */ NULL, /* Need to add a check here for anything in their account before routing */
+ /* on_execute */ sched_billing, /* Turn on heartbeat for this session and do an initial account check */
+ /* on_hangup */ process_hangup, /* On hangup - most important place to go bill */
+ /* on_exch_media */ NULL,
+ /* on_soft_exec */ NULL,
+ /* on_consume_med */ NULL,
+ /* on_hibernate */ NULL,
+ /* on_reset */ NULL
+};
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_nibblebill_load)
+{
+ switch_api_interface_t *api_interface;
+ switch_application_interface_t *app_interface;
+
+ /* Set every byte in this structure to 0 */
+ memset(&globals, 0, sizeof(globals));
+ globals.pool = pool;
+ switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, globals.pool);
+
+ load_config();
+
+ /* connect my internal structure to the blank pointer passed to me */
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+
+ /* Add API and CLI commands */
+ SWITCH_ADD_API(api_interface, "nibblebill", "Manage billing parameters for a channel/call", nibblebill_api_function, API_SYNTAX);
+
+ /* Add dialplan applications */
+ SWITCH_ADD_APP(app_interface, "nibblebill", "Handle billing for the current channel/call", "Pause, resume, reset, adjust, flush, heartbeat commands to handle billing.", nibblebill_app_function, APP_SYNTAX, SAF_NONE);
+
+ /* register state handlers for billing */
+ switch_core_add_state_handler(&nibble_state_handler);
+
+ /* bind to heartbeat events */
+ if (switch_event_bind_removable(modname, SWITCH_EVENT_SESSION_HEARTBEAT, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind event to monitor for session heartbeats!\n");
+ return SWITCH_STATUS_GENERR;
+ }
+
+ /* indicate that the module should continue to be loaded */
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_nibblebill_shutdown)
+{
+ switch_event_unbind(&globals.node);
+ switch_core_remove_state_handler(&nibble_state_handler);
+ switch_odbc_handle_disconnect(globals.master_odbc);
+
+ return SWITCH_STATUS_UNLOAD;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
+ */
Deleted: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/nibblebill.conf.xml
Copied: freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/nibblebill.conf.xml (from rev 14471, freeswitch/trunk/contrib/dschreiber/mod_nibblebill/nibblebill.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/nibblebill.conf.xml (rev 0)
+++ freeswitch/branches/seven/contrib/dschreiber/mod_nibblebill/nibblebill.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+<configuration name="nibblebill.conf" description="Nibble Billing">
+ <settings>
+ <!-- See http://wiki.freeswitch.org/index.php?title=Mod_nibblebill for help with these options -->
+
+ <!-- Information for connecting to your database -->
+ <param name="db_username" value="bandwidth.com"/>
+ <param name="db_password" value="password"/>
+ <param name="db_dsn" value="bandwidth.com"/>
+
+ <!-- The database table where your CASH column is located -->
+ <param name="db_table" value="accounts"/>
+
+ <!-- The column name where we store the value of the account -->
+ <param name="db_column_cash" value="cash"/>
+
+ <!-- The column name for the unique ID identifying the account -->
+ <param name="db_column_account" value="id"/>
+
+
+ <!-- Default heartbeat interval. Set to 'off' for no heartbeat (i.e. bill only at end of call) -->
+ <param name="global_heartbeat" value="60"/>
+
+ <!-- By default, warn a caller when their balance is at $5.00. You can set this to a negative number. -->
+ <param name="lowbal_amt" value="5"/>
+ <param name="lowbal_action" value="play ding"/>
+
+ <!-- By default, terminate a caller when their balance hits $0.00. You can set this to a negative number. -->
+ <param name="nobal_amt" value="0"/>
+ <param name="nobal_action" value="hangup"/>
+
+ <!-- If a call goes beyond a certain dollar amount, flag or terminate it -->
+ <param name="percall_max_amt" value="100"/>
+ <param name="percall_action" value="hangup"/>
+
+ </settings>
+</configuration>
Copied: freeswitch/branches/seven/contrib/evildeshi (from rev 14471, freeswitch/trunk/contrib/evildeshi)
Copied: freeswitch/branches/seven/contrib/intralanman (from rev 14471, freeswitch/trunk/contrib/intralanman)
Copied: freeswitch/branches/seven/contrib/intralanman/C (from rev 14471, freeswitch/trunk/contrib/intralanman/C)
Copied: freeswitch/branches/seven/contrib/intralanman/C/lcr (from rev 14471, freeswitch/trunk/contrib/intralanman/C/lcr)
Copied: freeswitch/branches/seven/contrib/intralanman/C/lcr/sql (from rev 14471, freeswitch/trunk/contrib/intralanman/C/lcr/sql)
Deleted: freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/mysql-5.0.sql
Copied: freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/mysql-5.0.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/C/lcr/sql/mysql-5.0.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/mysql-5.0.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/mysql-5.0.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,85 @@
+-- MySQL dump 10.11
+--
+-- Host: lmdt.intralanman.com Database: freeswitch
+-- ------------------------------------------------------
+-- Server version 5.0.51a-17-log
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `lcr`
+--
+
+DROP TABLE IF EXISTS `lcr`;
+CREATE TABLE `lcr` (
+ `id` int(11) NOT NULL auto_increment,
+ `digits` varchar(15) default NULL,
+ `rate` float(11,5) unsigned NOT NULL,
+ `carrier_id` int(11) NOT NULL,
+ `lead_strip` int(11) NOT NULL,
+ `trail_strip` int(11) NOT NULL,
+ `prefix` varchar(16) NOT NULL,
+ `suffix` varchar(16) NOT NULL,
+ `lcr_profile` varchar(32) default NULL,
+ `date_start` datetime NOT NULL DEFAULT '1970-01-01',
+ `date_end` datetime NOT NULL DEFAULT '2030-12-31',
+ `quality` float(10,6) NOT NULL,
+ `reliability` float(10,6) NOT NULL,
+ `cid` varchar(32) NOT NULL DEFAULT '',
+ `enabled` boolean NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ KEY `carrier_id` (`carrier_id`),
+ KEY `digits` (`digits`),
+ KEY `lcr_profile` (`lcr_profile`),
+ KEY `rate` (`rate`),
+ KEY `digits_profile_cid_rate` USING BTREE (`digits`,`rate`),
+ CONSTRAINT `carrier_id` FOREIGN KEY (`carrier_id`) REFERENCES `carriers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
+
+--
+-- Table structure for table `carriers`
+--
+
+DROP TABLE IF EXISTS `carriers`;
+CREATE TABLE `carriers` (
+ `id` int(11) NOT NULL auto_increment,
+ `carrier_name` varchar(255) default NULL,
+ `enabled` boolean NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
+
+--
+-- Table structure for table `carrier_gateway`
+--
+
+DROP TABLE IF EXISTS `carrier_gateway`;
+CREATE TABLE `carrier_gateway` (
+ `id` int(11) NOT NULL auto_increment,
+ `carrier_id` int(11) default NULL,
+ `prefix` varchar(255) NOT NULL,
+ `suffix` varchar(255) NOT NULL,
+ `codec` varchar(255) NOT NULL,
+ `enabled` boolean NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ KEY `carrier_id` (`carrier_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2008-11-21 22:48:11
Deleted: freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/postgres-8.3.sql
Copied: freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/postgres-8.3.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/C/lcr/sql/postgres-8.3.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/postgres-8.3.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/C/lcr/sql/postgres-8.3.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,85 @@
+-- Table: carriers
+
+-- DROP TABLE carriers;
+
+CREATE TABLE carriers
+(
+ id serial NOT NULL,
+ carrier_name VARCHAR(255) NOT NULL,
+ enabled boolean NOT NULL DEFAULT 'true',
+ CONSTRAINT carriers_pkey PRIMARY KEY (id)
+);
+
+-- Table: carrier_gateway
+
+-- DROP TABLE carrier_gateway;
+
+CREATE TABLE carrier_gateway
+(
+ id serial NOT NULL,
+ carrier_id integer REFERENCES carriers(id),
+ prefix VARCHAR(128) NOT NULL DEFAULT '',
+ suffix VARCHAR(128) NOT NULL DEFAULT '',
+ codec VARCHAR(128) NOT NULL DEFAULT '',
+ enabled boolean NOT NULL DEFAULT 'true',
+ CONSTRAINT carrier_gateway_pkey PRIMARY KEY (id)
+);
+
+-- Index: gateway
+
+-- DROP INDEX gateway;
+
+CREATE UNIQUE INDEX gateway
+ ON carrier_gateway
+ (prefix, suffix);
+
+
+-- Table: lcr
+
+-- DROP TABLE lcr;
+
+CREATE TABLE lcr
+(
+ id serial NOT NULL,
+ digits NUMERIC(20, 0),
+ rate numeric(11,5) NOT NULL,
+ intra numeric(11,5) NOT NULL,
+ carrier_id integer NOT NULL REFERENCES carriers(id),
+ lead_strip integer NOT NULL DEFAULT 0,
+ trail_strip integer NOT NULL DEFAULT 0,
+ prefix VARCHAR(16) NOT NULL DEFAULT '',
+ suffix VARCHAR(16) NOT NULL DEFAULT '',
+ lcr_profile INTEGER NOT NULL DEFAULT 0,
+ date_start timestamp with time zone NOT NULL DEFAULT '1970-01-01',
+ date_end timestamp with time zone NOT NULL DEFAULT '2030-12-31',
+ quality numeric(10,6) NOT NULL DEFAULT 0,
+ reliability numeric(10,6) NOT NULL DEFAULT 0,
+ cid VARCHAR(32) NOT NULL DEFAULT '',
+ enabled boolean NOT NULL DEFAULT 'true',
+ CONSTRAINT lcr_pkey PRIMARY KEY (id)
+);
+
+-- Index: digits_rate
+
+-- DROP INDEX digits_rate;
+
+CREATE INDEX digits_rate
+ ON lcr
+ USING btree
+ (digits, rate);
+
+-- Index: profile_digits_15
+
+-- DROP INDEX profile_digits_15;
+
+CREATE INDEX profile_digits_15
+ ON lcr
+ (digits, lcr_profile);
+
+-- Index: unique_route
+
+-- DROP INDEX unique_route;
+
+CREATE INDEX unique_route
+ ON lcr
+ (digits, carrier_id);
Copied: freeswitch/branches/seven/contrib/intralanman/C/tel_handler (from rev 14471, freeswitch/trunk/contrib/intralanman/C/tel_handler)
Deleted: freeswitch/branches/seven/contrib/intralanman/C/tel_handler/Makefile
Copied: freeswitch/branches/seven/contrib/intralanman/C/tel_handler/Makefile (from rev 14471, freeswitch/trunk/contrib/intralanman/C/tel_handler/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/C/tel_handler/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/C/tel_handler/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+CFLAGS=-I../../../../../libs/esl/src/include -g -ggdb -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
+LDFLAGS=-L../../../../../libs/esl/ -lpthread -lesl
+
+all: tel_handler
+
+tel_handler: tel_handler.c
+ $(CC) $(CFLAGS) tel_handler.c -o tel_handler $(LDFLAGS) $(LIBS)
+
+clean:
+ rm -f tel_handler
+
+install: all
+ cp tel_handler /usr/bin/tel_handler
Deleted: freeswitch/branches/seven/contrib/intralanman/C/tel_handler/tel_handler.c
Copied: freeswitch/branches/seven/contrib/intralanman/C/tel_handler/tel_handler.c (from rev 14471, freeswitch/trunk/contrib/intralanman/C/tel_handler/tel_handler.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/C/tel_handler/tel_handler.c (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/C/tel_handler/tel_handler.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <esl.h>
+
+int main(int argc, char *argv[])
+{
+ esl_handle_t handle = {{0}};
+ char buf[1024];
+
+ if (argc != 2) {
+ printf("Not enough args!!");
+ return 1;
+ }
+
+ esl_connect(&handle, "localhost", 8021, "ClueCon");
+ snprintf(buf, sizeof(buf), "api pa call %s", argv[1]);
+ esl_send_recv(&handle, buf);
+ esl_disconnect(&handle);
+ return 0;
+}
Copied: freeswitch/branches/seven/contrib/intralanman/PHP (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP)
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl)
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration)
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/acl.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/acl.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/acl.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/acl.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/acl.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * acl.conf.php
+ */
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class to write the XML for acl.conf
+ */
+class acl_conf extends fs_configuration {
+
+ public function acl_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $acl = $this -> get_acl();
+ $this -> write_acl($acl);
+ }
+
+ /**
+ * Write individual node elements with their attributes
+ *
+ * @param array $node_attributes
+ */
+ private function write_node($node_attributes) {
+ $this -> xmlw -> startElement('node');
+ $this -> xmlw -> writeAttribute('type', $node_attributes['type']);
+ $this -> xmlw -> writeAttribute('cidr', $node_attributes['cidr']);
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Fetch the ACL data from the database
+ *
+ * @return array $acl_data
+ */
+ private function get_acl() {
+ $query = sprintf(
+ 'SELECT * FROM acl_lists al JOIN acl_nodes an ON an.list_id=al.id;'
+ );
+ $acl_data = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($profiles)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ return $acl_data;
+ }
+
+ /**
+ * Write ACL data out
+ *
+ * @param array $acl
+ */
+ private function write_acl($acl) {
+ $this -> xmlw -> startElement('network-lists');
+ $node_count = count($acl);
+ for ($i=0; $i<$node_count; $i++) {
+ $last = $i - 1;
+ $next = $i + 1;
+ if ($last < 0 || $acl[$last]['acl_name'] != $acl[$i]['acl_name']) {
+ $this -> xmlw -> startElement('list');
+ $this -> xmlw -> writeAttribute('name', $acl[$i]['acl_name']);
+ $this -> xmlw -> writeAttribute(
+ 'default', $acl[$i]['default_policy']
+ );
+ }
+ $this -> write_node($acl[$i]);
+ if ((!array_key_exists($next, $acl))
+ || $acl[$next]['acl_name'] != $acl[$i]['acl_name']) {
+ $this -> xmlw -> endElement();
+ }
+ }
+ $this -> xmlw -> endElement();
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/conference.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/conference.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/conference.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/conference.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/conference.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,185 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * conference.conf.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Write XML for conference.conf
+*/
+class conference_conf extends fs_configuration {
+ /**
+ * Initializer method
+ * This method calls fs_configuration to initialize all of the
+ * objects and variables that we want to inherit
+ * @return void
+ */
+ public function conference_conf() {
+ $this -> fs_configuration();
+ }
+
+ /**
+ * Main sub-routine
+ * This method will call all of the other methods necessary
+ * to write out the XML for the conference.conf
+ * @return void
+ */
+ public function main() {
+ $this -> write_advertises();
+ $this -> write_controls();
+ $this -> write_profiles();
+ }
+
+ /**
+ * Write XML for <advertises>
+ * This method will write the elements and attributes for the
+ * conferences that are to be advertised
+ * @return void
+ */
+ private function write_advertises() {
+ $query = "SELECT * FROM conference_advertise ORDER BY room";
+ $advertises = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($advertises)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ $advertise_count = count($advertises);
+ if ($advertise_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('advertise');
+ for ($i=0; $i<$advertise_count; $i++) {
+ //$this -> comment_array($advertises[$i]);
+ $this -> xmlw -> startElement('room');
+ $this -> xmlw -> writeAttribute('name', $advertises[$i]['room']);
+ $this -> xmlw -> writeAttribute('status', $advertises[$i]['status']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+
+ /**
+ * Pull conference profiles from the database
+ * This method will pull the conference profiles
+ * from the database using the PDO extension
+ * @return array
+ */
+ private function get_profiles_array() {
+ $query = sprintf('%s %s;'
+ , "SELECT * FROM conference_profiles"
+ , "ORDER BY profile_name"
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ while ($row = $res -> fetch(PDO::FETCH_ASSOC)) {
+ $pn = $row['profile_name'];
+ $profiles[$pn][] = $row;
+ }
+ return $profiles;
+ }
+
+ /**
+ * Write XML for <profiles>
+ * This method will write the XML of the array
+ * from get_profiles_array
+ * @return void
+ */
+ private function write_profiles() {
+ $profiles_array = $this -> get_profiles_array();
+ $profiles_count = count($profiles_array);
+ if ($profiles_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('profiles');
+
+ foreach ($profiles_array as $profile_name => $profile_data) {
+ $this -> xmlw -> startElement('profile');
+ $this -> xmlw -> writeAttribute('name', $profile_name);
+ foreach ($profile_data as $params) {
+ //$this -> comment_array($profiles_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $params['param_name']);
+ $this -> xmlw -> writeAttribute('value', $params['param_value']);
+ $this -> xmlw -> endElement();//</param>
+
+ }
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Pull caller-controls from database via PDO
+ * This method will pull the conference caller-controls from
+ * the database using the PDO extension
+ * @return array
+ */
+ private function get_controls_array() {
+ $query = sprintf(
+ "SELECT * FROM conference_controls ORDER BY conf_group"
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ while ($row = $res -> fetch(PDO::FETCH_ASSOC)) {
+ $cg = $row['conf_group'];
+ $profiles[$cg][] = $row;
+ }
+ return $profiles;
+ }
+
+ /**
+ * Write XML for <caller-controls>
+ * This method will write the XML of the array
+ * from get_controls_array
+ * @return void
+ */
+ private function write_controls() {
+ $controls_array = $this -> get_controls_array();
+ $controls_count = count($controls_array);
+ if (FS_PDO::isError($controls_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($controls_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('caller-controls');
+
+ foreach ($controls_array as $group_name => $control_data) {
+ $this -> xmlw -> startElement('group');
+ $this -> xmlw -> writeAttribute('name', $group_name);
+ foreach ($control_data as $controls) {
+
+ //$this -> comment_array($controls_array[$i]);
+ $this -> xmlw -> startElement('control');
+ $this -> xmlw -> writeAttribute('action', $controls['action']);
+ $this -> xmlw -> writeAttribute('digits', $controls['digits']);
+ $this -> xmlw -> endElement();
+
+ }
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * console.conf.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * @todo make this configurable via db rather than hardcoded.
+ * File containing the base class for all curl XML output
+*/
+class console_conf extends fs_configuration {
+ function console_conf() {
+ $this -> fs_configuration();
+ }
+
+ /**
+ * Currently this method does pretty much everything
+ */
+ function main() {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'Console configuration');
+
+ $this -> xmlw -> startElement('mappings');
+
+ $this -> xmlw -> startElement('map');
+ $this -> xmlw -> writeAttribute('name', 'all');
+ $this -> xmlw -> writeAttribute('value', 'notice,warning,error,crit,alert,info,debug');
+ $this -> xmlw -> endElement();
+
+ $this -> xmlw -> endElement();
+
+
+
+
+ $this -> xmlw -> startElement('settings');
+
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', 'colorize');
+ $this -> xmlw -> writeAttribute('value', 'true');
+ $this -> xmlw -> endElement();
+
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', 'loglevel');
+ $this -> xmlw -> writeAttribute('value', 'debug');
+ $this -> xmlw -> endElement();
+
+ $this -> xmlw -> endElement();
+
+
+
+
+ $this -> xmlw -> endElement();
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/dingaling.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/dingaling.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/dingaling.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/dingaling.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/dingaling.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,142 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * dingaling.conf.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Write XML for dingaling.conf
+*/
+class dingaling_conf extends fs_configuration {
+ /**
+ * Initializer method
+ * This method calls fs_configuration to initialize all of the
+ * objects and variables that we want to inherit
+ * @return void
+ */
+ public function dingaling_conf() {
+ $this -> fs_configuration();
+ }
+
+ /**
+ * Main sub-routine
+ * This method will call all of the other methods necessary
+ * to write out the XML for the dingaling.conf
+ * @return void
+ */
+ public function main() {
+ $this -> write_settings();
+ $this -> write_profiles();
+ }
+
+ /**
+ * Pull dingaling profiles from the database
+ * @return array
+ */
+ private function get_params_array() {
+ $query = sprintf('%s %s;'
+ , "SELECT * FROM dingaling_profile_params"
+ , "ORDER BY dingaling_id"
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ while ($row = $res -> fetchRow()) {
+ $id = $row['dingaling_id'];
+ $profiles[$id][] = $row;
+ }
+ return $profiles;
+ }
+
+ /**
+ * get dingaling profile names, types, and ids
+ * @return array
+ */
+ private function get_profile_array() {
+ $query = sprintf('SELECT * FROM dingaling_profiles');
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ while ($row = $res -> fetchRow()) {
+ $id = $row['id'];
+ $profiles[$id] = $row['type'];
+ }
+ return $profiles;
+ }
+
+
+ /**
+ * Write XML for <profile>s
+ * This method will write the XML of the array
+ * from get_profiles_array
+ * @return void
+ */
+ private function write_profiles() {
+ $profile_array = $this -> get_profile_array();
+ $params_array = $this -> get_params_array();
+ $params_count = count($params_array);
+ if ($params_count < 1) {
+ return ;
+ }
+ while (list($id, $type) = each($profile_array)) {
+ $this -> xmlw -> startElement('profile');
+ $this -> xmlw -> writeAttribute('type', $type);
+ if (!empty($params_array[$id])) {
+ $this_param_count = count($params_array[$id]);
+ for ($i=0; $i<$this_param_count; $i++) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute(
+ 'name', $params_array[$id][$i]['param_name']
+ );
+ $this -> xmlw -> writeAttribute(
+ 'value', $params_array[$id][$i]['param_value']
+ );
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+ }
+ }
+
+
+ /**
+ * Write out the XML for the dingaling <settings>
+ *@return void
+ */
+ private function write_settings() {
+ $query = sprintf('SELECT * FROM dingaling_settings');
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ $setting_count = count($res);
+ if ($setting_count > 0) {
+ $this -> xmlw -> startElement('settings');
+ for ($i=0; $i<$setting_count; $i++) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $res[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $res[$i]['param_value']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/iax.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/iax.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/iax.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/iax.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/iax.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,172 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * iax.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * @todo add gateways, aliases, etc when support is added into FS
+ * Class to write XML for iax.conf
+*/
+class iax_conf extends fs_configuration {
+ public function iax_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $profiles = $this -> get_profiles();
+ $this -> write_config($profiles);
+ }
+
+ private function get_profiles() {
+ $query = "SELECT * FROM iax_conf ORDER BY id LIMIT 1";
+ $profiles = $this -> db -> queryAll($query);
+ return $profiles;
+ }
+
+ private function write_aliases($profile_id) {
+ $query = "SELECT * FROM iax_aliases WHERE iax_id=$profile_id ";
+ $aliases_array = $this -> db -> queryAll($query);
+ $aliases_count = count($aliases_array);
+ if (FS_PDO::isError($aliases_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($aliases_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('aliases');
+
+ for ($i=0; $i<$aliases_count; $i++) {
+ //$this -> comment_array($aliases_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $aliases_array[$i]['alias_name']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ private function write_settings($profile_id) {
+ $query = "SELECT * FROM iax_settings WHERE iax_id=$profile_id "
+ . "ORDER BY iax_id, param_name";
+ $settings_array = $this -> db -> queryAll($query);
+ $settings_count = count($settings_array);
+ if (FS_PDO::isError($settings_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($settings_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('settings');
+
+ for ($i=0; $i<$settings_count; $i++) {
+ //$this -> comment_array($settings_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $settings_array[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $settings_array[$i]['param_value']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ private function write_gateways($profile_id) {
+ $query = "SELECT * FROM iax_gateways WHERE iax_id=$profile_id "
+ . "ORDER BY gateway_name, gateway_param";
+ $gateway_array = $this -> db -> queryAll($query);
+ $gateway_count = count($gateway_array);
+ //$this -> comment_array($gateway_array);
+ if (MDB2::isError($gateway_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($gateway_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('gateways');
+ for ($i=0; $i<$gateway_count; $i++) {
+ $this_gateway = $gateway_array[$i]['gateway_name'];
+ if ($this_gateway != $gateway_array[$i-1]['gateway_name']) {
+ $this -> xmlw -> startElement('gateway');
+ $this -> xmlw -> writeAttribute('name', $this_gateway);
+ }
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $gateway_array[$i]['gateway_param']);
+ $this -> xmlw -> writeAttribute('value', $gateway_array[$i]['gateway_value']);
+ $this -> xmlw -> endElement();
+ if (!array_key_exists($i+1, $gateway_array)
+ || $this_gateway != $gateway_array[$i+1]['gateway_name']) {
+ $this -> xmlw -> endElement();
+ }
+ $last_gateway = $this_gateway;
+ }
+ $this -> xmlw -> endElement(); //</gateways>
+ }
+
+ private function write_domains($profile_id) {
+ $query = "SELECT * FROM iax_domains WHERE iax_id=$profile_id";
+ $domain_array = $this -> db -> queryAll($query);
+ $domain_count = count($domain_array);
+ if (FS_PDO::isError($domain_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($domain_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('domains');
+ for ($i=0; $i<$domain_count; $i++) {
+ $this -> xmlw -> startElement('domain');
+ $this -> xmlw -> writeAttribute('name', $domain_array[$i]['domain_name']);
+ $this -> xmlw -> writeAttribute(
+ 'parse', ($domain_array[$i]['parse'] == 1 ? 'true' : 'false')
+ );
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ private function write_single_profile($profile) {
+ /* //reserved for multi-profile
+ $this -> xmlw -> startElement('profile');
+ $this -> xmlw -> writeAttribute('name', $profile['profile_name']);
+ */
+ //$this -> write_aliases($profile['id']);
+ //$this -> write_domains($profile['id']);
+ //$this -> write_gateways($profile['id']);
+ $this -> write_settings($profile['id']);
+ //$this -> xmlw -> endElement(); //reserved for multi-profile
+ }
+
+ /**
+ * Write XML for iax.conf profiles
+ *
+ * @param unknown_type $profiles
+ */
+ private function write_config($profiles) {
+ $profile_count = count($profiles);
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'IAX Endpoint');
+ /*
+ $this -> xmlw -> startElement('profiles');
+ //we'll add this back if ever multiple iax profiles are supported
+ */
+ for ($i=0; $i<$profile_count; $i++) {
+ $this -> write_single_profile($profiles[$i]);
+ }
+ //$this -> xmlw -> endElement(); //this too
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/ivr.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/ivr.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/ivr.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/ivr.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/ivr.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,117 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * ivr.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Write XML for ivr.conf
+*/
+class ivr_conf extends fs_configuration {
+ public function ivr_conf() {
+ $this -> fs_configuration();
+ }
+
+ /**
+ * This method will run all of the methods necessary to return
+ * the XML for the ivr.conf
+ * @return void
+ */
+ public function main() {
+ $ivrs = $this -> get_ivr_array();
+ $this -> write_config($ivrs);
+ }
+
+ /**
+ * This method will fetch all of the ivr menus from the database
+ * using the MDB2 pear class
+ * @return array
+ */
+ private function get_ivr_array() {
+ $query = "SELECT * FROM ivr_conf";
+ $menus = $this -> db -> queryAll($query);
+ return $menus;
+ }
+
+ /**
+ * This method will write all of the entry elements with
+ * their corresponding attributes
+ * @return void
+ */
+ private function write_entries($ivr_id) {
+ $query = sprintf(
+ "SELECT * FROM ivr_entries WHERE ivr_id=$ivr_id ORDER BY digits"
+ );
+ $entries_array = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($entries_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ $entries_count = count($entries_array);
+ if ($entries_count < 1) {
+ return ;
+ }
+ $entries_count = count($entries_array);
+ for ($i=0; $i<$entries_count; $i++) {
+ //$this -> comment_array($entries_array[$i]);
+ $this -> xmlw -> startElement('entry');
+ $this -> xmlw -> writeAttribute('action', $entries_array[$i]['action']);
+ $this -> xmlw -> writeAttribute('digits', $entries_array[$i]['digits']);
+ if (!empty($entries_array[$i]['params'])) {
+ $this -> xmlw -> writeAttribute('params', $entries_array[$i]['params']);
+ }
+ $this -> xmlw -> endElement();//</param>
+ }
+ }
+
+ /**
+ * This method will evaluate the data from the db and
+ * write attributes that need written
+ * @return void
+ */
+ private function write_menu_attributes($menu_data) {
+ $this -> xmlw -> writeAttribute('name', $menu_data['name']);
+ $this -> xmlw -> writeAttribute('greet-long', $menu_data['greet_long']);
+ $this -> xmlw -> writeAttribute('greet-short', $menu_data['greet_short']);
+ $this -> xmlw -> writeAttribute('invalid-sound', $menu_data['invalid_sound']);
+ $this -> xmlw -> writeAttribute('exit-sound', $menu_data['exit_sound']);
+ $this -> xmlw -> writeAttribute('timeout', $menu_data['timeout']);
+ $this -> xmlw -> writeAttribute('max-failures', $menu_data['max_failures']);
+ if (!empty($menu_data['tts_engine'])) {
+ $this -> xmlw -> writeAttribute('tts-engine', $menu_data['tts_engine']);
+ }
+ if (!empty($menu_data['tts_voice'])) {
+ $this -> xmlw -> writeAttribute('tts-voice', $menu_data['tts_voice']);
+ }
+ //$this -> xmlw -> writeAttribute('', $menu_data['']);
+ }
+
+ /**
+ * This method will do the writing of the "menu" elements
+ * and call the write_entries method to do the writing of
+ * individual menu's "entry" elements
+ * @return void
+ */
+ private function write_config($menus) {
+ $menu_count = count($menus);
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'Sofia SIP Endpoint');
+ $this -> xmlw -> startElement('menus');
+ for ($i=0; $i<$menu_count; $i++) {
+ $this -> xmlw -> startElement('menu');
+ $this -> write_menu_attributes($menus[$i]);
+ $this -> write_entries($menus[$i]['id']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/limit.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/limit.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/limit.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/limit.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/limit.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,74 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * limit.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Write XML for limit.conf
+*/
+class limit_conf extends fs_configuration {
+
+ public function limit_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $params = $this -> get_params_array($this -> db);
+ $this -> write_params_array($params);
+ $this -> output_xml();
+
+ }
+
+ /**
+ * Pull limit params from the db
+ * @return array
+ */
+ private function get_params_array() {
+ $query = sprintf('SELECT * FROM limit_conf;');
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ $this -> comment($res -> numRows() . 'rows');
+ if ($res -> numRows() == 0) {
+ return array();
+ }
+ while ($row = $res -> fetchRow(MDB2_FETCHMODE_ASSOC)) {
+ $feeds_array[] = $row;
+ }
+ return $feeds_array;
+ }
+
+ /**
+ * Write out the XML of params retreived from get_params_array
+ * @see get_params_array
+ * @param unknown_type $params
+ */
+ private function write_params_array($params) {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'Call Limiter');
+ $this -> xmlw -> startElement('settings');
+
+ $param_count = count($params);
+ for ($i=0; $i<$param_count; $i++) {
+ $this -> comment("$param_count/$i");
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $params[$i]['name']);
+ $this -> xmlw -> writeAttribute('value', $params[$i]['value']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/local_stream.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/local_stream.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/local_stream.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/local_stream.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/local_stream.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,73 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * local_stream.conf.php
+ */
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class to write the XML for local_stream.conf
+ */
+class local_stream_conf extends fs_configuration {
+
+ public function local_stream_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $directories = $this -> get_directories();
+ $this -> write_directories($directories);
+ }
+
+ private function write_settings($profile_id) {
+ $query = sprintf('%s %s %s;'
+ , "SELECT * FROM local_stream_settings "
+ , "WHERE stream_id=$profile_id "
+ , "ORDER BY stream_id, param_name"
+ );
+ $settings_array = $this -> db -> queryAll($query);
+ $settings_count = count($settings_array);
+ if (FS_PDO::isError($settings_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($settings_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('settings');
+
+ for ($i=0; $i<$settings_count; $i++) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $settings_array[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $settings_array[$i]['param_value']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> write_email($profile_id);
+ $this -> xmlw -> endElement();
+ }
+
+ private function get_directories() {
+ $query = sprintf('SELECT * FROM local_stream_conf;');
+ $profiles = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($profiles)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return array();
+ }
+ return $profiles;
+ }
+
+ private function write_directories($directories) {
+ $directory_count = count($directories);
+ for ($i=0; $i<$directory_count; $i++) {
+ $this -> write_settings($directories[$i]);
+ }
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/post_load_modules.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/post_load_modules.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/post_load_modules.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/post_load_modules.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/post_load_modules.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,77 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * post_load_modules.conf.php
+ */
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class to write the post_load_modules.conf XML for FreeSWITCH
+*/
+class post_load_modules_conf extends fs_configuration {
+
+ public function post_load_modules_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $params = $this -> get_modules_array($this -> db);
+ $this -> write_modules_array($params);
+ $this -> output_xml();
+
+ }
+
+ /**
+ * This method will pull the postloaded modules from the database
+ * @return array
+ */
+ function get_modules_array() {
+ $query = sprintf(
+ 'SELECT * FROM post_load_modules_conf WHERE load_module=1 ORDER BY priority;'
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($res -> getMessage());
+ return array();
+ }
+ $this -> comment($res -> numRows() . 'rows');
+ if ($res -> numRows() == 0) {
+ return array();
+ }
+ while ($row = $res -> fetchRow()) {
+ $feeds_array[] = $row;
+ }
+ return $feeds_array;
+ }
+
+ /**
+ * This method will write the XML from the array returned by get_modules_array
+ * @see post_load_modules_conf::get_modules_array
+ * @param array $params array of modules to load
+ */
+ function write_modules_array($params) {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute(
+ 'description', 'Load All External Modules'
+ );
+ $this -> xmlw -> startElement('modules');
+
+ $param_count = count($params);
+ for ($i=0; $i<$param_count; $i++) {
+ $this -> xmlw -> startElement('load');
+ $this -> xmlw -> writeAttribute('module', $params[$i]['module_name']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+
+}
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/rss.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/rss.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/rss.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/rss.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/rss.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,70 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ *
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * class to write XML for rss.conf
+*/
+class rss_conf extends fs_configuration {
+
+ function rss_conf() {
+ $this -> fs_configuration();
+ }
+
+ function main() {
+ $feeds_array = $this -> get_feeds_array();
+ $this -> xmlw -> startElement('feeds');
+ $this -> xmlw -> endElement();
+ $this -> write_xml($feeds_array);
+ }
+
+ /**
+ * Get RSS feed info from DB
+ *
+ * @return array
+ */
+ function get_feeds_array() {
+ $query = sprintf(
+ 'SELECT * FROM rss_conf ORDER BY priority, local_file;'
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ return false;
+ }
+ while ($row = $res -> fetchRow()) {
+ $feeds_array[] = $row;
+ }
+ return $feeds_array;
+ }
+
+ /**
+ * Write XML for RSS feeds that were pulled by get_feeds_arrray
+ * @see get_feeds_array
+ * @param unknown_type $feeds_in
+ */
+ function write_xml($feeds_in) {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'RSS Parser');
+ $this -> xmlw -> startElement('feeds');
+ $feed_count = count($feeds_in);
+ for ($i=0; $i<$feed_count; $i++) {
+ $this -> xmlw -> startElement('feed');
+ $this -> xmlw -> writeAttribute(
+ 'name', $feeds_in[$i]['description']
+ );
+ $this -> xmlw -> text($feeds_in[$i]['local_file']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/sofia.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/sofia.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/sofia.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/sofia.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/sofia.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,196 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * sofia.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Write XML for sofia.conf
+*/
+class sofia_conf extends fs_configuration {
+ public function sofia_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $profiles = $this -> get_profiles();
+ $this -> write_config($profiles);
+ }
+
+ /**
+ * Pull the sofia profiles from the db
+ * @return array
+ */
+ private function get_profiles() {
+ $query = "SELECT * FROM sofia_conf";
+ $profiles = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($profiles)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ return $profiles;
+ }
+
+ /**
+ * Write aliases for current sofia <profile>
+ * @param integer $profile_id id of the sofia profile in sofia_conf
+ */
+ private function write_aliases($profile_id) {
+ $query = "SELECT * FROM sofia_aliases WHERE sofia_id=$profile_id ";
+ $aliases_array = $this -> db -> queryAll($query);
+ $aliases_count = count($aliases_array);
+ if (FS_PDO::isError($aliases_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($aliases_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('aliases');
+
+ for ($i=0; $i<$aliases_count; $i++) {
+ //$this -> comment_array($aliases_array[$i]);
+ $this -> xmlw -> startElement('alias');
+ $this -> xmlw -> writeAttribute('name', $aliases_array[$i]['alias_name']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write the <settings> for the current profile
+ * @param integer $profile_id id of the sofia profile in sofia_conf
+ */
+ private function write_settings($profile_id) {
+ $query = "SELECT * FROM sofia_settings WHERE sofia_id=$profile_id "
+ . "ORDER BY sofia_id, param_name";
+ $settings_array = $this -> db -> queryAll($query);
+ $settings_count = count($settings_array);
+ if (FS_PDO::isError($settings_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($settings_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('settings');
+
+ for ($i=0; $i<$settings_count; $i++) {
+ //$this -> comment_array($settings_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $settings_array[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $settings_array[$i]['param_value']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write <gateways> XML for current profile
+ * @param integer $profile_id id of the sofia profile in sofia_conf
+ */
+ private function write_gateways($profile_id) {
+ $query = "SELECT * FROM sofia_gateways WHERE sofia_id=$profile_id "
+ . "ORDER BY gateway_name, gateway_param";
+ $gateway_array = $this -> db -> queryAll($query);
+ $gateway_count = count($gateway_array);
+ //$this -> comment_array($gateway_array);
+ if (FS_PDO::isError($gateway_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($gateway_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('gateways');
+ for ($i=0; $i<$gateway_count; $i++) {
+ $this_gateway = $gateway_array[$i]['gateway_name'];
+ if ($this_gateway != $gateway_array[$i-1]['gateway_name']) {
+ $this -> xmlw -> startElement('gateway');
+ $this -> xmlw -> writeAttribute('name', $this_gateway);
+ }
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $gateway_array[$i]['gateway_param']);
+ $this -> xmlw -> writeAttribute('value', $gateway_array[$i]['gateway_value']);
+ $this -> xmlw -> endElement();
+ if (!array_key_exists($i+1, $gateway_array)
+ || $this_gateway != $gateway_array[$i+1]['gateway_name']) {
+ $this -> xmlw -> endElement();
+ }
+ $last_gateway = $this_gateway;
+ }
+ $this -> xmlw -> endElement(); //</gateways>
+ }
+
+ /**
+ * Write <domains> XML for current sofia profile
+ * @param integer $profile_id id of sofia profile in sofia_conf
+ */
+ private function write_domains($profile_id) {
+ $query = "SELECT * FROM sofia_domains WHERE sofia_id=$profile_id";
+ $domain_array = $this -> db -> queryAll($query);
+ $domain_count = count($domain_array);
+ if (FS_PDO::isError($domain_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($domain_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('domains');
+ for ($i=0; $i<$domain_count; $i++) {
+ $this -> xmlw -> startElement('domain');
+ $this -> xmlw -> writeAttribute('name', $domain_array[$i]['domain_name']);
+ $this -> xmlw -> writeAttribute(
+ 'parse', ($domain_array[$i]['parse'] == 1 ? 'true' : 'false')
+ );
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write XML for single sofia profile (including all subsections)
+ * This method opens and closes the <profile> as well as calling
+ * other methods to complete the other subsections of the XML
+ * @param array $profile array of the current profile
+ */
+ private function write_single_profile($profile) {
+ $this -> xmlw -> startElement('profile');
+ $this -> xmlw -> writeAttribute('name', $profile['profile_name']);
+ $this -> write_aliases($profile['id']);
+ $this -> write_domains($profile['id']);
+ $this -> write_gateways($profile['id']);
+ $this -> write_settings($profile['id']);
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Iterate over the profiles and write the corresponding XML via other methods
+ * @param array $profiles multi-dimentional array from get_profiles
+ */
+ private function write_config($profiles) {
+ $profile_count = count($profiles);
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'Sofia SIP Endpoint');
+ $this -> xmlw -> startElement('profiles');
+ for ($i=0; $i<$profile_count; $i++) {
+ $this -> write_single_profile($profiles[$i]);
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/spidermonkey.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/spidermonkey.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/spidermonkey.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/spidermonkey.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/spidermonkey.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,51 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * spidermonkey.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * @todo make configuration get pulled from db? maybe just use defines if there's not evern gonna be too many options
+ * Class for writing spidermonkey.conf XML
+*/
+class spidermonkey_conf extends fs_configuration {
+
+ function spidermonkey_conf() {
+ $this -> fs_configuration();
+ }
+
+ function main() {
+ $params = $this -> get_params();
+ $this -> write_params($params);
+ }
+
+ private function get_params() {
+ return array(
+ 'mod_spidermonkey_teletone',
+ 'mod_spidermonkey_odbc',
+ 'mod_spidermonkey_core_db'
+ );
+ }
+
+ private function write_params($modules) {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'JavaScript Plug-In Configuration');
+ $this -> xmlw -> startElement('modules');
+ $module_count = count($modules);
+ for ($i=0; $i<$module_count; $i++) {
+ $this -> xmlw -> startElement('load');
+ $this -> xmlw -> writeAttribute('module', $modules[$i]);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/voicemail.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/voicemail.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/voicemail.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/voicemail.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/voicemail.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,132 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * voicemail.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Writes out voicemail.conf XML
+ * @see fs_configuration
+*/
+class voicemail_conf extends fs_configuration {
+
+ public function voicemail_conf() {
+ $this -> fs_configuration();
+ }
+
+ public function main() {
+ $profiles = $this -> get_profiles();
+ $this -> write_config($profiles);
+ }
+
+ /**
+ * Get voicemail profiles from db
+ * @return array
+ */
+ private function get_profiles() {
+ $query = "SELECT * FROM voicemail_conf ORDER BY id";
+ $profiles = $this -> db -> queryAll($query);
+ return $profiles;
+ }
+
+ /**
+ * Write XML for voicemail <settings>
+ * @return void
+ */
+ private function write_settings($profile_id) {
+ $query = sprintf('%s %s %s;'
+ , "SELECT * FROM voicemail_settings "
+ , "WHERE voicemail_id=$profile_id "
+ , "ORDER BY voicemail_id, param_name"
+ );
+ $settings_array = $this -> db -> queryAll($query);
+ $settings_count = count($settings_array);
+ if (FS_PDO::isError($settings_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($settings_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('settings');
+
+ for ($i=0; $i<$settings_count; $i++) {
+ //$this -> comment_array($settings_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $settings_array[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $settings_array[$i]['param_value']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> write_email($profile_id);
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write XML for voicemail email settings
+ * @return void
+ */
+ private function write_email($profile_id) {
+ $query = sprintf('%s %s %s;'
+ , "SELECT * FROM voicemail_email "
+ , "WHERE voicemail_id=$profile_id "
+ , "ORDER BY voicemail_id, param_name"
+ );
+ $settings_array = $this -> db -> queryAll($query);
+ $settings_count = count($settings_array);
+ if (FS_PDO::isError($settings_array)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ return ;
+ }
+ if ($settings_count < 1) {
+ return ;
+ }
+ $this -> xmlw -> startElement('email');
+
+ for ($i=0; $i<$settings_count; $i++) {
+ //$this -> comment_array($settings_array[$i]);
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $settings_array[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $settings_array[$i]['param_value']);
+ $this -> xmlw -> endElement();//</param>
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write the XML for the current profile in write_profiles
+ * @return void
+ */
+ private function write_single_profile($profile) {
+ $this -> xmlw -> startElement('profile');
+ $this -> xmlw -> writeAttribute('name', $profile['vm_profile']);
+ $this -> write_settings($profile['id']);
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write the entire XML config for the voicemail module
+ * Write XML by calling other methods to do specific areas of config
+ * @return void
+ */
+ private function write_config($profiles) {
+ $profile_count = count($profiles);
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'voicemail Endpoint');
+ $this -> xmlw -> startElement('profiles');
+ for ($i=0; $i<$profile_count; $i++) {
+ $this -> write_single_profile($profiles[$i]);
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/xml_cdr.conf.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/xml_cdr.conf.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/configuration/xml_cdr.conf.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/xml_cdr.conf.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/configuration/xml_cdr.conf.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * xml_cdr.conf.php
+ */
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class for writing xml_cdr.conf XML
+*/
+class xml_cdr_conf extends fs_configuration {
+ function xml_cdr_conf() {
+ $this -> fs_configuration();
+ }
+
+ function main() {
+ $params = $this -> get_settings();
+ $this -> write_settings($params);
+ }
+
+ function get_settings() {
+ return array('url'=>'http://$${curl_host}/fs_curl/cdr.php', 'encode'=>'true');
+ return array(
+ 'url'=>'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']
+ , 'encode'=>'true'
+ );
+ }
+
+ function write_settings($params) {
+ $this -> xmlw -> startElement('configuration');
+ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php'));
+ $this -> xmlw -> writeAttribute('description', 'CDRs via XML Post');
+ $this -> xmlw -> startElement('settings');
+ while (list($name, $value) = each($params)) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $name);
+ $this -> xmlw -> writeAttribute('value', $value);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplan_importer.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplan_importer.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/dialplan_importer.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplan_importer.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplan_importer.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,213 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Dialplan
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+*/
+
+/**
+ * Switched to simple xml, pdo and new schemea. Added several new supporint functions
+ * @author Michael Phillips
+ */
+
+require_once('libs/fs_pdo.php');
+
+/**
+ * require global definitions for FS_CURL
+ */
+require_once('global_defines.php');
+
+/**
+ * Output the upload form
+ * echo out the HTML for the upload form.
+ * @return null
+*/
+function upload_form() {
+ echo '<html>';
+ echo '<h2>Select A File To Import</h2>';
+ echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '" enctype="multipart/form-data">';
+ echo '<input type="file" name="file">';
+ echo '<input type="submit" name="confirmed">';
+ echo '<p><input type="checkbox" name="clear_dialplan" value="true"> Clear all dialplan data before insert?</p>';
+ echo '</form>';
+ echo '</html>';
+}
+
+/**
+ * Perform Insert Query
+ * take MDB2 object and query as params and
+ * perform query, setting error flag in the event
+ * of a db error.
+ * @return null
+*/
+function run_query($db, $query) {
+ syslog(LOG_INFO, $query);
+ $affected = $db -> exec($query);
+ if (FS_PDO::isError($affected)) {
+ if (!defined('UNSUCCESSFUL_QUERY')) {
+ define('UNSUCCESSFUL_QUERY', true);
+ }
+ echo "$query<br>\n";
+ echo $affected -> getMessage() . "\n";
+ }
+}
+
+/**
+ * Check uploaded file for obvious problems
+ * This function checks the uploaded file's
+ * size, type, length, etc to make sure it's
+ * worth continuing with processing
+ * @return bool
+*/
+function check_uploaded_file($file_array) {
+ if (!is_uploaded_file($file_array['tmp_name'])) {
+ echo "File NOT uploaded OK<br>";
+ die(upload_form());
+ } elseif ($file_array['size'] < 1) {
+ echo "File was empty";
+ die(upload_form());
+ } elseif ($file_array['error'] > 0) {
+ echo "Uploading file encountered error #" . $file_array['error'];
+ die(upload_form());
+ } elseif ($file_array['type'] != 'text/xml') {
+ echo "Expected file of type 'text/xml', but got " . $file_array['type'];
+ die(upload_form());
+ } else {
+ //echo "File seems uploaded OK<br>";
+ return true;
+ }
+}
+
+
+if (!array_key_exists('confirmed', $_REQUEST)) {
+ die(upload_form());
+}
+
+/*
+foreach ($_REQUEST as $key => $val) {
+echo "$key => $val <br>\n";
+}
+if (is_array($_FILES) && count($_FILES)>0) {
+echo "<h2>FILES is an array</h2>";
+print_r($_FILES);
+}
+*/
+
+
+// no need to do anything till we check that the file's ok
+if (check_uploaded_file($_FILES['file'])) {
+ $xml_file = $_FILES['file']['tmp_name'];
+ //move_uploaded_file($tmp_file, $xml_file);
+ //is_uploaded_file
+ //echo filesize($xml_file);
+ //echo $xml_file . "\n<br>";
+ $xml_str = file_get_contents($xml_file);
+}
+
+
+try {
+ $db = new FS_PDO(DEFAULT_DSN,DEFAULT_DSN_LOGIN, DEFAULT_DSN_PASSWORD);
+} catch(Exception $e) {
+ die($e->getMessage());
+}
+
+if($_POST['clear_dialplan']) {
+ truncate_dialplan();
+}
+
+echo "<pre>";
+$xml = simplexml_load_string($xml_str);
+$num_of_conext = sizeof($xml->context);
+
+
+$dialplan_id = insert_dialplan();
+foreach($xml->children() as $context => $context_children) {
+ //echo $context . " => " . $context_children->attributes()->name . "\n";
+ $context_id = insert_dialplan_context($dialplan_id, $context_children->attributes()->name);
+
+ foreach($context_children as $extension => $extension_children) {
+ //echo "\t" . $extension . " => name: " . $extension_children->attributes()->name . " continue: " . $extension_children->attributes()->continue . "\n" ;
+ if($extension == 'extension') { //verify again bad input
+ $extension_id = insert_dialplan_extension($context_id, $extension_children->attributes()->name, $extension_children->attributes()->continue);
+ }
+ foreach($extension_children as $condition => $condition_children) {
+ //echo "\t\t" . $condition . " => " . $condition_children->attributes()->field . ", expression; " .$condition_children->attributes()->expression . "\n";
+ $condition_id = insert_dialplan_condition($extension_id, $condition_children->attributes()->field, $condition_children->attributes()->expression);
+ foreach($condition_children as $action => $action_childress) {
+ //echo "\t\t\t" . $action . " => " . $action_childress->attributes()->application . ", expression; " .$action_childress->attributes()->data . "\n";
+ if($action == ('action' || 'anti-action')) { //verify again bad input
+ insert_dialplan_actions($condition_id, $action_childress->attributes()->application , $action_childress->attributes()->data, $action);
+ } else {
+ echo "bad xml $action";
+ }// end if
+ } //end foreach
+ } //end foreach
+ }// end foreach
+} // end foreach
+
+echo "</pre>";
+
+function insert_dialplan($domain = 'freeswitch' , $ip_address = '127.0.0.1') {
+ global $db;
+ $sql = sprintf("INSERT INTO dialplan (`domain`, `ip_address`) VALUES ('%s', '%s')", $domain, $ip_address);
+ $db->query($sql);
+ return $db->lastInsertId() ;
+}
+
+function insert_dialplan_context($dialplan_id, $context) {
+ global $db;
+ $sql = sprintf("INSERT INTO dialplan_context (`dialplan_id`, `context`, `weight`) VALUES (%d, '%s', %d)", $dialplan_id, $context, get_next_weight('context'));
+ $db->query($sql);
+ return $db->lastInsertId() ;
+}
+
+function insert_dialplan_extension($context_id, $name, $continue) {
+ global $db;
+ $sql = sprintf("INSERT INTO dialplan_extension (`context_id`, `name`, `continue`, `weight`) VALUES (%d, '%s', '%s', %d)", $context_id, $name, $continue, get_next_weight('extension'));
+ get_next_weight('extension');
+ $db->query($sql);
+ return $db->lastInsertId() ;
+}
+
+function insert_dialplan_condition($extension_id, $field, $expression) {
+ global $db;
+ $sql = sprintf("INSERT INTO dialplan_condition (`extension_id`, `field`, `expression`, `weight`) VALUES (%d, '%s', '%s', %d)", $extension_id, addslashes($field), addslashes($expression),get_next_weight('condition') );
+ //echo $sql . "\n";
+ $db->query($sql);
+ return $db->lastInsertId() ;
+}
+
+function insert_dialplan_actions($condition_id, $application , $data, $type) {
+ global $db;
+ $sql = sprintf("INSERT INTO dialplan_actions(`condition_id`, `application`, `data`, `type`, `weight`) VALUES (%d, '%s', '%s', '%s', %d)", $condition_id, addslashes($application), addslashes($data), $type, get_next_weight('actions'));
+ $db->query($sql);
+ return $db->lastInsertId() ;
+}
+
+function get_next_weight($table) { //used for weighting system
+ global $db;
+ $sql = sprintf("SELECT MAX(weight) as max FROM dialplan_%s", $table);
+ $res = $db->queryAll($sql);
+ return ($res[0]['max'] + 10);
+}
+
+function truncate_dialplan() {
+ global $db;
+ $db->query('TRUNCATE dialplan_extension');
+ $db->query('TRUNCATE dialplan');
+ $db->query('TRUNCATE dialplan_context');
+ $db->query('TRUNCATE dialplan_condition');
+ $db->query('TRUNCATE dialplan_actions');
+}
+
+if (defined(UNSUCCESSFUL_QUERY) && UNSUCCESSFUL_QUERY == true) {
+ echo "<h2>Some Queries Were Not Successful</h2>";
+} else {
+ echo "<h2>File Successfully Imported</h2>";
+}
+upload_form();
+
+//printf("<pre>%s</pre>", print_r($xml_obj, true);
+?>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplans (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/dialplans)
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplans/lcr.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplans/lcr.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/dialplans/lcr.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplans/lcr.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/dialplans/lcr.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,73 @@
+<?php
+
+class dialplan_lcr {
+
+ function main(&$obj) {
+ $obj -> xmlw -> startElement('section');
+ $obj -> xmlw -> writeAttribute('name', 'dialplan');
+ $obj -> xmlw -> writeAttribute('description', 'FreeSWITCH Dialplan');
+ $obj -> xmlw -> startElement('context');
+ $obj -> xmlw -> writeAttribute('name', 'lcr');
+ $obj -> xmlw -> startElement('extension');
+ $obj -> xmlw -> startElement('condition');
+ $applications = $this -> lcr_lookup($obj);
+ $app_count = count($applications);
+
+ $sets = array(
+ 'hangup_after_bridge'=>'true',
+ 'continue_on_failure'=>'true'
+ );
+ foreach ($sets as $var=>$val) {
+ $this -> xmlw -> startElement('action');
+ $this -> xmlw -> writeAttribute('application', 'set');
+ $this -> xmlw -> writeAttribute('data', "$var=$val");
+ $this -> xmlw -> endElement();
+ }
+ for ($i=0; $i<$app_count; $i++) {
+ $obj -> xmlw -> startElement($applications[$i]['type']);
+ $obj -> xmlw -> writeAttribute('application', 'bridge');
+ $obj -> xmlw -> writeAttribute('data', $applications[$i]['data']);
+ $obj -> xmlw -> endElement();
+ }
+ $obj -> xmlw -> endElement(); //</condition>
+ $obj -> xmlw -> endElement(); //</extension>
+ $obj -> xmlw -> endElement(); //</context>
+ $obj -> xmlw -> endElement(); //</section>
+
+ }
+
+ function lcr_lookup(&$obj) {
+ $obj -> comment_array($obj -> request);
+ $digitstr = $obj -> request['destination_number'];
+ $digitlen = strlen($digitstr);
+ $where_clause = '';
+ for ($i=0; $i<$digitlen; $i++) {
+ $where_clause .= sprintf("%s digits='%s' "
+ , ($i==0?"WHERE":"OR")
+ , substr($digitstr, 0, $i+1)
+ );
+ }
+ $query = sprintf("SELECT l.digits, c.Carrier_Name, l.rate, cg.id, cg.gateway, cg.id AS gwid, l.lead_strip, l.trail_strip, l.prefix, l.suffix FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id %s ORDER BY length(digits) DESC, rate;", $where_clause);
+ $res = $obj -> db -> query($query);
+ $obj -> comment($query);
+ if (FS_PDO::isError($res)) {
+ $obj -> comment($query);
+ $obj -> comment($this -> db -> getMessage());
+ $obj -> file_not_found();
+ }
+ $carriers = array();
+ while ($row = $res -> fetchRow()) {
+ $carrier_id = $row['gwid'];
+ if (array_key_exists($carrier_id, $carriers)) {
+ continue;
+ }
+ $carriers[$carrier_id] = true;
+ $datastr = sprintf('sofia/gateway/%s/%s', $row['gateway'], $digitstr);
+ $results[] = array('type'=>'action', 'data'=>$datastr);
+ }
+ return $results;
+ }
+}
+
+
+?>
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_configuration.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_configuration.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/fs_configuration.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_configuration.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_configuration.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,89 @@
+<?php
+/**
+ * @package FS_CURL
+ * fs_configuration.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @license BSD
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class for all module configurations
+ * @return object
+*/
+class fs_configuration extends fs_curl {
+ /**
+ * Class Instantiation
+ * This method will instantiate all other objects upon which it relies.
+ * @return void
+ */
+ function fs_configuration() {
+ $this -> fs_curl();
+ $mod_name = sprintf('mod_%s', str_replace('.conf', '', $this -> request['key_value']));
+ $this -> comment("module name is $mod_name");
+ if (!($this -> is_mod_enabled($mod_name))
+ && !($this -> is_modless_conf($this -> request['key_value']))) {
+ $this -> comment('module not enabled and not modless config file');
+ $this -> file_not_found();
+ }
+ $this -> xmlw -> startElement('section');
+ $this -> xmlw -> writeAttribute('name', 'configuration');
+ $this -> xmlw -> writeAttribute(
+ 'description', 'FreeSWITCH Configuration'
+ );
+ }
+
+ /**
+ * Enabled module checker
+ * This method will check if a module is enabled before
+ * returning the XML for the module. If the module's not
+ * enabled, the file_not_found method will be called.
+ * @param string $mod_name name of module to check
+ * @return bool
+ */
+ function is_mod_enabled($mod_name) {
+ $query = sprintf('%s %s'
+ , "SELECT * FROM post_load_modules_conf"
+ , "WHERE module_name='$mod_name' AND load_module=1"
+ );
+ $res = $this -> db -> query($query);
+ if ($this->db->errorCode() !== FS_SQL_SUCCESS) {
+ $this -> comment($query);
+ $this -> comment($this->db->errorCode());
+ return true; //default allow policy
+ return false; //comment previous line to default deny
+ } elseif ($res -> rowCount() == 1) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Allow config files that aren't tied to any module
+ *
+ * @param string $conf
+ * @return bool
+ */
+ private function is_modless_conf($conf) {
+ $this -> comment("conf is $conf");
+ $query = sprintf(
+ "SELECT COUNT(*) cnt FROM modless_conf WHERE conf_name = '$conf';"
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($res -> getMessage());
+ return true; //default allow policy
+ return false; //comment previous line to default deny
+ }
+ $row = $res -> fetchRow();
+ //$this -> comment($row['cnt']);
+ return $row['cnt'];
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_curl.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_curl.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/fs_curl.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_curl.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_curl.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,337 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Configuration
+ * fs_curl.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @license BSD
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * FreeSWITCH CURL base class
+ * Base class for all curl XML output, contains methods for XML output and
+ * connecting to a database
+ * @return void
+*/
+class fs_curl {
+ /**
+ * FS_PDO Object
+ * @link http://www.php.net/pdo
+ * @var $db FS_PDO
+ */
+ public $db;
+ /**
+ * Array of _REQUEST parameters passed
+ *
+ * @var array
+ */
+ public $request;
+ /**
+ * XMLWriter object
+ * @link http://php.net/XMLWriter
+ * @var object
+ */
+ public $xmlw;
+ /**
+ * Array of comments to be output in the XML
+ * @see fs_curl::comment
+ * @var array
+ */
+ private $comments;
+
+ /**
+ * Instantiation of XMLWriter and FS_PDO
+ * This method will instantiate the FS_PDO and XMLWriter classes for use
+ * in child classes
+ * @return void
+ */
+ public function fs_curl() {
+ openlog('fs_curl', LOG_NDELAY | LOG_PID, LOG_USER);
+ header('Content-Type: text/xml');
+ $this -> generate_request_array();
+ $this -> open_xml();
+ $inc = array('required'=>'libs/fs_pdo.php'); // include an external file. i.e. 'required'=>'important_file.php'
+ $this -> include_files($inc);
+ $this -> connect_db(DEFAULT_DSN, DEFAULT_DSN_LOGIN, DEFAULT_DSN_PASSWORD );
+ set_error_handler(array($this, 'error_handler'));
+ //trigger_error('blah', E_USER_ERROR);
+ }
+
+ /**
+ * Connect to a database via FS_PDO
+ * @param mixed $dsn data source for database connection (array or string)
+ * @return void
+ */
+ public function connect_db($dsn, $login, $password) {
+ try {
+ $this -> db = new FS_PDO($dsn, $login, $password);
+ } catch(Exception $e) {
+ $this -> comment($e->getMessage());
+ $this -> file_not_found(); //program terminates in function file_not_found()
+ }
+ }
+
+ /**
+ * Method to add comments to XML
+ * Adds a comment to be displayed in the final XML
+ * @param string $comment comment string to be output in XML
+ * @return void
+ */
+ public function comment($comment) {
+ $this -> comments[] = $comment;
+ }
+
+ /**
+ * Generate a globally accesible array of the _REQUEST parameters passed
+ * Generates an array from the _REQUEST parameters that were passed, keeping
+ * all key => value combinations intact
+ * @return void
+ */
+ private function generate_request_array() {
+ while (list($req_key, $req_val) = each($_REQUEST)) {
+ //$this -> comment("$req_key => $req_val");
+ $this -> request[$req_key] = $req_val;
+ }
+ }
+
+ /**
+ * Actual Instantiation of XMLWriter Object
+ * This method creates an XMLWriter Object and sets some needed options
+ * @return void
+ */
+ private function open_xml() {
+ $this -> xmlw = new XMLWriter();
+ $this -> xmlw -> openMemory();
+ if (array_key_exists('fs_curl_debug', $this -> request)
+ && $this -> request['fs_curl_debug'] == true) {
+ $this -> xmlw -> setIndent(true);
+ $this -> xmlw -> setIndentString(' ');
+ } else {
+ $this -> xmlw -> setIndent(false);
+ $this -> xmlw -> setIndentString(' ');
+ }
+ $this -> xmlw -> startDocument('1.0', 'UTF-8', 'no');
+ //set the freeswitch document type
+ $this -> xmlw -> startElement('document');
+ $this -> xmlw -> writeAttribute('type', 'freeswitch/xml');
+ }
+
+ /**
+ * Method to call on any error that can not be revovered from
+ * This method was written to return a valid XML response to FreeSWITCH
+ * in the event that we are unable to generate a valid configuration file
+ * from the passed information
+ * @return void
+ */
+ public function file_not_found() {
+ $this -> comment('Include Path = ' . ini_get('include_path'));
+ $not_found = new XMLWriter();
+ $not_found -> openMemory();
+ $not_found -> setIndent(true);
+ $not_found -> setIndentString(' ');
+ $not_found -> startDocument('1.0', 'UTF-8', 'no');
+ //set the freeswitch document type
+ $not_found -> startElement('document');
+ $not_found -> writeAttribute('type', 'freeswitch/xml');
+ $not_found -> startElement('section');
+ $not_found -> writeAttribute('name', 'result');
+ $not_found -> startElement('result');
+ $not_found -> writeAttribute('status', 'not found');
+ $not_found -> endElement();
+ $not_found -> endElement();
+ /* we put the comments inside the root element so we don't
+ * get complaints about markup outside of it */
+ $this -> comments2xml($not_found, $this -> comments);
+ $not_found -> endElement();
+ echo $not_found -> outputMemory();
+ exit();
+ }
+
+ /**
+ * Generate XML comments from comments array
+ * This [recursive] method will iterate over the passed array, writing XML
+ * comments and calling itself in the event that the "comment" is an array
+ * @param object $xml_obj Already instantiated XMLWriter object
+ * @param array $comments [Multi-dementional] Array of comments to be added
+ * @param integer $space_pad Number of spaces to indent the comments
+ * @return void
+ */
+ private function comments2xml($xml_obj, $comments, $space_pad=0) {
+ $comment_count = count($comments);
+ for ($i = 0; $i < $comment_count; $i++) {
+ if (array_key_exists($i, $comments)) {
+ if (!is_array($comments[$i])) {
+ $xml_obj -> writeComment($comments[$i]);
+ } else {
+ $this -> comments2xml($xml_obj, $comments[$i], $space_pad + 2);
+ }
+ }
+ }
+ }
+
+ /**
+ * End open XML elments in XMLWriter object
+ * @return void
+ */
+ private function close_xml() {
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Close and Output XML and stop script execution
+ * @return void
+ */
+ public function output_xml() {
+ $this->comment(
+ sprintf('Total # of Queries Run: %d', $this->db->counter)
+ );
+ $this -> comment(sprintf("Estimated Execution Time Is: %s"
+ , (ereg_replace(
+ '^0\.([0-9]+) ([0-9]+)$', '\2.\1', microtime()) - START_TIME)
+ ));
+
+ $this -> comments2xml($this -> xmlw, $this -> comments);
+ $this -> close_xml();
+ $xml_out = $this -> xmlw -> outputMemory();
+ $this -> debug('---- Start XML Output ----');
+ $this -> debug(explode("\n", $xml_out));
+ $this -> debug('---- End XML Output ----');
+ echo $xml_out;
+ exit();
+ }
+
+ /**
+ * Recursive method to add an array of comments
+ * @return void
+ */
+ public function comment_array($array, $spacepad=0) {
+ $spaces = str_repeat(' ', $spacepad);
+ foreach ($array as $key => $val) {
+ if (is_array($val)) {
+ $this -> comment("$spaces$key => Array");
+ $this -> comment_array($val, $spacepad+2);
+ } else {
+ $this -> comment("$spaces$key => $val");
+ }
+ }
+ }
+
+ /**
+ * Include files for child classes
+ * This method will include the files needed by child classes.
+ * Expects an associative array of type => path
+ * where type = [required|any other string]
+ * @param array $file_array associative array of files to include
+ * @return void
+ * @todo add other types for different levels of errors
+ */
+ public function include_files($file_array) {
+ $return = FS_CURL_SUCCESS;
+ while (list($type, $file) = each($file_array)) {
+ $inc = @include_once($file);
+ if (!$inc) {
+ $comment = sprintf(
+ 'Unable To Include %s File %s', $type, $file
+ );
+ $this -> comment($comment);
+ if ($type == 'required') {
+ $return = FS_CURL_CRITICAL;
+ } else {
+ if ($return != FS_CURL_CRITICAL) {
+ $return = FS_CURL_WARNING;
+ }
+ }
+ }
+ }
+ if ($return == FS_CURL_CRITICAL) {
+ $this -> file_not_found();
+ }
+ return $return;
+ }
+
+ /**
+ * Class-wide error handler
+ * This method should be called whenever there is an error in any child
+ * classes, script execution and returning is pariatlly determined by
+ * defines
+ * @see RETURN_ON_WARN
+ * @return void
+ * @todo add other defines that control what, if any, comments gets output
+ */
+ public function error_handler($no, $str, $file, $line) {
+ if ($no == E_STRICT) {
+ return true;
+ }
+ $file = ereg_replace('\.(inc|php)$', '', $file);
+ $this -> comment(basename($file) . ":$line - $no:$str");
+
+ switch ($no) {
+ case E_USER_NOTICE:
+ case E_NOTICE:
+ break;
+ case E_USER_WARNING:
+ case E_WARNING:
+ if (defined('RETURN_ON_WARN') && RETURN_ON_WARN == true) {
+ break;
+ }
+ case E_ERROR:
+ case E_USER_ERROR:
+ default:
+ $this -> file_not_found();
+ }
+ return true;
+ }
+
+ /**
+ * Function to print out debugging info
+ * This method will recieve arbitrary data and send it using your method of
+ * choice.... enable/disable by defining FS_CURL_DEBUG to and arbitrary integer
+ * @param mixed $input what to debug, arrays and strings tested, objects MAY work
+ * @param integer $debug_level debug if $debug_level <= FS_CURL_DEBUG
+ * @param integer $spaces
+ */
+ public function debug($input, $debug_level=0, $spaces=0) {
+ if (defined('FS_CURL_DEBUG') && $debug_level <= FS_CURL_DEBUG ) {
+ if (is_array($input)) {
+ $this -> debug('Array (', $debug_level, $spaces);
+ foreach ($input as $key=>$val) {
+ if (is_array($val) || is_object($val)) {
+ $this -> debug("[$key] => $val", $debug_level, $spaces+4);
+ $this -> debug('(', $debug_level, $spaces + 8);
+ $this -> debug($val, $debug_level, $spaces + 8);
+ } else {
+ $this -> debug("[$key] => '$val'", $debug_level, $spaces + 4);
+ }
+ }
+ $this -> debug(")", $debug_level, $spaces);
+ } else {
+ $debug_str = sprintf("%s%s"
+ , str_repeat(' ', $spaces), $input
+ );
+ switch (FS_DEBUG_TYPE) {
+ case 0:
+ syslog(LOG_NOTICE, $debug_str);
+ break;
+ case 1:
+ $this -> comment($debug_str);
+ break;
+ case 2:
+ $ptr = fopen(FS_DEBUG_FILE, 'a');
+ fputs($ptr, "$debug_str\r\n");
+ fclose($ptr);
+ break;
+ default:
+ return;
+ }
+ }
+ }
+ }
+ }
+
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_dialplan.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_dialplan.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/fs_dialplan.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_dialplan.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_dialplan.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,219 @@
+<?php
+/**
+ * @package FS_CURL
+ * @todo i should probably add a condition_weight to order the conditions inside a given extension
+ * fs_dialplan.php
+ */
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @license BSD
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * Class for XML dialplan
+*/
+class fs_dialplan extends fs_curl {
+ private $special_class_file;
+
+ public function fs_dialplan() {
+ $this -> fs_curl();
+ }
+
+ /**
+ * This is the method that determines the XML output. Customized dialplans can
+ * be easily created by adding a record to the dialplan_special table with the
+ * appropriate values. The php class MUST contain a "main()" method. The method
+ * should write directly to the xmlw obj that's pased or take care of writing
+ * out the xml itself and exiting as to not return.
+ *
+ */
+ public function main() {
+ $this -> comment($this -> request);
+ $context = $this -> request['Caller-Context'];
+ if ($this -> is_specialized_dialplan($context)) {
+ if (!include_once($this -> special_class_file)) {
+ $this -> file_not_found();
+ }
+ $class = sprintf('dialplan_%s', $context);
+ if (!class_exists($class)) {
+ $this -> comment("No Class of name $class");
+ $this -> file_not_found();
+ }
+ $obj = new $class;
+ /**
+ * recieving method should take incoming parameter as &$something
+ */
+ $obj -> main($this);
+ } else {
+ $dp_array = $this -> get_dialplan($context);
+ $this -> writeDialplan($dp_array);
+ }
+ $this -> output_xml();
+ }
+
+ public function is_specialized_dialplan($context) {
+ $query = sprintf(
+ "SELECT * FROM dialplan_special WHERE context='%s'", $context
+ );
+ $res = $this -> db -> query($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ if ($res -> numRows() == 1) {
+ $row = $res -> fetchRow();
+ $this -> special_class_file = $row['class_file'];
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * This method will pull dialplan from database
+ *
+ * @param string $context context name for XML dialplan
+ * @return array
+ */
+ private function get_dialplan($context) {
+ $dp_array = array();
+ $dpQuery = sprintf("SELECT
+ `context`,
+ `name` as extension,
+ `application` as application_name,
+ `data` as application_data,
+ `field` as condition_field,
+ `expression` as condition_expression,
+ `continue` as ext_continue,
+ `type`
+ FROM dialplan
+ INNER JOIN dialplan_context USING(dialplan_id)
+ INNER JOIN dialplan_extension USING(context_id)
+ INNER JOIN dialplan_condition USING(extension_id)
+ INNER JOIN dialplan_actions USING(condition_id)
+ WHERE context = '%s'
+ ORDER BY dialplan_context.weight, dialplan_extension.weight, dialplan_condition.weight, dialplan_actions.weight", $context);
+
+ $res = $this -> db -> query($dpQuery);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ $condition_number = 0;
+ while ($row = $res -> fetchRow()) {
+ $ct = $row['context'];
+ $et = $row['extension'];
+ $ec = $row['ext_continue'];
+ $app = $row['application_name'];
+ $data = $row['application_data'];
+ //$app_cdata = $row['app_cdata'];
+ $type = $row['type'];
+ $cf = $row['condition_field'];
+ $ce = $row['condition_expression'];
+ //$rcd = $row['re_cdata'];
+ $cc = empty($row['cond_break']) ? '0' : $row['cond_break'];
+ $dp_array[$ct]["$et;$ec"]["$cf;$ce;$cc"][] = array(
+ 'type'=>$type,
+ 'application'=>$app,
+ 'data'=>$data,
+ 'is_cdata'=>(empty($app_cdata) ? '' : $app_cdata)
+ );
+ }
+ return $dp_array;
+ }
+
+ /**
+ * Write XML dialplan from the array returned by get_dialplan
+ * @see fs_dialplan::get_dialplan
+ * @param array $dpArray Multi-dimentional array from which we write the XML
+ * @todo this method should REALLY be broken down into several smaller methods
+ *
+ */
+ private function writeDialplan($dpArray) {
+ //print_r($dpArray);
+ if (is_array($dpArray)) {
+ $this -> xmlw -> startElement('section');
+ $this -> xmlw -> writeAttribute('name', 'dialplan');
+ $this -> xmlw -> writeAttribute('description', 'FreeSWITCH Dialplan');
+ //$this -> comment('dpArray is an array');
+ foreach ($dpArray as $context => $extensions_array) {
+ //$this -> comment($context);
+ //start the context
+ $this -> xmlw -> startElement('context');
+ $this -> xmlw -> writeAttribute('name', $context);
+ if (is_array($extensions_array)) {
+ foreach ($extensions_array as $extension => $conditions) {
+ //start an extension
+ $ex_split = split(';', $extension);
+ $this -> xmlw -> startElement('extension');
+ $this -> xmlw -> writeAttribute('name', $ex_split[0]);
+ if (strlen($ex_split[1]) > 0) {
+ $this -> xmlw -> writeAttribute('continue', $ex_split[1]);
+ }
+ $this -> debug($conditions);
+ foreach ($conditions as $condition => $app_array) {
+ $c_split = split(';', $condition);
+ $this -> xmlw -> startElement('condition');
+ if (!empty($c_split[0])) {
+ $this -> xmlw -> writeAttribute('field', $c_split[0]);
+ }
+ if (!empty($c_split[1])) {
+ if (array_key_exists(3, $c_split)
+ && $c_split[3] == true) {
+ $this -> xmlw -> startElement('expression');
+ $this -> xmlw -> writeCdata($c_split[1]);
+ $this -> xmlw -> endElement();
+ } else {
+ $this -> xmlw -> writeAttribute(
+ 'expression', $c_split[1]
+ );
+ }
+ }
+ //$this -> debug($c_split[2]);
+ if ($c_split[2] != '0') {
+ $this -> xmlw -> writeAttribute(
+ 'break', $c_split[2]
+ );
+ }
+ //$this -> debug($app_array);
+ foreach ($app_array as $app) {
+ if (empty($app['application'])) {
+ continue;
+ }
+ $this -> xmlw -> startElement($app['type']);
+ $this -> xmlw -> writeAttribute(
+ 'application', $app['application']
+ );
+ if (!empty($app['data'])) {
+ if (array_key_exists('is_cdata', $app)
+ && $app['is_cdata'] == true) {
+ //$this -> xmlw -> startElement('data');
+ $this -> xmlw -> writeCdata($app['data']);
+ //$this -> xmlw -> endElement();
+ } else {
+ $this -> xmlw -> writeAttribute(
+ 'data', $app['data']
+ );
+ }
+ }
+ $this -> xmlw -> endElement();
+ }
+ //</condition>
+ $this -> xmlw -> endElement();
+ }
+ // </extension>
+ $this -> xmlw -> endElement();
+ }
+ }
+ // </context>
+ $this -> xmlw -> endElement();
+ }
+ // </section>
+ $this -> xmlw -> endElement();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_directory.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_directory.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/fs_directory.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_directory.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/fs_directory.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,359 @@
+<?php
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * fs_directory.php
+*/
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * @package FS_CURL
+ * @subpackage FS_CURL_Directory
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @license BSD
+ * @version 0.1
+ * Class for XML directory
+*/
+class fs_directory extends fs_curl {
+ private $user;
+ private $userid;
+ private $users_vars;
+ private $users_params;
+ private $users_gateways;
+ private $users_gateway_params;
+
+ public function fs_directory() {
+ $this -> fs_curl();
+ if(array_key_exists('user', $this->request)) {
+ $this -> user = $this -> request['user'];
+ }
+ $this -> comment("User is " . $this->user);
+ }
+
+ public function main() {
+ $this -> comment($this -> request);
+ $directory_array = $this -> get_directory();
+ $this -> writedirectory($directory_array);
+ $this -> output_xml();
+ }
+
+ /**
+ * This method will pull directory from database
+ * @return array
+ * @todo add GROUP BY to query to make sure we don't get duplicate users
+ */
+ private function get_directory() {
+ $directory_array = array();
+ if (!array_key_exists('domain', $this -> request)) {
+ $this -> comment('domain not passed');
+ $this -> file_not_found();
+ }
+ if (GLOBAL_USERS != true) {
+ $where_array[] = sprintf("domain='%s'", $this -> request['domain']);
+ }
+ if (array_key_exists('user', $this -> request)) {
+ $where_array[] = sprintf("username='%s'", $this -> user);
+ }
+ if (!empty($where_array)) {
+ $this -> comment('where array has contents');
+ if (count($where_array) > 1) {
+ $where_clause = sprintf('WHERE %s', implode(' AND ', $where_array));
+ } else {
+ $where_clause = sprintf('WHERE %s', $where_array[0]);
+ }
+ } else {
+ $where_clause = '';
+ }
+ $query = sprintf("SELECT * FROM directory %s ORDER BY username"
+ , $where_clause
+ );
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ if(!empty($this -> user)) {
+ $this -> userid = $res[0]['id'];
+ $this -> comment(sprintf('user id is: %d', $this -> userid));
+ }
+ return $res;
+ }
+
+ /**
+ * This method will pull the params for every user in a domain
+ * @return array of users' params
+ */
+ private function get_users_params() {
+ $where = '';
+ if(!empty($this -> userid)) {
+ $where = sprintf('WHERE directory_id = %d', $this -> userid);
+ }
+ $query = sprintf("SELECT * FROM directory_params %s;", $where);
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+
+ $record_count = count($res);
+ for($i=0; $i<$record_count; $i++) {
+ $di = $res[$i]['directory_id'];
+ $pn = $res[$i]['param_name'];
+ $this->users_params[$di][$pn] = $res[$i]['param_value'];
+ }
+ }
+
+ /**
+ * Writes XML for directory user's <params>
+ * This method will pull all of the user params based on the passed user_id
+ * @param integer $user_id
+ * @return void
+ */
+ private function write_params($user_id) {
+ if (is_array($this->users_params[$user_id])
+ && count($this->users_params[$user_id]) > 0) {
+ $this -> xmlw -> startElement('params');
+ foreach($this->users_params[$user_id] as $pname => $pvalue) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $pname);
+ $this -> xmlw -> writeAttribute('value', $pvalue);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+ }
+
+ /**
+ * Get all the users' variables
+ */
+ private function get_users_vars() {
+ $where = '';
+ if(!empty($this -> userid)) {
+ $where = sprintf('WHERE directory_id = %d', $this -> userid);
+ }
+ $query = sprintf("SELECT * FROM directory_vars %s;", $where);
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+
+ $record_count = count($res);
+ for($i=0; $i<$record_count; $i++) {
+ $di = $res[$i]['directory_id'];
+ $vn = $res[$i]['var_name'];
+ $this->users_vars[$di][$vn] = $res[$i]['var_value'];
+ }
+ }
+
+ /**
+ * Write all the <variables> for a given user
+ *
+ * @param integer $user_id
+ * @return void
+ */
+ private function write_variables($user_id) {
+ if (array_key_exists($user_id, $this->users_vars)
+ && is_array($this->users_vars[$user_id])) {
+ $this -> xmlw -> startElement('variables');
+ foreach($this->users_vars[$user_id] as $vname => $vvalue) {
+ $this -> xmlw -> startElement('variable');
+ $this -> xmlw -> writeAttribute('name', $vname);
+ $this -> xmlw -> writeAttribute('value', $vvalue);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+ }
+
+ /**
+ * get the users' gateways
+ */
+ private function get_users_gateways() {
+ $where = '';
+ if(!empty($this -> userid)) {
+ $where = sprintf('WHERE directory_id = %d', $this -> userid);
+ }
+ $query = sprintf("SELECT * FROM directory_gateways %s;", $where);
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ $record_count = count($res);
+ for($i=0; $i<$record_count; $i++) {
+ $di = $res[$i]['directory_id'];
+ $this->users_gateways[$di][] = $res[$i];
+ }
+ }
+
+ /**
+ * Write all of the XML for the user's <gateways>
+ * This method takes the id of the user from the directory table and pulls
+ * all of the user's gateways. It then calls write_single_gateway for
+ * each of them to write out all of the params
+ * @param integer $user_id
+ * @return void
+ */
+ private function write_gateways($user_id) {
+ if (array_key_exists($user_id, $this->users_gateways)
+ && is_array($this -> users_gateways[$user_id])) {
+ $this -> xmlw -> startElement('gateways');
+ $gateway_count = count($this -> users_gateways[$user_id]);
+ for ($i=0; $i<$gateway_count; $i++) {
+ $this -> xmlw -> startElement('gateway');
+ $this -> xmlw -> writeAttribute(
+ 'name', $this -> users_gateways[$user_id][$i]['gateway_name']
+ );
+
+ $this -> write_user_gateway_params(
+ $this -> users_gateways[$user_id][$i]['id']
+ );
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+ }
+
+ /**
+ * get users' gateway params
+ */
+ private function get_user_gateway_params() {
+ $query = sprintf("SELECT * FROM directory_gateway_params;");
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($this -> db -> getMessage());
+ $this -> file_not_found();
+ }
+ $param_count = count($res);
+ for($i=0; $i<$param_count; $i++) {
+ $dgwid = $res[$i]['id'];
+ $pname = $res[$i]['param_name'];
+ $pvalue = $res[$i]['param_value'];
+ $this->users_gateway_params[$dgwid][$pname] = $pvalue;
+ }
+ }
+
+ /**
+ * Write out the <params> XML for each user-specific gateway
+ *
+ * @param integer $d_gw_id id from directory_gateways
+ * @return void
+ */
+ private function write_user_gateway_params($d_gw_id) {
+ if (is_array($this->users_gateway_params[$d_gw_id])
+ && count($this->users_gateway_params[$d_gw_id]) > 0) {
+ foreach($this->users_gateway_params[$d_gw_id] as $pname => $pvalue) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $pname);
+ $this -> xmlw -> writeAttribute('value', $pvalue);
+ $this -> xmlw -> endElement();
+ }
+ }
+ }
+
+ /**
+ * This method will write out XML for global directory params
+ *
+ */
+ function write_global_params() {
+ $query = sprintf('%s %s %s;',
+ 'SELECT * FROM directory_global_params dgp',
+ 'JOIN directory_domains dd ON dd.id=dgp.domain_id',
+ "WHERE dd.domain_name='" . $this -> request['domain'] . "'"
+ );
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $error_msg = sprintf("Error while selecting global params - %s"
+ , $this -> db -> getMessage()
+ );
+ trigger_error($error_msg);
+ }
+ $param_count = count($res);
+ $this -> xmlw -> startElement('params');
+ for ($i=0; $i<$param_count; $i++) {
+ $this -> xmlw -> startElement('param');
+ $this -> xmlw -> writeAttribute('name', $res[$i]['param_name']);
+ $this -> xmlw -> writeAttribute('value', $res[$i]['param_value']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * This method will write out XML for global directory variables
+ *
+ */
+ function write_global_vars() {
+ $query = sprintf('%s %s %s;',
+ 'SELECT * FROM directory_global_vars dgv',
+ 'JOIN directory_domains dd ON dd.id=dgv.domain_id',
+ "WHERE dd.domain_name='" . $this -> request['domain'] . "'"
+ );
+ $res = $this -> db -> queryAll($query);
+ if (FS_PDO::isError($res)) {
+ $this -> comment($query);
+ $error_msg = sprintf("Error while selecting global vars - %s"
+ , $this -> db -> getMessage()
+ );
+ trigger_error($error_msg);
+ }
+ $param_count = count($res);
+ $this -> xmlw -> startElement('variables');
+ for ($i=0; $i<$param_count; $i++) {
+ $this -> xmlw -> startElement('variable');
+ $this -> xmlw -> writeAttribute('name', $res[$i]['var_name']);
+ $this -> xmlw -> writeAttribute('value', $res[$i]['var_value']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ }
+
+ /**
+ * Write XML directory from the array returned by get_directory
+ * @see fs_directory::get_directory
+ * @param array $directory Multi-dimentional array from which we write the XML
+ * @return void
+ */
+ private function writedirectory($directory) {
+ if (empty($directory)) {
+ $this -> comment('no users found');
+ $this -> file_not_found();
+ }
+ $directory_count = count($directory);
+
+ $this -> get_users_params();
+ $this -> get_users_vars();
+ $this -> get_users_gateways();
+ $this -> get_user_gateway_params();
+
+ $this -> xmlw -> startElement('section');
+ $this -> xmlw -> writeAttribute('name', 'directory');
+ $this -> xmlw -> writeAttribute('description', 'FreeSWITCH Directory');
+ $this -> xmlw -> startElement('domain');
+ $this -> xmlw -> writeAttribute('name', $this -> request['domain']);
+ $this -> write_global_params();
+ $this -> write_global_vars();
+
+ for ($i=0; $i<$directory_count; $i++) {
+ $username = $directory[$i]['username'];
+ $mailbox = empty($directory[$i]['mailbox']) ? $username : $directory[$i]['mailbox'];
+ $this -> xmlw -> startElement('user');
+ $this -> xmlw -> writeAttribute('id', $username);
+ $this -> xmlw -> writeAttribute('mailbox', $mailbox);
+ $this -> write_params($directory[$i]['id']);
+ $this -> write_variables($directory[$i]['id']);
+ $this -> write_gateways($directory[$i]['id']);
+ $this -> xmlw -> endElement();
+ }
+ $this -> xmlw -> endElement();
+ $this -> xmlw -> endElement();
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/global_defines.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/global_defines.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/global_defines.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/global_defines.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/global_defines.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,77 @@
+<?php
+/**
+ * @package FS_CURL
+ * @license
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ */
+
+if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
+ header('Location: index.php');
+}
+
+/**
+ * Defines the default dsn for the FS_PDO class
+ */
+define('DEFAULT_DSN', 'mysql:dbname=freeswitch;host=127.0.0.1');
+/**
+ * Defines the default dsn login for the PDO class
+ */
+define('DEFAULT_DSN_LOGIN', 'freeswitch');
+/**
+ * Defines the default dsn password for the PDOclass
+ */
+define('DEFAULT_DSN_PASSWORD', 'fr33sw1tch');
+/**
+ * Generic return success
+ */
+define('FS_CURL_SUCCESS', 0);
+/**
+ * Generic return success
+ */
+define('FS_SQL_SUCCESS', '00000');
+/**
+ * Generic return warning
+ */
+define('FS_CURL_WARNING', 1);
+/**
+ * Generic return critical
+ */
+define('FS_CURL_CRITICAL', 2);
+
+/**
+ * determines how the error handler handles warnings
+ */
+define('RETURN_ON_WARN', true);
+
+/**
+ * Determines whether or not users should be domain specific
+ * If GLOBAL_USERS is true, user info will be returned for whatever
+ * domain is passed.....
+ * NOTE: using a1 hashes will NOT work with this setting
+ */
+define('GLOBAL_USERS', true);
+
+/**
+ * Define debug level... should not be used in production for performance reasons
+ */
+define('FS_CURL_DEBUG', 9);
+
+/**
+ * define how debugging should be done (depends on FS_CURL_DEBUG)
+ * 0 syslog
+ * 1 xml comment
+ * 2 file (named in FS_DEBUG_FILE), take care when using this option as there's currently nothing to watch the file's size
+ */
+define('FS_DEBUG_TYPE', 0);
+
+/**
+ * File to use for debugging to file
+ */
+define('FS_DEBUG_FILE', '/tmp/fs_curl.debug');
+
+
+
+
+//define('', '');
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/index.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/index.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/index.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/index.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/index.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,103 @@
+<?php
+/**
+ * @package FS_CURL
+ * @license BSD
+ * @author Raymond Chandler (intralanman) <intralanman@gmail.com>
+ * @version 0.1
+ * initial page hit in all curl requests
+ */
+
+/**
+ * define for the time that execution of the script started
+ */
+define('START_TIME', ereg_replace('^0\.([0-9]+) ([0-9]+)$', '\2.\1', microtime()));
+
+/**
+ * Pre-Class initialization die function
+ * This function should be called on any
+ * critical error condition before the fs_curl
+ * class is successfully instantiated.
+ * @return void
+*/
+
+function file_not_found($no=false, $str=false, $file=false, $line=false) {
+ if ($no == E_STRICT) {
+ return;
+ }
+ header('Content-Type: text/xml');
+ $xmlw = new XMLWriter();
+ $xmlw -> openMemory();
+ $xmlw -> setIndent(true);
+ $xmlw -> setIndentString(' ');
+ $xmlw -> startDocument('1.0', 'UTF-8', 'no');
+ //set the freeswitch document type
+ $xmlw -> startElement('document');
+ $xmlw -> writeAttribute('type', 'freeswitch/xml');
+ $xmlw -> startElement('section');
+ $xmlw -> writeAttribute('name', 'result');
+ $xmlw -> startElement('result');
+ $xmlw -> writeAttribute('status', 'not found');
+ $xmlw -> endElement();
+ $xmlw -> endElement();
+ $xmlw -> endElement();
+ if (!empty($no) && !empty($str) && !empty($file) &&!empty($line)) {
+ $xmlw -> writeComment("ERROR: $no - ($str) on line $line of $file");
+ }
+ echo $xmlw -> outputMemory();
+ exit();
+}
+error_reporting(E_ALL);
+set_error_handler('file_not_found');
+
+if (!class_exists('XMLWriter')) {
+ trigger_error(
+ "XMLWriter Class NOT Found... You Must install it before using this package"
+ , E_USER_ERROR
+ );
+}
+if (!(@include_once('fs_curl.php'))
+ || !(@include_once('global_defines.php'))) {
+ trigger_error(
+ 'could not include fs_curl.php or global_defines.php', E_USER_ERROR
+ );
+}
+if (!is_array($_REQUEST)) {
+ trigger_error('$_REQUEST is not an array');
+}
+$section = $_REQUEST['section'];
+$section_file = sprintf('fs_%s.php', $section);
+/**
+ * this include will differ based on the section that's passed
+ */
+if (!(@include_once($section_file))) {
+ trigger_error("unable to include $section_file");
+}
+switch ($section) {
+ case 'configuration':
+ if (!array_key_exists('key_value', $_REQUEST)) {
+ trigger_error('key_value does not exist in $_REQUEST');
+ }
+ $config = $_REQUEST['key_value'];
+ $processor = sprintf('configuration/%s.php', $config);
+ $class = str_replace('.', '_', $config);
+ if (!(@include_once($processor))) {
+ trigger_error("unable to include $processor");
+ }
+ $conf = new $class;
+ $conf -> comment("class name is $class");
+ break;
+ case 'dialplan':
+ $conf = new fs_dialplan();
+ break;
+ case 'directory':
+ $conf = new fs_directory();
+ break;
+}
+
+$conf -> debug('---- Start _REQUEST ----');
+$conf -> debug($_REQUEST);
+$conf -> debug('---- End _REQUEST ----');
+$conf -> main();
+$conf -> output_xml();
+
+?>
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/libs (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/libs)
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,109 @@
+<?php
+/**
+ * FS_CURL was originally written using the MDB2 pear class for database interactions.
+ * MDB2 was deprecated in favor or PHP's PDO.
+ *
+ * This has been tested with MySQL but should work with many other RDBMSs
+ * @author Michael Phillips <michael.j.phillips@gmail.com>
+ * @license bsd http://www.opensource.org/licenses/bsd-license.php
+ */
+
+class FS_PDO extends PDO {
+ /**
+ * Default fetch mode. Associative arrays seem to be used most often
+ */
+ private $fetch_mode = PDO::FETCH_ASSOC;
+
+ /**
+ * Basic counter for profiling the number of queries executed.
+ */
+ public $counter = 0;
+
+ public function __construct($dsn, $login = NULL, $password = NULL, $options = NULL) {
+ parent::__construct($dsn, $login, $password, $options);
+ $this->setAttribute( PDO::ATTR_STATEMENT_CLASS, array( 'FS_PDOStatement', array() ) );
+ }
+
+ /**
+ * Set the fetch mode i.e. PDO::FETCH_ASSOC
+ * @param string $fetch_mode
+ */
+ public function setFetchMode($fetch_mode) {
+ $this->fetch_mode = $fetch_mode;
+ }
+
+ /**
+ * Return an associative array instead of a PDO statement object
+ * @param string $query Query to be executed
+ * @return mixed Associative array result set
+ */
+ public function queryAll($query) {
+ $this->counter++;
+ $res = $this->query($query);
+ if(!$res) {
+ return false;
+ } else {
+ return $res->fetchAll($this->fetch_mode);
+ }
+ }
+
+ /**
+ * Backwards compatibility for error checking with MDB2
+ * @static
+ * @param string $result The return status of a previous query operation
+ * @return bool
+ */
+ public static function isError($result) {
+ if($result === false) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ *
+ * @param string $query Query to be executed
+ * @return PDOStatement
+ */
+ public function query($query) {
+ $this->counter++;
+ return PDO::query($query);
+ }
+
+ /**
+ * Takes and array and converts to a string
+ * @return string $full_error A formated message
+ */
+ public function getMessage() {
+ $full_error = "";
+ foreach($this->errorInfo() as $error) {
+ $full_error .= $error . "\n";
+ }
+ return $full_error;
+ }
+}
+
+/**
+ * PDOStatment was extended to provide backwards compatible functions such as
+ * fetchRow and rowCount. At some point all references to numRow() should be
+ * replaced with rowCount()
+ */
+
+class FS_PDOStatement extends PDOStatement {
+
+ protected function __construct() {
+
+ }
+
+ public function fetchRow() {
+
+ return $this->fetch(PDO::FETCH_ASSOC);
+ }
+
+ public function numRows() {
+
+ return $this->rowCount();
+ }
+}
+?>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql)
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0-with-samples.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0-with-samples.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0-with-samples.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0-with-samples.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0-with-samples.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1431 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:35 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_lists` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `acl_name` varchar(128) NOT NULL,
+ `default_policy` varchar(45) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+INSERT INTO `acl_lists` (`id`, `acl_name`, `default_policy`) VALUES
+(1, 'rfc1918', 'deny'),
+(2, 'lan', 'allow'),
+(3, 'default', 'allow');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_nodes` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `cidr` varchar(45) NOT NULL,
+ `type` varchar(16) NOT NULL,
+ `list_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+INSERT INTO `acl_nodes` (`id`, `cidr`, `type`, `list_id`) VALUES
+(1, '192.168.0.0/16', 'allow', 1),
+(2, '10.0.0.0/8', 'allow', 1),
+(3, '172.16.0.0/12', 'allow', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_advertise` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `room` varchar(64) NOT NULL,
+ `status` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_room` (`room`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+INSERT INTO `conference_advertise` (`id`, `room`, `status`) VALUES
+(1, '3000@$${domain}', 'Freeswitch Conference'),
+(2, '3001@$${domain}', 'FreeSWITCH Conference 2'),
+(3, '3002@$${domain}', 'FreeSWITCH Conference 3');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_controls` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_group` varchar(64) NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_group_action` (`conf_group`,`action`)
+) TYPE=InnoDB AUTO_INCREMENT=13 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+INSERT INTO `conference_controls` (`id`, `conf_group`, `action`, `digits`) VALUES
+(1, 'default', 'mute', '0'),
+(2, 'default', 'deaf_mute', '*'),
+(3, 'default', 'energy up', '9'),
+(4, 'default', 'energy equ', '8'),
+(5, 'default', 'energy dn', '7'),
+(6, 'default', 'vol talk up', '3'),
+(7, 'default', 'vol talk dn', '1'),
+(8, 'default', 'vol talk zero', '2'),
+(9, 'default', 'vol listen up', '6'),
+(10, 'default', 'vol listen dn', '4'),
+(11, 'default', 'vol listen zero', '5'),
+(12, 'default', 'hangup', '#');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `unique_profile_param` (`profile_name`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=8 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+INSERT INTO `conference_profiles` (`id`, `profile_name`, `param_name`, `param_value`) VALUES
+(1, 'default', 'domain', '$${domain}'),
+(2, 'default', 'rate', '8000'),
+(3, 'default', 'interval', '20'),
+(4, 'default', 'energy-level', '300'),
+(5, 'default', 'moh-sound', '$${moh_uri}'),
+(6, 'default', 'caller-id-name', '$${outbound_caller_name}'),
+(7, 'default', 'caller-id-number', '$${outbound_caller_number}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan` (
+ `dialplan_id` int(11) NOT NULL auto_increment,
+ `domain` varchar(128) NOT NULL,
+ `ip_address` varchar(15) NOT NULL,
+ PRIMARY KEY (`dialplan_id`)
+) TYPE=MyISAM AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+INSERT INTO `dialplan` (`dialplan_id`, `domain`, `ip_address`) VALUES
+(1, 'freeswitch', '127.0.0.1');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_actions` (
+ `action_id` int(11) NOT NULL auto_increment,
+ `condition_id` int(11) NOT NULL,
+ `application` varchar(256) NOT NULL,
+ `data` varchar(256) NOT NULL,
+ `type` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`action_id`)
+) TYPE=MyISAM AUTO_INCREMENT=170 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+INSERT INTO `dialplan_actions` (`action_id`, `condition_id`, `application`, `data`, `type`, `weight`) VALUES
+(1, 2, 'deflect', '${destination_number}', 'action', 10),
+(2, 5, 'set', 'domain_name=$${domain}', 'action', 20),
+(3, 5, 'set', 'domain_name=${sip_auth_realm}', 'anti-action', 30),
+(4, 7, 'set', 'domain_name=$${domain}', 'action', 40),
+(5, 9, 'set', 'open=true', 'action', 50),
+(6, 10, 'answer', '', 'action', 60),
+(7, 10, 'intercept', '${db(select/${domain_name}-last_dial/global)}', 'action', 70),
+(8, 10, 'sleep', '2000', 'action', 80),
+(9, 11, 'answer', '', 'action', 90),
+(10, 11, 'intercept', '${db(select/${domain_name}-last_dial/${callgroup})}', 'action', 100),
+(11, 11, 'sleep', '2000', 'action', 110),
+(12, 12, 'answer', '', 'action', 120),
+(13, 12, 'intercept', '${db(select/${domain_name}-last_dial_ext/$1)}', 'action', 130),
+(14, 12, 'sleep', '2000', 'action', 140),
+(15, 13, 'transfer', '${db(select/${domain_name}-last_dial/${caller_id_number})}', 'action', 150),
+(16, 14, 'set', 'use_profile=${cond(${acl($${local_ip_v4} rfc1918)} == true ? nat : default)}', 'action', 160),
+(17, 14, 'set', 'use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)}', 'anti-action', 170),
+(18, 15, 'set_user', 'default@${domain_name}', 'action', 180),
+(19, 16, 'info', '', 'action', 190),
+(20, 17, 'set', 'sip_secure_media=true', 'action', 200),
+(21, 18, 'db', 'insert/${domain_name}-spymap/${caller_id_number}/${uuid}', 'action', 210),
+(22, 18, 'db', 'insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}', 'action', 220),
+(23, 18, 'db', 'insert/${domain_name}-last_dial/global/${uuid}', 'action', 230),
+(24, 19, 'eval', '${snom_bind_key(2 off DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message notused)}', 'action', 240),
+(25, 19, 'transfer', '3000', 'action', 250),
+(26, 20, 'eval', '${snom_bind_key(2 on DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message api+uuid_transfer ${uuid} 9001)}', 'action', 260),
+(27, 20, 'playback', '$${hold_music}', 'action', 270),
+(28, 21, 'answer', '', 'action', 280),
+(29, 21, 'eavesdrop', '${db(select/${domain_name}-spymap/$1)}', 'action', 290),
+(30, 22, 'answer', '', 'action', 300),
+(31, 22, 'set', 'eavesdrop_indicate_failed=tone_stream://%(500, 0, 320)', 'action', 310),
+(32, 22, 'set', 'eavesdrop_indicate_new=tone_stream://%(500, 0, 620)', 'action', 320),
+(33, 22, 'set', 'eavesdrop_indicate_idle=tone_stream://%(250, 0, 920)', 'action', 330),
+(34, 22, 'eavesdrop', 'all', 'action', 340),
+(35, 23, 'transfer', '${db(select/${domain_name}-call_return/${caller_id_number})}', 'action', 350),
+(36, 24, 'answer', '', 'action', 360),
+(37, 24, 'group', 'delete:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 370),
+(38, 24, 'gentones', '%(1000, 0, 320)', 'action', 380),
+(39, 25, 'answer', '', 'action', 390),
+(40, 25, 'group', 'insert:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 400),
+(41, 25, 'gentones', '%(1000, 0, 640)', 'action', 410),
+(42, 26, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name})}', 'action', 420),
+(43, 27, 'set', 'call_timeout=10', 'action', 430),
+(44, 27, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name}:order)}', 'action', 440),
+(45, 28, 'set', 'dialed_extension=$1', 'action', 450),
+(46, 28, 'export', 'sip_auto_answer=true', 'action', 460),
+(47, 28, 'bridge', 'user/${dialed_extension}@${domain_name}', 'action', 470),
+(48, 29, 'set', 'dialed_extension=$1', 'action', 480),
+(49, 29, 'export', 'dialed_extension=$1', 'action', 490),
+(50, 30, 'set', 'voicemail_authorized=${sip_authorized}', 'action', 500),
+(51, 30, 'answer', '', 'action', 510),
+(52, 30, 'sleep', '1000', 'action', 520),
+(53, 30, 'voicemail', 'check default ${domain_name} ${dialed_extension}', 'action', 530),
+(54, 30, 'bind_meta_app', '1 b s execute_extension::dx XML features', 'anti-action', 540),
+(55, 30, 'bind_meta_app', '2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav', 'anti-action', 550),
+(56, 30, 'bind_meta_app', '3 b s execute_extension::cf XML features', 'anti-action', 560),
+(57, 30, 'set', 'ringback=${us-ring}', 'anti-action', 570),
+(58, 30, 'set', 'transfer_ringback=$${hold_music}', 'anti-action', 580),
+(59, 30, 'set', 'call_timeout=30', 'anti-action', 590),
+(60, 30, 'set', 'hangup_after_bridge=true', 'anti-action', 600),
+(61, 30, 'set', 'continue_on_fail=true', 'anti-action', 610),
+(62, 30, 'db', 'insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}', 'anti-action', 620),
+(63, 30, 'db', 'insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}', 'anti-action', 630),
+(64, 30, 'set', 'called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}', 'anti-action', 640),
+(65, 30, 'db', 'insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}', 'anti-action', 650),
+(66, 30, 'bridge', 'user/${dialed_extension}@${domain_name}', 'anti-action', 660),
+(67, 30, 'answer', '', 'anti-action', 670),
+(68, 30, 'sleep', '1000', 'anti-action', 680),
+(69, 30, 'voicemail', 'default ${domain_name} ${dialed_extension}', 'anti-action', 690),
+(70, 31, 'bridge', '${group_call(sales@${domain_name})}', 'action', 700),
+(71, 32, 'bridge', 'group/support@${domain_name}', 'action', 710),
+(72, 33, 'bridge', 'group/billing@${domain_name}', 'action', 720),
+(73, 34, 'set', 'transfer_ringback=$${hold_music}', 'action', 730),
+(74, 34, 'transfer', '1000 XML features', 'action', 740),
+(75, 35, 'answer', '', 'action', 750),
+(76, 35, 'sleep', '1000', 'action', 760),
+(77, 35, 'voicemail', 'check default ${domain_name}', 'action', 770),
+(78, 36, 'bridge', 'sofia/${use_profile}/$1', 'action', 780),
+(79, 37, 'answer', '', 'action', 790),
+(80, 37, 'conference', '$1-${domain_name}@default', 'action', 800),
+(81, 38, 'answer', '', 'action', 810),
+(82, 38, 'conference', '$1-${domain_name}@wideband', 'action', 820),
+(83, 39, 'answer', '', 'action', 830),
+(84, 39, 'conference', '$1-${domain_name}@ultrawideband', 'action', 840),
+(85, 40, 'answer', '', 'action', 850),
+(86, 40, 'conference', '$1-${domain_name}@cdquality', 'action', 860),
+(87, 41, 'bridge', 'sofia/${use_profile}/$1@conference.freeswitch.org', 'action', 870),
+(88, 42, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss1', 'action', 880),
+(89, 42, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 890),
+(90, 42, 'set', 'conference_auto_outcall_timeout=60', 'action', 900),
+(91, 42, 'set', 'conference_auto_outcall_flags=mute', 'action', 910),
+(92, 42, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 920),
+(93, 42, 'set', 'sip_exclude_contact=${network_addr}', 'action', 930),
+(94, 42, 'conference_set_auto_outcall', '${group_call(sales)}', 'action', 940),
+(95, 42, 'conference', 'madboss_intercom1@default+flags{endconf|deaf}', 'action', 950),
+(96, 43, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss2', 'action', 960),
+(97, 43, 'set', 'conference_auto_outcall_caller_id_number=0912', 'action', 970),
+(98, 43, 'set', 'conference_auto_outcall_timeout=60', 'action', 980),
+(99, 43, 'set', 'conference_auto_outcall_flags=mute', 'action', 990),
+(100, 43, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 1000),
+(101, 43, 'set', 'sip_exclude_contact=${network_addr}', 'action', 1010),
+(102, 43, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1020),
+(103, 43, 'conference', 'madboss_intercom2@default+flags{endconf|deaf}', 'action', 1030),
+(104, 44, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss', 'action', 1040),
+(105, 44, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 1050),
+(106, 44, 'set', 'conference_auto_outcall_timeout=60', 'action', 1060),
+(107, 44, 'set', 'conference_auto_outcall_flags=none', 'action', 1070),
+(108, 44, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1080),
+(109, 44, 'conference', 'madboss3@default', 'action', 1090),
+(110, 45, 'answer', '', 'action', 1100),
+(111, 45, 'sleep', '2000', 'action', 1110),
+(112, 45, 'ivr', 'demo_ivr', 'action', 1120),
+(113, 46, 'conference', 'bridge:mydynaconf:sofia/${use_profile}/1234@conference.freeswitch.org', 'action', 1130),
+(114, 47, 'answer', '', 'action', 1140),
+(115, 47, 'esf_page_group', '', 'action', 1150),
+(116, 48, 'set', 'fifo_music=$${hold_music}', 'action', 1160),
+(117, 48, 'fifo', '5900@${domain_name} in', 'action', 1170),
+(118, 49, 'answer', '', 'action', 1180),
+(119, 49, 'fifo', '5900@${domain_name} out nowait', 'action', 1190),
+(120, 51, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1200),
+(121, 54, 'answer', '', 'action', 1210),
+(122, 54, 'fifo', '$1@${domain_name} out nowait', 'action', 1220),
+(123, 57, '', '', 'expression', 1230),
+(124, 57, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1240),
+(125, 60, 'answer', '', 'action', 1250),
+(126, 60, 'fifo', '$1@${domain_name} out nowait', 'action', 1260),
+(127, 61, 'pre_answer', '', 'action', 1270),
+(128, 61, 'sleep', '20000', 'action', 1280),
+(129, 61, 'answer', '', 'action', 1290),
+(130, 61, 'sleep', '1000', 'action', 1300),
+(131, 61, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1310),
+(132, 61, 'hangup', '', 'action', 1320),
+(133, 62, 'ring_ready', '', 'action', 1330),
+(134, 62, 'sleep', '20000', 'action', 1340),
+(135, 62, 'answer', '', 'action', 1350),
+(136, 62, 'sleep', '1000', 'action', 1360),
+(137, 62, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1370),
+(138, 62, 'hangup', '', 'action', 1380),
+(139, 63, 'set', 'ringback=$${uk-ring}', 'action', 1390),
+(140, 63, 'bridge', 'loopback/wait', 'action', 1400),
+(141, 64, 'set', 'ringback=$${hold_music}', 'action', 1410),
+(142, 64, 'bridge', 'loopback/wait', 'action', 1420),
+(143, 65, 'set', 'transfer_ringback=$${uk-ring}', 'action', 1430),
+(144, 65, 'answer', '', 'action', 1440),
+(145, 65, 'bridge', 'loopback/wait', 'action', 1450),
+(146, 66, 'set', 'transfer_ringback=$${hold_music}', 'action', 1460),
+(147, 66, 'answer', '', 'action', 1470),
+(148, 66, 'bridge', 'loopback/wait', 'action', 1480),
+(149, 67, 'answer', '', 'action', 1490),
+(150, 67, 'info', '', 'action', 1500),
+(151, 67, 'sleep', '250', 'action', 1510),
+(152, 67, 'hangup', '', 'action', 1520),
+(153, 68, 'answer', '', 'action', 1530),
+(154, 68, 'record_fsv', '/tmp/testrecord.fsv', 'action', 1540),
+(155, 69, 'answer', '', 'action', 1550),
+(156, 69, 'play_fsv', '/tmp/testrecord.fsv', 'action', 1560),
+(157, 70, 'answer', '', 'action', 1570),
+(158, 70, 'delay_echo', '5000', 'action', 1580),
+(159, 71, 'answer', '', 'action', 1590),
+(160, 71, 'echo', '', 'action', 1600),
+(161, 72, 'answer', '', 'action', 1610),
+(162, 72, 'playback', 'tone_stream://%(10000,0,1004);loops=-1', 'action', 1620),
+(163, 73, 'answer', '', 'action', 1630),
+(164, 73, 'playback', 'tone_stream://path=${base_dir}/conf/tetris.ttml;loops=10', 'action', 1640),
+(165, 75, 'answer', '', 'action', 1650),
+(166, 75, 'execute_extension', 'is_secure XML features', 'action', 1660),
+(167, 75, 'playback', '$${hold_music}', 'action', 1670),
+(168, 75, 'answer', '', 'anti-action', 1680),
+(169, 75, 'playback', '$${hold_music}', 'anti-action', 1690);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_condition` (
+ `condition_id` int(11) NOT NULL auto_increment,
+ `extension_id` int(11) NOT NULL,
+ `field` varchar(1238) NOT NULL,
+ `expression` varchar(128) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`condition_id`)
+) TYPE=MyISAM AUTO_INCREMENT=76 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+INSERT INTO `dialplan_condition` (`condition_id`, `extension_id`, `field`, `expression`, `weight`) VALUES
+(1, 1, '$${unroll_loops}', '^true$', 10),
+(2, 1, '${sip_looped_call}', '^true$', 20),
+(3, 2, '${domain_name}', '^$', 30),
+(4, 2, 'source', 'mod_sofia', 40),
+(5, 2, '${sip_auth_realm}', '^$', 50),
+(6, 3, '${domain_name}', '^$', 60),
+(7, 3, 'source', 'mod_openzap', 70),
+(8, 4, '${strftime(%w)}', '^([1-5])$', 80),
+(9, 4, '${strftime(%H%M)}', '^((09|1[0-7])[0-5][0-9]|1800)$', 90),
+(10, 5, 'destination_number', '^886$', 100),
+(11, 6, 'destination_number', '^\\*8$', 110),
+(12, 7, 'destination_number', '^\\*\\*(\\d+)$', 120),
+(13, 8, 'destination_number', '^870$', 130),
+(14, 9, '${network_addr}', '^$', 140),
+(15, 9, '${numbering_plan}', '^$', 150),
+(16, 9, '${call_debug}', '^true$', 160),
+(17, 9, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 170),
+(18, 9, '', '', 180),
+(19, 10, 'destination_number', '^9001$', 190),
+(20, 11, 'destination_number', '^9000$', 200),
+(21, 12, 'destination_number', '^88(.*)$|^\\*0(.*)$', 210),
+(22, 13, 'destination_number', '^779$', 220),
+(23, 14, 'destination_number', '^\\*69$|^869$|^lcr$', 230),
+(24, 15, 'destination_number', '^80(\\d{2})$', 240),
+(25, 16, 'destination_number', '^81(\\d{2})$', 250),
+(26, 17, 'destination_number', '^82(\\d{2})$', 260),
+(27, 18, 'destination_number', '^83(\\d{2})$', 270),
+(28, 19, 'destination_number', '^8(10[01][0-9])$', 280),
+(29, 20, 'destination_number', '^(20[01][0-9])$', 290),
+(30, 20, 'destination_number', '^${caller_id_number}$', 300),
+(31, 21, 'destination_number', '^3000$', 310),
+(32, 22, 'destination_number', '^3001$', 320),
+(33, 23, 'destination_number', '^3002$', 330),
+(34, 24, 'destination_number', '^operator$|^0$', 340),
+(35, 25, 'destination_number', '^vmain|4000$', 350),
+(36, 26, 'destination_number', '^sip:(.*)$', 360),
+(37, 27, 'destination_number', '^(30\\d{2})$', 370),
+(38, 28, 'destination_number', '^(31\\d{2})$', 380),
+(39, 29, 'destination_number', '^(32\\d{2})$', 390),
+(40, 30, 'destination_number', '^(33\\d{2})$', 400),
+(41, 31, 'destination_number', '^9(888|1616|3232)$', 410),
+(42, 32, 'destination_number', '^0911$', 420),
+(43, 33, 'destination_number', '^0912$', 430),
+(44, 34, 'destination_number', '^0913$', 440),
+(45, 35, 'destination_number', '^5000$', 450),
+(46, 36, 'destination_number', '^5001$', 460),
+(47, 37, 'destination_number', '^pagegroup$|^7243', 470),
+(48, 38, 'destination_number', '^5900$', 480),
+(49, 39, 'destination_number', '^5901$', 490),
+(50, 40, 'source', 'mod_sofia', 500),
+(51, 40, 'destination_number', 'park\\+(\\d+)', 510),
+(52, 41, 'source', 'mod_sofia', 520),
+(53, 41, 'destination_number', '^parking$', 530),
+(54, 41, '${sip_to_params}', 'fifo\\=(\\d+)', 540),
+(55, 42, 'source', 'mod_sofia', 550),
+(56, 42, 'destination_number', 'callpark', 560),
+(57, 42, '${sip_refer_to}', '', 570),
+(58, 43, 'source', 'mod_sofia', 580),
+(59, 43, 'destination_number', 'pickup', 590),
+(60, 43, '${sip_to_params}', 'orbit\\=(\\d+)', 600),
+(61, 44, 'destination_number', '^wait$', 610),
+(62, 45, 'destination_number', '^9980$', 620),
+(63, 46, 'destination_number', '^9981$', 630),
+(64, 47, 'destination_number', '^9982$', 640),
+(65, 48, 'destination_number', '^9983$', 650),
+(66, 49, 'destination_number', '^9984$', 660),
+(67, 50, 'destination_number', '^9992$', 670),
+(68, 51, 'destination_number', '^9993$', 680),
+(69, 52, 'destination_number', '^9994$', 690),
+(70, 53, 'destination_number', '^9995$', 700),
+(71, 54, 'destination_number', '^9996$', 710),
+(72, 55, 'destination_number', '^9997$', 720),
+(73, 56, 'destination_number', '^9998$', 730),
+(74, 57, 'destination_number', '^9999$', 740),
+(75, 57, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 750);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_context` (
+ `context_id` int(11) NOT NULL auto_increment,
+ `dialplan_id` int(11) NOT NULL,
+ `context` varchar(64) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`context_id`)
+) TYPE=InnoDB AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+INSERT INTO `dialplan_context` (`context_id`, `dialplan_id`, `context`, `weight`) VALUES
+(1, 1, 'default', 10),
+(2, 1, 'public', 20);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_extension` (
+ `extension_id` int(11) NOT NULL auto_increment,
+ `context_id` int(11) NOT NULL,
+ `name` varchar(128) NOT NULL,
+ `continue` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`extension_id`)
+) TYPE=InnoDB AUTO_INCREMENT=58 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+INSERT INTO `dialplan_extension` (`extension_id`, `context_id`, `name`, `continue`, `weight`) VALUES
+(1, 1, 'unloop', '', 10),
+(2, 1, 'set_domain', 'true', 20),
+(3, 1, 'set_domain_openzap', 'true', 30),
+(4, 1, 'tod_example', 'true', 40),
+(5, 1, 'global-intercept', '', 50),
+(6, 1, 'group-intercept', '', 60),
+(7, 1, 'intercept-ext', '', 70),
+(8, 1, 'redial', '', 80),
+(9, 1, 'global', 'true', 90),
+(10, 1, 'snom-demo-2', '', 100),
+(11, 1, 'snom-demo-1', '', 110),
+(12, 1, 'eavesdrop', '', 120),
+(13, 1, 'eavesdrop', '', 130),
+(14, 1, 'call_return', '', 140),
+(15, 1, 'del-group', '', 150),
+(16, 1, 'add-group', '', 160),
+(17, 1, 'call-group-simo', '', 170),
+(18, 1, 'call-group-order', '', 180),
+(19, 1, 'extension-intercom', '', 190),
+(20, 1, 'Local_Extension', '', 200),
+(21, 1, 'group_dial_sales', '', 210),
+(22, 1, 'group_dial_support', '', 220),
+(23, 1, 'group_dial_billing', '', 230),
+(24, 1, 'operator', '', 240),
+(25, 1, 'vmain', '', 250),
+(26, 1, 'sip_uri', '', 260),
+(27, 1, 'nb_conferences', '', 270),
+(28, 1, 'wb_conferences', '', 280),
+(29, 1, 'uwb_conferences', '', 290),
+(30, 1, 'cdquality_conferences', '', 300),
+(31, 1, 'freeswitch_public_conf_via_sip', '', 310),
+(32, 1, 'mad_boss_intercom', '', 320),
+(33, 1, 'mad_boss_intercom', '', 330),
+(34, 1, 'mad_boss', '', 340),
+(35, 1, 'ivr_demo', '', 350),
+(36, 1, 'dyanmic conference', '', 360),
+(37, 1, 'rtp_multicast_page', '', 370),
+(38, 1, 'park', '', 380),
+(39, 1, 'unpark', '', 390),
+(40, 1, 'park', '', 400),
+(41, 1, 'unpark', '', 410),
+(42, 1, 'park', '', 420),
+(43, 1, 'unpark', '', 430),
+(44, 1, 'wait', '', 440),
+(45, 1, 'ringback_180', '', 450),
+(46, 1, 'ringback_183_uk_ring', '', 460),
+(47, 1, 'ringback_183_music_ring', '', 470),
+(48, 1, 'ringback_post_answer_uk_ring', '', 480),
+(49, 1, 'ringback_post_answer_music', '', 490),
+(50, 1, 'show_info', '', 500),
+(51, 1, 'video_record', '', 510),
+(52, 1, 'video_playback', '', 520),
+(53, 1, 'delay_echo', '', 530),
+(54, 1, 'echo', '', 540),
+(55, 1, 'milliwatt', '', 550),
+(56, 2, 'tone_stream', '', 560),
+(57, 2, 'hold_music', '', 570);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_special` (
+ `id` int(11) NOT NULL auto_increment,
+ `context` varchar(255) NOT NULL,
+ `class_file` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_context` (`context`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `type` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`profile_name`)
+) TYPE=InnoDB AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+INSERT INTO `dingaling_profiles` (`id`, `profile_name`, `type`) VALUES
+(1, 'fs.intralanman.servehttp.com', 'component');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profile_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `dingaling_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_type_name` (`dingaling_id`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=5 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+INSERT INTO `dingaling_profile_params` (`id`, `dingaling_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', 'secret'),
+(2, 1, 'dialplan', 'XML,enum'),
+(3, 1, 'server', 'example.org'),
+(4, 1, 'name', 'fs.example.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_settings` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_param` (`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+INSERT INTO `dingaling_settings` (`id`, `param_name`, `param_value`) VALUES
+(1, 'debug', '0'),
+(2, 'codec-prefs', '$${global_codec_prefs}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS `directory` (
+ `id` int(11) NOT NULL auto_increment,
+ `username` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=12 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+INSERT INTO `directory` (`id`, `username`, `domain`) VALUES
+(1, '1000', 'example.com'),
+(2, '1001', 'example.org'),
+(3, '1002', 'example.net'),
+(5, '1003', 'example.info'),
+(6, '1004', 'example.com'),
+(7, '1005', 'example.org'),
+(8, '1006', 'example.net'),
+(9, '1007', 'example.info'),
+(10, '2000', 'default'),
+(11, '1009', '$${local_ip_v4}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_domains` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `domain_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+INSERT INTO `directory_domains` (`id`, `domain_name`) VALUES
+(1, 'freeswitch.org'),
+(2, 'sofaswitch.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateways` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `directory_id` int(10) unsigned NOT NULL,
+ `gateway_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateway_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `d_gw_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_gw_param` (`d_gw_id`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+INSERT INTO `directory_global_params` (`id`, `param_name`, `param_value`, `domain_id`) VALUES
+(1, 'default_gateway', 'errors', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_vars` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `var_name` varchar(64) NOT NULL,
+ `var_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_params` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=23 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+INSERT INTO `directory_params` (`id`, `directory_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', '1234'),
+(2, 1, 'vm-password', '861000'),
+(3, 2, 'password', '1234'),
+(4, 2, 'vm-password', '861001'),
+(7, 5, 'password', '1234'),
+(8, 6, 'password', '1234'),
+(9, 7, 'password', '1234'),
+(10, 8, 'password', '123456'),
+(11, 9, 'password', '1234'),
+(12, 10, 'password', '123456'),
+(13, 11, 'password', '1234'),
+(14, 3, 'vm-password', '861002'),
+(15, 3, 'password', '1234'),
+(16, 11, 'vm-password', '861009'),
+(17, 10, 'vm-password', '1234'),
+(18, 9, 'vm-password', '861007'),
+(19, 8, 'vm-password', '861006'),
+(20, 7, 'vm-password', '861005'),
+(21, 6, 'vm-password', '861004'),
+(22, 5, 'vm-password', '861003');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_vars` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `var_name` varchar(255) default NULL,
+ `var_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=6 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+INSERT INTO `directory_vars` (`id`, `directory_id`, `var_name`, `var_value`) VALUES
+(1, 1, 'numbering_plan', 'US'),
+(2, 2, 'numbering_plan', 'US'),
+(3, 3, 'numbering_plan', 'AU'),
+(4, 5, 'numbering_plan', 'US'),
+(5, 5, 'area_code', '434');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+INSERT INTO `iax_conf` (`id`, `profile_name`) VALUES
+(3, 'test_profile');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `iax_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=43 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+INSERT INTO `iax_settings` (`id`, `iax_id`, `param_name`, `param_value`) VALUES
+(35, 3, 'debug', '1'),
+(36, 3, 'ip', '$${local_ip_v4}'),
+(37, 3, 'port', '4569'),
+(38, 3, 'context', 'public'),
+(39, 3, 'dialplan', 'enum,XML'),
+(40, 3, 'codec-prefs', '$${global_codec_prefs}'),
+(41, 3, 'codec-master', 'us'),
+(42, 3, 'codec-rate', '8');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL,
+ `greet_long` varchar(255) NOT NULL,
+ `greet_short` varchar(255) NOT NULL,
+ `invalid_sound` varchar(255) NOT NULL,
+ `exit_sound` varchar(255) NOT NULL,
+ `max_failures` int(10) unsigned NOT NULL default '3',
+ `timeout` int(11) NOT NULL default '5',
+ `tts_engine` varchar(64) default NULL,
+ `tts_voice` varchar(64) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`name`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+INSERT INTO `ivr_conf` (`id`, `name`, `greet_long`, `greet_short`, `invalid_sound`, `exit_sound`, `max_failures`, `timeout`, `tts_engine`, `tts_voice`) VALUES
+(1, 'demo', 'soundfiles/ivr/demo/greet-long.wav', 'soundfiles/ivr/demo/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, 'cepstral', 'allison'),
+(2, 'demo2', 'soundfiles/ivr/demo2/greet-long.wav', 'soundfiles/ivr/demo2/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, NULL, NULL),
+(3, 'menu8', 'soundfiles/ivr/menu8/greet-long.wav', 'soundfiles/ivr/menu8/greet-short.wav', 'soundfiles/ivr/menu8/invalid.wav', 'soundfiles/ivr/menu8/exit.wav', 3, 5, NULL, NULL);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_entries` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `ivr_id` int(10) unsigned NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ `params` varchar(255) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_ivr_digits` (`ivr_id`,`digits`)
+) TYPE=InnoDB AUTO_INCREMENT=11 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+INSERT INTO `ivr_entries` (`id`, `ivr_id`, `action`, `digits`, `params`) VALUES
+(1, 1, 'menu-play-sound', '1', 'soundfiles/features.wav'),
+(2, 1, 'menu-exit', '*', NULL),
+(3, 1, 'menu-sub', '2', 'demo2'),
+(4, 1, 'menu-exec-api', '3', 'bridge sofia/$${domain}/888@conference.freeswtich.org'),
+(5, 1, 'menu-call-transfer', '4', '888'),
+(6, 2, 'menu-back', '#', NULL),
+(7, 2, 'menu-top', '*', NULL),
+(8, 3, 'menu-back', '#', NULL),
+(9, 3, 'menu-top', '*', NULL),
+(10, 3, 'menu-playsound', '4', 'soundfiles/4.wav');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `name` varchar(255) default NULL,
+ `value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_data` (
+ `hostname` varchar(255) default NULL,
+ `realm` varchar(255) default NULL,
+ `id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `local_stream_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_name` varchar(255) default NULL,
+ `directory_path` text,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `modless_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_name` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+INSERT INTO `modless_conf` (`id`, `conf_name`) VALUES
+(1, 'acl.conf'),
+(2, 'postl_load_switch.conf'),
+(3, 'post_load_modules.conf');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `post_load_modules_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `module_name` varchar(64) NOT NULL,
+ `load_module` tinyint(1) NOT NULL default '1',
+ `priority` int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_mod` (`module_name`)
+) TYPE=InnoDB AUTO_INCREMENT=54 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+INSERT INTO `post_load_modules_conf` (`id`, `module_name`, `load_module`, `priority`) VALUES
+(1, 'mod_sofia', 1, 2000),
+(2, 'mod_iax', 1, 2000),
+(3, 'mod_xml_rpc', 1, 100),
+(4, 'mod_portaudio', 1, 1000),
+(5, 'mod_enum', 1, 2000),
+(6, 'mod_xml_cdr', 1, 1000),
+(7, 'mod_spidermonkey', 1, 1000),
+(8, 'mod_alsa', 0, 1000),
+(9, 'mod_log_file', 1, 0),
+(10, 'mod_commands', 1, 1000),
+(11, 'mod_voicemail', 1, 1000),
+(12, 'mod_dialplan_xml', 1, 150),
+(13, 'mod_dialplan_asterisk', 1, 150),
+(14, 'mod_openzap', 0, 1000),
+(15, 'mod_woomera', 0, 1000),
+(17, 'mod_speex', 1, 500),
+(18, 'mod_ilbc', 0, 1000),
+(20, 'mod_g723_1', 1, 500),
+(21, 'mod_g729', 1, 500),
+(22, 'mod_g722', 1, 500),
+(23, 'mod_g726', 1, 500),
+(25, 'mod_amr', 1, 500),
+(26, 'mod_fifo', 1, 1000),
+(27, 'mod_limit', 1, 1000),
+(28, 'mod_syslog', 1, 0),
+(29, 'mod_dingaling', 1, 2000),
+(30, 'mod_cdr_csv', 1, 1000),
+(31, 'mod_event_socket', 1, 100),
+(32, 'mod_multicast', 0, 1000),
+(33, 'mod_zeroconf', 0, 1000),
+(34, 'mod_xmpp_event', 0, 1000),
+(35, 'mod_sndfile', 1, 1000),
+(36, 'mod_native_file', 1, 1000),
+(37, 'mod_shout', 1, 1000),
+(38, 'mod_local_stream', 1, 1000),
+(39, 'mod_perl', 0, 1000),
+(40, 'mod_python', 0, 1000),
+(41, 'mod_java', 0, 1000),
+(42, 'mod_cepstral', 0, 1000),
+(43, 'mod_openmrcp', 0, 1000),
+(44, 'mod_lumenvox', 0, 1000),
+(45, 'mod_rss', 0, 1000),
+(46, 'mod_say_de', 1, 1000),
+(47, 'mod_say_fr', 0, 1000),
+(48, 'mod_say_en', 1, 1000),
+(49, 'mod_conference', 1, 1000),
+(50, 'mod_ivr', 0, 1000),
+(51, 'mod_console', 1, 0),
+(52, 'mod_dptools', 1, 1500),
+(53, 'mod_voipcodecs', 1, 500);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `rss_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) NOT NULL,
+ `feed` text NOT NULL,
+ `local_file` text NOT NULL,
+ `description` text,
+ `priority` int(11) NOT NULL default '1000',
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_authentication` (
+ `nonce` varchar(255) default NULL,
+ `expires` int(11) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_dialogs` (
+ `call_id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL,
+ `sip_to_user` varchar(255) default NULL,
+ `sip_to_host` varchar(255) default NULL,
+ `sip_from_user` varchar(255) default NULL,
+ `sip_from_host` varchar(255) default NULL,
+ `contact_user` varchar(255) default NULL,
+ `contact_host` varchar(255) default NULL,
+ `state` varchar(255) default NULL,
+ `direction` varchar(255) default NULL,
+ `user_agent` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_registrations` (
+ `call_id` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `status` varchar(255) default NULL,
+ `rpid` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_subscriptions` (
+ `proto` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `sub_to_user` varchar(255) default NULL,
+ `sub_to_host` varchar(255) default NULL,
+ `event` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `call_id` varchar(255) default NULL,
+ `full_from` varchar(255) default NULL,
+ `full_via` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL,
+ `accept` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_aliases` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `sofia_id` int(10) unsigned NOT NULL,
+ `alias_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+INSERT INTO `sofia_aliases` (`id`, `sofia_id`, `alias_name`) VALUES
+(1, 1, 'default'),
+(3, 1, 'sip.example.com');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+INSERT INTO `sofia_conf` (`id`, `profile_name`) VALUES
+(1, '$${domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_domains` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `domain_name` varchar(255) default NULL,
+ `parse` tinyint(1) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_gateways` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `gateway_name` varchar(255) default NULL,
+ `gateway_param` varchar(255) default NULL,
+ `gateway_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+INSERT INTO `sofia_gateways` (`id`, `sofia_id`, `gateway_name`, `gateway_param`, `gateway_value`) VALUES
+(8, 1, 'default', 'proxy', 'asterlink.com'),
+(9, 1, 'default', 'realm', 'asterlink.com'),
+(10, 1, 'default', 'username', 'USERNAME_HERE'),
+(11, 1, 'default', 'register', 'false'),
+(12, 1, 'default', 'expire-seconds', '60'),
+(13, 1, 'default', 'retry_seconds', '2'),
+(14, 1, 'default', 'password', 'PASSWORD_HERE');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=37 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+INSERT INTO `sofia_settings` (`id`, `sofia_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'user-agent-string', 'RayUA 2.0pre4'),
+(2, 1, 'auth-calls', 'true'),
+(5, 1, 'debug', '1'),
+(6, 1, 'rfc2833-pt', '101'),
+(7, 1, 'sip-port', '5060'),
+(8, 1, 'dialplan', 'XML'),
+(9, 1, 'dtmf-duration', '100'),
+(10, 1, 'codec-prefs', '$${global_codec_prefs}'),
+(11, 1, 'rtp-timeout-sec', '300'),
+(12, 1, 'rtp-ip', '$${local_ip_v4}'),
+(13, 1, 'sip-ip', '$${local_ip_v4}'),
+(14, 1, 'context', 'default'),
+(15, 1, 'manage-presence', 'true'),
+(16, 1, 'force-register-domain', 'intralanman.servehttp.com'),
+(17, 1, 'inbound-codec-negotiation', 'generous'),
+(18, 1, 'rtp-rewrite-timestampes', 'true'),
+(19, 1, 'nonce-ttl', '60'),
+(20, 1, 'vad', 'out'),
+(36, 1, 'odbc-dsn', 'freeswitch-mysql:freeswitch:Fr33Sw1tch');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `vm_profile` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile` (`vm_profile`)
+) TYPE=InnoDB AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+INSERT INTO `voicemail_conf` (`id`, `vm_profile`) VALUES
+(1, 'default');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_email` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `voicemail_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile_param` (`param_name`,`voicemail_id`)
+) TYPE=InnoDB AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+INSERT INTO `voicemail_email` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'template-file', 'voicemail.tpl'),
+(2, 1, 'date-fmt', '%A, %B %d %Y, %I %M %p'),
+(3, 1, 'email-from', '${voicemail_account}@${voicemail_domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `voicemail_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=31 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+INSERT INTO `voicemail_settings` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'file-extension', 'wav'),
+(2, 1, 'terminator-key', '#'),
+(3, 1, 'max-login-attempts', '3'),
+(4, 1, 'digit-timeout', '10000'),
+(5, 1, 'max-record-length', '300'),
+(6, 1, 'tone-spec', '%(1000, 0, 640)'),
+(7, 1, 'callback-dialplan', 'XML'),
+(8, 1, 'callback-context', 'default'),
+(9, 1, 'play-new-messages-key', '1'),
+(10, 1, 'play-saved-messages-key', '2'),
+(11, 1, 'main-menu-key', '*'),
+(12, 1, 'config-menu-key', '5'),
+(13, 1, 'record-greeting-key', '1'),
+(14, 1, 'choose-greeting-key', '2'),
+(15, 1, 'record-file-key', '3'),
+(16, 1, 'listen-file-key', '1'),
+(17, 1, 'record-name-key', '3'),
+(18, 1, 'save-file-key', '9'),
+(19, 1, 'delete-file-key', '7'),
+(20, 1, 'undelete-file-key', '8'),
+(21, 1, 'email-key', '4'),
+(22, 1, 'pause-key', '0'),
+(23, 1, 'restart-key', '1'),
+(24, 1, 'ff-key', '6'),
+(25, 1, 'rew-key', '4'),
+(26, 1, 'record-silence-threshold', '200'),
+(27, 1, 'record-silence-hits', '2'),
+(28, 1, 'web-template-file', 'web-vm.tpl'),
+(29, 1, 'operator-extension', 'operator XML default'),
+(30, 1, 'operator-key', '9');
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT `dingaling_profile` FOREIGN KEY (`dingaling_id`) REFERENCES `dingaling_profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-4.0.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,885 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:36 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_lists` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `acl_name` varchar(128) NOT NULL,
+ `default_policy` varchar(45) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_nodes` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `cidr` varchar(45) NOT NULL,
+ `type` varchar(16) NOT NULL,
+ `list_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_advertise` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `room` varchar(64) NOT NULL,
+ `status` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_room` (`room`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_controls` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_group` varchar(64) NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_group_action` (`conf_group`,`action`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `unique_profile_param` (`profile_name`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan` (
+ `dialplan_id` int(11) NOT NULL auto_increment,
+ `domain` varchar(128) NOT NULL,
+ `ip_address` varchar(15) NOT NULL,
+ PRIMARY KEY (`dialplan_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_actions` (
+ `action_id` int(11) NOT NULL auto_increment,
+ `condition_id` int(11) NOT NULL,
+ `application` varchar(256) NOT NULL,
+ `data` varchar(256) NOT NULL,
+ `type` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`action_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_condition` (
+ `condition_id` int(11) NOT NULL auto_increment,
+ `extension_id` int(11) NOT NULL,
+ `field` varchar(1238) NOT NULL,
+ `expression` varchar(128) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`condition_id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_context` (
+ `context_id` int(11) NOT NULL auto_increment,
+ `dialplan_id` int(11) NOT NULL,
+ `context` varchar(64) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`context_id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_extension` (
+ `extension_id` int(11) NOT NULL auto_increment,
+ `context_id` int(11) NOT NULL,
+ `name` varchar(128) NOT NULL,
+ `continue` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`extension_id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_special` (
+ `id` int(11) NOT NULL auto_increment,
+ `context` varchar(255) NOT NULL,
+ `class_file` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_context` (`context`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `type` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`profile_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profile_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `dingaling_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_type_name` (`dingaling_id`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_settings` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_param` (`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS `directory` (
+ `id` int(11) NOT NULL auto_increment,
+ `username` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_domains` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `domain_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateways` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `directory_id` int(10) unsigned NOT NULL,
+ `gateway_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateway_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `d_gw_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_gw_param` (`d_gw_id`,`param_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_vars` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `var_name` varchar(64) NOT NULL,
+ `var_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_params` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_vars` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `var_name` varchar(255) default NULL,
+ `var_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `iax_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL,
+ `greet_long` varchar(255) NOT NULL,
+ `greet_short` varchar(255) NOT NULL,
+ `invalid_sound` varchar(255) NOT NULL,
+ `exit_sound` varchar(255) NOT NULL,
+ `max_failures` int(10) unsigned NOT NULL default '3',
+ `timeout` int(11) NOT NULL default '5',
+ `tts_engine` varchar(64) default NULL,
+ `tts_voice` varchar(64) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_entries` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `ivr_id` int(10) unsigned NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ `params` varchar(255) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_ivr_digits` (`ivr_id`,`digits`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `name` varchar(255) default NULL,
+ `value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_data` (
+ `hostname` varchar(255) default NULL,
+ `realm` varchar(255) default NULL,
+ `id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `local_stream_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_name` varchar(255) default NULL,
+ `directory_path` text,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `modless_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_name` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `post_load_modules_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `module_name` varchar(64) NOT NULL,
+ `load_module` tinyint(1) NOT NULL default '1',
+ `priority` int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_mod` (`module_name`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `rss_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) NOT NULL,
+ `feed` text NOT NULL,
+ `local_file` text NOT NULL,
+ `description` text,
+ `priority` int(11) NOT NULL default '1000',
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_authentication` (
+ `nonce` varchar(255) default NULL,
+ `expires` int(11) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_dialogs` (
+ `call_id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL,
+ `sip_to_user` varchar(255) default NULL,
+ `sip_to_host` varchar(255) default NULL,
+ `sip_from_user` varchar(255) default NULL,
+ `sip_from_host` varchar(255) default NULL,
+ `contact_user` varchar(255) default NULL,
+ `contact_host` varchar(255) default NULL,
+ `state` varchar(255) default NULL,
+ `direction` varchar(255) default NULL,
+ `user_agent` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_registrations` (
+ `call_id` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `status` varchar(255) default NULL,
+ `rpid` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_subscriptions` (
+ `proto` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `sub_to_user` varchar(255) default NULL,
+ `sub_to_host` varchar(255) default NULL,
+ `event` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `call_id` varchar(255) default NULL,
+ `full_from` varchar(255) default NULL,
+ `full_via` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL,
+ `accept` varchar(255) default NULL
+) TYPE=InnoDB;
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_aliases` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `sofia_id` int(10) unsigned NOT NULL,
+ `alias_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_domains` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `domain_name` varchar(255) default NULL,
+ `parse` tinyint(1) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_gateways` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `gateway_name` varchar(255) default NULL,
+ `gateway_param` varchar(255) default NULL,
+ `gateway_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `vm_profile` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile` (`vm_profile`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_email` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `voicemail_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile_param` (`param_name`,`voicemail_id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `voicemail_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) TYPE=InnoDB AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT `dingaling_profile` FOREIGN KEY (`dingaling_id`) REFERENCES `dingaling_profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0-with-samples.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0-with-samples.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0-with-samples.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0-with-samples.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0-with-samples.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1433 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:35 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_lists` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `acl_name` varchar(128) NOT NULL,
+ `default_policy` varchar(45) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+INSERT INTO `acl_lists` (`id`, `acl_name`, `default_policy`) VALUES
+(1, 'rfc1918', 'deny'),
+(2, 'lan', 'allow'),
+(3, 'default', 'allow');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_nodes` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `cidr` varchar(45) NOT NULL,
+ `type` varchar(16) NOT NULL,
+ `list_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+INSERT INTO `acl_nodes` (`id`, `cidr`, `type`, `list_id`) VALUES
+(1, '192.168.0.0/16', 'allow', 1),
+(2, '10.0.0.0/8', 'allow', 1),
+(3, '172.16.0.0/12', 'allow', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_advertise` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `room` varchar(64) NOT NULL,
+ `status` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_room` (`room`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+INSERT INTO `conference_advertise` (`id`, `room`, `status`) VALUES
+(1, '3000@$${domain}', 'Freeswitch Conference'),
+(2, '3001@$${domain}', 'FreeSWITCH Conference 2'),
+(3, '3002@$${domain}', 'FreeSWITCH Conference 3');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_controls` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_group` varchar(64) NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_group_action` USING BTREE (`conf_group`,`action`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+INSERT INTO `conference_controls` (`id`, `conf_group`, `action`, `digits`) VALUES
+(1, 'default', 'mute', '0'),
+(2, 'default', 'deaf_mute', '*'),
+(3, 'default', 'energy up', '9'),
+(4, 'default', 'energy equ', '8'),
+(5, 'default', 'energy dn', '7'),
+(6, 'default', 'vol talk up', '3'),
+(7, 'default', 'vol talk dn', '1'),
+(8, 'default', 'vol talk zero', '2'),
+(9, 'default', 'vol listen up', '6'),
+(10, 'default', 'vol listen dn', '4'),
+(11, 'default', 'vol listen zero', '5'),
+(12, 'default', 'hangup', '#');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `unique_profile_param` (`profile_name`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+INSERT INTO `conference_profiles` (`id`, `profile_name`, `param_name`, `param_value`) VALUES
+(1, 'default', 'domain', '$${domain}'),
+(2, 'default', 'rate', '8000'),
+(3, 'default', 'interval', '20'),
+(4, 'default', 'energy-level', '300'),
+(5, 'default', 'moh-sound', '$${moh_uri}'),
+(6, 'default', 'caller-id-name', '$${outbound_caller_name}'),
+(7, 'default', 'caller-id-number', '$${outbound_caller_number}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan` (
+ `dialplan_id` int(11) NOT NULL auto_increment,
+ `domain` varchar(128) NOT NULL,
+ `ip_address` varchar(15) NOT NULL,
+ PRIMARY KEY (`dialplan_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+INSERT INTO `dialplan` (`dialplan_id`, `domain`, `ip_address`) VALUES
+(1, 'freeswitch', '127.0.0.1');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_actions` (
+ `action_id` int(11) NOT NULL auto_increment,
+ `condition_id` int(11) NOT NULL,
+ `application` varchar(256) NOT NULL,
+ `data` varchar(256) NOT NULL,
+ `type` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`action_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=170 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+INSERT INTO `dialplan_actions` (`action_id`, `condition_id`, `application`, `data`, `type`, `weight`) VALUES
+(1, 2, 'deflect', '${destination_number}', 'action', 10),
+(2, 5, 'set', 'domain_name=$${domain}', 'action', 20),
+(3, 5, 'set', 'domain_name=${sip_auth_realm}', 'anti-action', 30),
+(4, 7, 'set', 'domain_name=$${domain}', 'action', 40),
+(5, 9, 'set', 'open=true', 'action', 50),
+(6, 10, 'answer', '', 'action', 60),
+(7, 10, 'intercept', '${db(select/${domain_name}-last_dial/global)}', 'action', 70),
+(8, 10, 'sleep', '2000', 'action', 80),
+(9, 11, 'answer', '', 'action', 90),
+(10, 11, 'intercept', '${db(select/${domain_name}-last_dial/${callgroup})}', 'action', 100),
+(11, 11, 'sleep', '2000', 'action', 110),
+(12, 12, 'answer', '', 'action', 120),
+(13, 12, 'intercept', '${db(select/${domain_name}-last_dial_ext/$1)}', 'action', 130),
+(14, 12, 'sleep', '2000', 'action', 140),
+(15, 13, 'transfer', '${db(select/${domain_name}-last_dial/${caller_id_number})}', 'action', 150),
+(16, 14, 'set', 'use_profile=${cond(${acl($${local_ip_v4} rfc1918)} == true ? nat : default)}', 'action', 160),
+(17, 14, 'set', 'use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)}', 'anti-action', 170),
+(18, 15, 'set_user', 'default@${domain_name}', 'action', 180),
+(19, 16, 'info', '', 'action', 190),
+(20, 17, 'set', 'sip_secure_media=true', 'action', 200),
+(21, 18, 'db', 'insert/${domain_name}-spymap/${caller_id_number}/${uuid}', 'action', 210),
+(22, 18, 'db', 'insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}', 'action', 220),
+(23, 18, 'db', 'insert/${domain_name}-last_dial/global/${uuid}', 'action', 230),
+(24, 19, 'eval', '${snom_bind_key(2 off DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message notused)}', 'action', 240),
+(25, 19, 'transfer', '3000', 'action', 250),
+(26, 20, 'eval', '${snom_bind_key(2 on DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message api+uuid_transfer ${uuid} 9001)}', 'action', 260),
+(27, 20, 'playback', '$${hold_music}', 'action', 270),
+(28, 21, 'answer', '', 'action', 280),
+(29, 21, 'eavesdrop', '${db(select/${domain_name}-spymap/$1)}', 'action', 290),
+(30, 22, 'answer', '', 'action', 300),
+(31, 22, 'set', 'eavesdrop_indicate_failed=tone_stream://%(500, 0, 320)', 'action', 310),
+(32, 22, 'set', 'eavesdrop_indicate_new=tone_stream://%(500, 0, 620)', 'action', 320),
+(33, 22, 'set', 'eavesdrop_indicate_idle=tone_stream://%(250, 0, 920)', 'action', 330),
+(34, 22, 'eavesdrop', 'all', 'action', 340),
+(35, 23, 'transfer', '${db(select/${domain_name}-call_return/${caller_id_number})}', 'action', 350),
+(36, 24, 'answer', '', 'action', 360),
+(37, 24, 'group', 'delete:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 370),
+(38, 24, 'gentones', '%(1000, 0, 320)', 'action', 380),
+(39, 25, 'answer', '', 'action', 390),
+(40, 25, 'group', 'insert:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 400),
+(41, 25, 'gentones', '%(1000, 0, 640)', 'action', 410),
+(42, 26, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name})}', 'action', 420),
+(43, 27, 'set', 'call_timeout=10', 'action', 430),
+(44, 27, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name}:order)}', 'action', 440),
+(45, 28, 'set', 'dialed_extension=$1', 'action', 450),
+(46, 28, 'export', 'sip_auto_answer=true', 'action', 460),
+(47, 28, 'bridge', 'user/${dialed_extension}@${domain_name}', 'action', 470),
+(48, 29, 'set', 'dialed_extension=$1', 'action', 480),
+(49, 29, 'export', 'dialed_extension=$1', 'action', 490),
+(50, 30, 'set', 'voicemail_authorized=${sip_authorized}', 'action', 500),
+(51, 30, 'answer', '', 'action', 510),
+(52, 30, 'sleep', '1000', 'action', 520),
+(53, 30, 'voicemail', 'check default ${domain_name} ${dialed_extension}', 'action', 530),
+(54, 30, 'bind_meta_app', '1 b s execute_extension::dx XML features', 'anti-action', 540),
+(55, 30, 'bind_meta_app', '2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav', 'anti-action', 550),
+(56, 30, 'bind_meta_app', '3 b s execute_extension::cf XML features', 'anti-action', 560),
+(57, 30, 'set', 'ringback=${us-ring}', 'anti-action', 570),
+(58, 30, 'set', 'transfer_ringback=$${hold_music}', 'anti-action', 580),
+(59, 30, 'set', 'call_timeout=30', 'anti-action', 590),
+(60, 30, 'set', 'hangup_after_bridge=true', 'anti-action', 600),
+(61, 30, 'set', 'continue_on_fail=true', 'anti-action', 610),
+(62, 30, 'db', 'insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}', 'anti-action', 620),
+(63, 30, 'db', 'insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}', 'anti-action', 630),
+(64, 30, 'set', 'called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}', 'anti-action', 640),
+(65, 30, 'db', 'insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}', 'anti-action', 650),
+(66, 30, 'bridge', 'user/${dialed_extension}@${domain_name}', 'anti-action', 660),
+(67, 30, 'answer', '', 'anti-action', 670),
+(68, 30, 'sleep', '1000', 'anti-action', 680),
+(69, 30, 'voicemail', 'default ${domain_name} ${dialed_extension}', 'anti-action', 690),
+(70, 31, 'bridge', '${group_call(sales@${domain_name})}', 'action', 700),
+(71, 32, 'bridge', 'group/support@${domain_name}', 'action', 710),
+(72, 33, 'bridge', 'group/billing@${domain_name}', 'action', 720),
+(73, 34, 'set', 'transfer_ringback=$${hold_music}', 'action', 730),
+(74, 34, 'transfer', '1000 XML features', 'action', 740),
+(75, 35, 'answer', '', 'action', 750),
+(76, 35, 'sleep', '1000', 'action', 760),
+(77, 35, 'voicemail', 'check default ${domain_name}', 'action', 770),
+(78, 36, 'bridge', 'sofia/${use_profile}/$1', 'action', 780),
+(79, 37, 'answer', '', 'action', 790),
+(80, 37, 'conference', '$1-${domain_name}@default', 'action', 800),
+(81, 38, 'answer', '', 'action', 810),
+(82, 38, 'conference', '$1-${domain_name}@wideband', 'action', 820),
+(83, 39, 'answer', '', 'action', 830),
+(84, 39, 'conference', '$1-${domain_name}@ultrawideband', 'action', 840),
+(85, 40, 'answer', '', 'action', 850),
+(86, 40, 'conference', '$1-${domain_name}@cdquality', 'action', 860),
+(87, 41, 'bridge', 'sofia/${use_profile}/$1@conference.freeswitch.org', 'action', 870),
+(88, 42, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss1', 'action', 880),
+(89, 42, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 890),
+(90, 42, 'set', 'conference_auto_outcall_timeout=60', 'action', 900),
+(91, 42, 'set', 'conference_auto_outcall_flags=mute', 'action', 910),
+(92, 42, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 920),
+(93, 42, 'set', 'sip_exclude_contact=${network_addr}', 'action', 930),
+(94, 42, 'conference_set_auto_outcall', '${group_call(sales)}', 'action', 940),
+(95, 42, 'conference', 'madboss_intercom1@default+flags{endconf|deaf}', 'action', 950),
+(96, 43, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss2', 'action', 960),
+(97, 43, 'set', 'conference_auto_outcall_caller_id_number=0912', 'action', 970),
+(98, 43, 'set', 'conference_auto_outcall_timeout=60', 'action', 980),
+(99, 43, 'set', 'conference_auto_outcall_flags=mute', 'action', 990),
+(100, 43, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 1000),
+(101, 43, 'set', 'sip_exclude_contact=${network_addr}', 'action', 1010),
+(102, 43, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1020),
+(103, 43, 'conference', 'madboss_intercom2@default+flags{endconf|deaf}', 'action', 1030),
+(104, 44, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss', 'action', 1040),
+(105, 44, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 1050),
+(106, 44, 'set', 'conference_auto_outcall_timeout=60', 'action', 1060),
+(107, 44, 'set', 'conference_auto_outcall_flags=none', 'action', 1070),
+(108, 44, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1080),
+(109, 44, 'conference', 'madboss3@default', 'action', 1090),
+(110, 45, 'answer', '', 'action', 1100),
+(111, 45, 'sleep', '2000', 'action', 1110),
+(112, 45, 'ivr', 'demo_ivr', 'action', 1120),
+(113, 46, 'conference', 'bridge:mydynaconf:sofia/${use_profile}/1234@conference.freeswitch.org', 'action', 1130),
+(114, 47, 'answer', '', 'action', 1140),
+(115, 47, 'esf_page_group', '', 'action', 1150),
+(116, 48, 'set', 'fifo_music=$${hold_music}', 'action', 1160),
+(117, 48, 'fifo', '5900@${domain_name} in', 'action', 1170),
+(118, 49, 'answer', '', 'action', 1180),
+(119, 49, 'fifo', '5900@${domain_name} out nowait', 'action', 1190),
+(120, 51, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1200),
+(121, 54, 'answer', '', 'action', 1210),
+(122, 54, 'fifo', '$1@${domain_name} out nowait', 'action', 1220),
+(123, 57, '', '', 'expression', 1230),
+(124, 57, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1240),
+(125, 60, 'answer', '', 'action', 1250),
+(126, 60, 'fifo', '$1@${domain_name} out nowait', 'action', 1260),
+(127, 61, 'pre_answer', '', 'action', 1270),
+(128, 61, 'sleep', '20000', 'action', 1280),
+(129, 61, 'answer', '', 'action', 1290),
+(130, 61, 'sleep', '1000', 'action', 1300),
+(131, 61, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1310),
+(132, 61, 'hangup', '', 'action', 1320),
+(133, 62, 'ring_ready', '', 'action', 1330),
+(134, 62, 'sleep', '20000', 'action', 1340),
+(135, 62, 'answer', '', 'action', 1350),
+(136, 62, 'sleep', '1000', 'action', 1360),
+(137, 62, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1370),
+(138, 62, 'hangup', '', 'action', 1380),
+(139, 63, 'set', 'ringback=$${uk-ring}', 'action', 1390),
+(140, 63, 'bridge', 'loopback/wait', 'action', 1400),
+(141, 64, 'set', 'ringback=$${hold_music}', 'action', 1410),
+(142, 64, 'bridge', 'loopback/wait', 'action', 1420),
+(143, 65, 'set', 'transfer_ringback=$${uk-ring}', 'action', 1430),
+(144, 65, 'answer', '', 'action', 1440),
+(145, 65, 'bridge', 'loopback/wait', 'action', 1450),
+(146, 66, 'set', 'transfer_ringback=$${hold_music}', 'action', 1460),
+(147, 66, 'answer', '', 'action', 1470),
+(148, 66, 'bridge', 'loopback/wait', 'action', 1480),
+(149, 67, 'answer', '', 'action', 1490),
+(150, 67, 'info', '', 'action', 1500),
+(151, 67, 'sleep', '250', 'action', 1510),
+(152, 67, 'hangup', '', 'action', 1520),
+(153, 68, 'answer', '', 'action', 1530),
+(154, 68, 'record_fsv', '/tmp/testrecord.fsv', 'action', 1540),
+(155, 69, 'answer', '', 'action', 1550),
+(156, 69, 'play_fsv', '/tmp/testrecord.fsv', 'action', 1560),
+(157, 70, 'answer', '', 'action', 1570),
+(158, 70, 'delay_echo', '5000', 'action', 1580),
+(159, 71, 'answer', '', 'action', 1590),
+(160, 71, 'echo', '', 'action', 1600),
+(161, 72, 'answer', '', 'action', 1610),
+(162, 72, 'playback', 'tone_stream://%(10000,0,1004);loops=-1', 'action', 1620),
+(163, 73, 'answer', '', 'action', 1630),
+(164, 73, 'playback', 'tone_stream://path=${base_dir}/conf/tetris.ttml;loops=10', 'action', 1640),
+(165, 75, 'answer', '', 'action', 1650),
+(166, 75, 'execute_extension', 'is_secure XML features', 'action', 1660),
+(167, 75, 'playback', '$${hold_music}', 'action', 1670),
+(168, 75, 'answer', '', 'anti-action', 1680),
+(169, 75, 'playback', '$${hold_music}', 'anti-action', 1690);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_condition` (
+ `condition_id` int(11) NOT NULL auto_increment,
+ `extension_id` int(11) NOT NULL,
+ `field` varchar(1238) NOT NULL,
+ `expression` varchar(128) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`condition_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+INSERT INTO `dialplan_condition` (`condition_id`, `extension_id`, `field`, `expression`, `weight`) VALUES
+(1, 1, '$${unroll_loops}', '^true$', 10),
+(2, 1, '${sip_looped_call}', '^true$', 20),
+(3, 2, '${domain_name}', '^$', 30),
+(4, 2, 'source', 'mod_sofia', 40),
+(5, 2, '${sip_auth_realm}', '^$', 50),
+(6, 3, '${domain_name}', '^$', 60),
+(7, 3, 'source', 'mod_openzap', 70),
+(8, 4, '${strftime(%w)}', '^([1-5])$', 80),
+(9, 4, '${strftime(%H%M)}', '^((09|1[0-7])[0-5][0-9]|1800)$', 90),
+(10, 5, 'destination_number', '^886$', 100),
+(11, 6, 'destination_number', '^\\*8$', 110),
+(12, 7, 'destination_number', '^\\*\\*(\\d+)$', 120),
+(13, 8, 'destination_number', '^870$', 130),
+(14, 9, '${network_addr}', '^$', 140),
+(15, 9, '${numbering_plan}', '^$', 150),
+(16, 9, '${call_debug}', '^true$', 160),
+(17, 9, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 170),
+(18, 9, '', '', 180),
+(19, 10, 'destination_number', '^9001$', 190),
+(20, 11, 'destination_number', '^9000$', 200),
+(21, 12, 'destination_number', '^88(.*)$|^\\*0(.*)$', 210),
+(22, 13, 'destination_number', '^779$', 220),
+(23, 14, 'destination_number', '^\\*69$|^869$|^lcr$', 230),
+(24, 15, 'destination_number', '^80(\\d{2})$', 240),
+(25, 16, 'destination_number', '^81(\\d{2})$', 250),
+(26, 17, 'destination_number', '^82(\\d{2})$', 260),
+(27, 18, 'destination_number', '^83(\\d{2})$', 270),
+(28, 19, 'destination_number', '^8(10[01][0-9])$', 280),
+(29, 20, 'destination_number', '^(20[01][0-9])$', 290),
+(30, 20, 'destination_number', '^${caller_id_number}$', 300),
+(31, 21, 'destination_number', '^3000$', 310),
+(32, 22, 'destination_number', '^3001$', 320),
+(33, 23, 'destination_number', '^3002$', 330),
+(34, 24, 'destination_number', '^operator$|^0$', 340),
+(35, 25, 'destination_number', '^vmain|4000$', 350),
+(36, 26, 'destination_number', '^sip:(.*)$', 360),
+(37, 27, 'destination_number', '^(30\\d{2})$', 370),
+(38, 28, 'destination_number', '^(31\\d{2})$', 380),
+(39, 29, 'destination_number', '^(32\\d{2})$', 390),
+(40, 30, 'destination_number', '^(33\\d{2})$', 400),
+(41, 31, 'destination_number', '^9(888|1616|3232)$', 410),
+(42, 32, 'destination_number', '^0911$', 420),
+(43, 33, 'destination_number', '^0912$', 430),
+(44, 34, 'destination_number', '^0913$', 440),
+(45, 35, 'destination_number', '^5000$', 450),
+(46, 36, 'destination_number', '^5001$', 460),
+(47, 37, 'destination_number', '^pagegroup$|^7243', 470),
+(48, 38, 'destination_number', '^5900$', 480),
+(49, 39, 'destination_number', '^5901$', 490),
+(50, 40, 'source', 'mod_sofia', 500),
+(51, 40, 'destination_number', 'park\\+(\\d+)', 510),
+(52, 41, 'source', 'mod_sofia', 520),
+(53, 41, 'destination_number', '^parking$', 530),
+(54, 41, '${sip_to_params}', 'fifo\\=(\\d+)', 540),
+(55, 42, 'source', 'mod_sofia', 550),
+(56, 42, 'destination_number', 'callpark', 560),
+(57, 42, '${sip_refer_to}', '', 570),
+(58, 43, 'source', 'mod_sofia', 580),
+(59, 43, 'destination_number', 'pickup', 590),
+(60, 43, '${sip_to_params}', 'orbit\\=(\\d+)', 600),
+(61, 44, 'destination_number', '^wait$', 610),
+(62, 45, 'destination_number', '^9980$', 620),
+(63, 46, 'destination_number', '^9981$', 630),
+(64, 47, 'destination_number', '^9982$', 640),
+(65, 48, 'destination_number', '^9983$', 650),
+(66, 49, 'destination_number', '^9984$', 660),
+(67, 50, 'destination_number', '^9992$', 670),
+(68, 51, 'destination_number', '^9993$', 680),
+(69, 52, 'destination_number', '^9994$', 690),
+(70, 53, 'destination_number', '^9995$', 700),
+(71, 54, 'destination_number', '^9996$', 710),
+(72, 55, 'destination_number', '^9997$', 720),
+(73, 56, 'destination_number', '^9998$', 730),
+(74, 57, 'destination_number', '^9999$', 740),
+(75, 57, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 750);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_context` (
+ `context_id` int(11) NOT NULL auto_increment,
+ `dialplan_id` int(11) NOT NULL,
+ `context` varchar(64) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`context_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+INSERT INTO `dialplan_context` (`context_id`, `dialplan_id`, `context`, `weight`) VALUES
+(1, 1, 'default', 10),
+(2, 1, 'public', 20);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_extension` (
+ `extension_id` int(11) NOT NULL auto_increment,
+ `context_id` int(11) NOT NULL,
+ `name` varchar(128) NOT NULL,
+ `continue` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`extension_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=58 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+INSERT INTO `dialplan_extension` (`extension_id`, `context_id`, `name`, `continue`, `weight`) VALUES
+(1, 1, 'unloop', '', 10),
+(2, 1, 'set_domain', 'true', 20),
+(3, 1, 'set_domain_openzap', 'true', 30),
+(4, 1, 'tod_example', 'true', 40),
+(5, 1, 'global-intercept', '', 50),
+(6, 1, 'group-intercept', '', 60),
+(7, 1, 'intercept-ext', '', 70),
+(8, 1, 'redial', '', 80),
+(9, 1, 'global', 'true', 90),
+(10, 1, 'snom-demo-2', '', 100),
+(11, 1, 'snom-demo-1', '', 110),
+(12, 1, 'eavesdrop', '', 120),
+(13, 1, 'eavesdrop', '', 130),
+(14, 1, 'call_return', '', 140),
+(15, 1, 'del-group', '', 150),
+(16, 1, 'add-group', '', 160),
+(17, 1, 'call-group-simo', '', 170),
+(18, 1, 'call-group-order', '', 180),
+(19, 1, 'extension-intercom', '', 190),
+(20, 1, 'Local_Extension', '', 200),
+(21, 1, 'group_dial_sales', '', 210),
+(22, 1, 'group_dial_support', '', 220),
+(23, 1, 'group_dial_billing', '', 230),
+(24, 1, 'operator', '', 240),
+(25, 1, 'vmain', '', 250),
+(26, 1, 'sip_uri', '', 260),
+(27, 1, 'nb_conferences', '', 270),
+(28, 1, 'wb_conferences', '', 280),
+(29, 1, 'uwb_conferences', '', 290),
+(30, 1, 'cdquality_conferences', '', 300),
+(31, 1, 'freeswitch_public_conf_via_sip', '', 310),
+(32, 1, 'mad_boss_intercom', '', 320),
+(33, 1, 'mad_boss_intercom', '', 330),
+(34, 1, 'mad_boss', '', 340),
+(35, 1, 'ivr_demo', '', 350),
+(36, 1, 'dyanmic conference', '', 360),
+(37, 1, 'rtp_multicast_page', '', 370),
+(38, 1, 'park', '', 380),
+(39, 1, 'unpark', '', 390),
+(40, 1, 'park', '', 400),
+(41, 1, 'unpark', '', 410),
+(42, 1, 'park', '', 420),
+(43, 1, 'unpark', '', 430),
+(44, 1, 'wait', '', 440),
+(45, 1, 'ringback_180', '', 450),
+(46, 1, 'ringback_183_uk_ring', '', 460),
+(47, 1, 'ringback_183_music_ring', '', 470),
+(48, 1, 'ringback_post_answer_uk_ring', '', 480),
+(49, 1, 'ringback_post_answer_music', '', 490),
+(50, 1, 'show_info', '', 500),
+(51, 1, 'video_record', '', 510),
+(52, 1, 'video_playback', '', 520),
+(53, 1, 'delay_echo', '', 530),
+(54, 1, 'echo', '', 540),
+(55, 1, 'milliwatt', '', 550),
+(56, 2, 'tone_stream', '', 560),
+(57, 2, 'hold_music', '', 570);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_special` (
+ `id` int(11) NOT NULL auto_increment,
+ `context` varchar(255) NOT NULL,
+ `class_file` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_context` (`context`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `type` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`profile_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+INSERT INTO `dingaling_profiles` (`id`, `profile_name`, `type`) VALUES
+(1, 'fs.intralanman.servehttp.com', 'component');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profile_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `dingaling_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_type_name` (`dingaling_id`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+INSERT INTO `dingaling_profile_params` (`id`, `dingaling_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', 'secret'),
+(2, 1, 'dialplan', 'XML,enum'),
+(3, 1, 'server', 'example.org'),
+(4, 1, 'name', 'fs.example.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_settings` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_param` (`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+INSERT INTO `dingaling_settings` (`id`, `param_name`, `param_value`) VALUES
+(1, 'debug', '0'),
+(2, 'codec-prefs', '$${global_codec_prefs}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS `directory` (
+ `id` int(11) NOT NULL auto_increment,
+ `username` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+INSERT INTO `directory` (`id`, `username`, `domain`) VALUES
+(1, '1000', 'example.com'),
+(2, '1001', 'example.org'),
+(3, '1002', 'example.net'),
+(5, '1003', 'example.info'),
+(6, '1004', 'example.com'),
+(7, '1005', 'example.org'),
+(8, '1006', 'example.net'),
+(9, '1007', 'example.info'),
+(10, '2000', 'default'),
+(11, '1009', '$${local_ip_v4}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_domains` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `domain_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+INSERT INTO `directory_domains` (`id`, `domain_name`) VALUES
+(1, 'freeswitch.org'),
+(2, 'sofaswitch.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateways` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `directory_id` int(10) unsigned NOT NULL,
+ `gateway_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateway_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `d_gw_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_gw_param` (`d_gw_id`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+INSERT INTO `directory_global_params` (`id`, `param_name`, `param_value`, `domain_id`) VALUES
+(1, 'default_gateway', 'errors', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_vars` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `var_name` varchar(64) NOT NULL,
+ `var_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_params` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+INSERT INTO `directory_params` (`id`, `directory_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', '1234'),
+(2, 1, 'vm-password', '861000'),
+(3, 2, 'password', '1234'),
+(4, 2, 'vm-password', '861001'),
+(7, 5, 'password', '1234'),
+(8, 6, 'password', '1234'),
+(9, 7, 'password', '1234'),
+(10, 8, 'password', '123456'),
+(11, 9, 'password', '1234'),
+(12, 10, 'password', '123456'),
+(13, 11, 'password', '1234'),
+(14, 3, 'vm-password', '861002'),
+(15, 3, 'password', '1234'),
+(16, 11, 'vm-password', '861009'),
+(17, 10, 'vm-password', '1234'),
+(18, 9, 'vm-password', '861007'),
+(19, 8, 'vm-password', '861006'),
+(20, 7, 'vm-password', '861005'),
+(21, 6, 'vm-password', '861004'),
+(22, 5, 'vm-password', '861003');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_vars` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `var_name` varchar(255) default NULL,
+ `var_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+INSERT INTO `directory_vars` (`id`, `directory_id`, `var_name`, `var_value`) VALUES
+(1, 1, 'numbering_plan', 'US'),
+(2, 2, 'numbering_plan', 'US'),
+(3, 3, 'numbering_plan', 'AU'),
+(4, 5, 'numbering_plan', 'US'),
+(5, 5, 'area_code', '434');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+INSERT INTO `iax_conf` (`id`, `profile_name`) VALUES
+(3, 'test_profile');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `iax_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+INSERT INTO `iax_settings` (`id`, `iax_id`, `param_name`, `param_value`) VALUES
+(35, 3, 'debug', '1'),
+(36, 3, 'ip', '$${local_ip_v4}'),
+(37, 3, 'port', '4569'),
+(38, 3, 'context', 'public'),
+(39, 3, 'dialplan', 'enum,XML'),
+(40, 3, 'codec-prefs', '$${global_codec_prefs}'),
+(41, 3, 'codec-master', 'us'),
+(42, 3, 'codec-rate', '8');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL,
+ `greet_long` varchar(255) NOT NULL,
+ `greet_short` varchar(255) NOT NULL,
+ `invalid_sound` varchar(255) NOT NULL,
+ `exit_sound` varchar(255) NOT NULL,
+ `max_failures` int(10) unsigned NOT NULL default '3',
+ `timeout` int(11) NOT NULL default '5',
+ `tts_engine` varchar(64) default NULL,
+ `tts_voice` varchar(64) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+INSERT INTO `ivr_conf` (`id`, `name`, `greet_long`, `greet_short`, `invalid_sound`, `exit_sound`, `max_failures`, `timeout`, `tts_engine`, `tts_voice`) VALUES
+(1, 'demo', 'soundfiles/ivr/demo/greet-long.wav', 'soundfiles/ivr/demo/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, 'cepstral', 'allison'),
+(2, 'demo2', 'soundfiles/ivr/demo2/greet-long.wav', 'soundfiles/ivr/demo2/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, NULL, NULL),
+(3, 'menu8', 'soundfiles/ivr/menu8/greet-long.wav', 'soundfiles/ivr/menu8/greet-short.wav', 'soundfiles/ivr/menu8/invalid.wav', 'soundfiles/ivr/menu8/exit.wav', 3, 5, NULL, NULL);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_entries` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `ivr_id` int(10) unsigned NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ `params` varchar(255) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_ivr_digits` USING BTREE (`ivr_id`,`digits`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+INSERT INTO `ivr_entries` (`id`, `ivr_id`, `action`, `digits`, `params`) VALUES
+(1, 1, 'menu-play-sound', '1', 'soundfiles/features.wav'),
+(2, 1, 'menu-exit', '*', NULL),
+(3, 1, 'menu-sub', '2', 'demo2'),
+(4, 1, 'menu-exec-api', '3', 'bridge sofia/$${domain}/888@conference.freeswtich.org'),
+(5, 1, 'menu-call-transfer', '4', '888'),
+(6, 2, 'menu-back', '#', NULL),
+(7, 2, 'menu-top', '*', NULL),
+(8, 3, 'menu-back', '#', NULL),
+(9, 3, 'menu-top', '*', NULL),
+(10, 3, 'menu-playsound', '4', 'soundfiles/4.wav');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `name` varchar(255) default NULL,
+ `value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_data` (
+ `hostname` varchar(255) default NULL,
+ `realm` varchar(255) default NULL,
+ `id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `local_stream_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_name` varchar(255) default NULL,
+ `directory_path` text,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `modless_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_name` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+INSERT INTO `modless_conf` (`id`, `conf_name`) VALUES
+(1, 'acl.conf'),
+(2, 'postl_load_switch.conf'),
+(3, 'post_load_modules.conf');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `post_load_modules_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `module_name` varchar(64) NOT NULL,
+ `load_module` tinyint(1) NOT NULL default '1',
+ `priority` int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_mod` (`module_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+INSERT INTO `post_load_modules_conf` (`id`, `module_name`, `load_module`, `priority`) VALUES
+(1, 'mod_sofia', 1, 2000),
+(2, 'mod_iax', 1, 2000),
+(3, 'mod_xml_rpc', 1, 100),
+(4, 'mod_portaudio', 1, 1000),
+(5, 'mod_enum', 1, 2000),
+(6, 'mod_xml_cdr', 1, 1000),
+(7, 'mod_spidermonkey', 1, 1000),
+(8, 'mod_alsa', 0, 1000),
+(9, 'mod_log_file', 1, 0),
+(10, 'mod_commands', 1, 1000),
+(11, 'mod_voicemail', 1, 1000),
+(12, 'mod_dialplan_xml', 1, 150),
+(13, 'mod_dialplan_asterisk', 1, 150),
+(14, 'mod_openzap', 0, 1000),
+(15, 'mod_woomera', 0, 1000),
+(17, 'mod_speex', 1, 500),
+(18, 'mod_ilbc', 0, 1000),
+(20, 'mod_g723_1', 1, 500),
+(21, 'mod_g729', 1, 500),
+(22, 'mod_g722', 1, 500),
+(23, 'mod_g726', 1, 500),
+(25, 'mod_amr', 1, 500),
+(26, 'mod_fifo', 1, 1000),
+(27, 'mod_limit', 1, 1000),
+(28, 'mod_syslog', 1, 0),
+(29, 'mod_dingaling', 1, 2000),
+(30, 'mod_cdr_csv', 1, 1000),
+(31, 'mod_event_socket', 1, 100),
+(32, 'mod_multicast', 0, 1000),
+(33, 'mod_zeroconf', 0, 1000),
+(34, 'mod_xmpp_event', 0, 1000),
+(35, 'mod_sndfile', 1, 1000),
+(36, 'mod_native_file', 1, 1000),
+(37, 'mod_shout', 1, 1000),
+(38, 'mod_local_stream', 1, 1000),
+(39, 'mod_perl', 0, 1000),
+(40, 'mod_python', 0, 1000),
+(41, 'mod_java', 0, 1000),
+(42, 'mod_cepstral', 0, 1000),
+(43, 'mod_openmrcp', 0, 1000),
+(44, 'mod_lumenvox', 0, 1000),
+(45, 'mod_rss', 0, 1000),
+(46, 'mod_say_de', 1, 1000),
+(47, 'mod_say_fr', 0, 1000),
+(48, 'mod_say_en', 1, 1000),
+(49, 'mod_conference', 1, 1000),
+(50, 'mod_ivr', 0, 1000),
+(51, 'mod_console', 1, 0),
+(52, 'mod_dptools', 1, 1500),
+(53, 'mod_voipcodecs', 1, 500);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `rss_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) NOT NULL,
+ `feed` text NOT NULL,
+ `local_file` text NOT NULL,
+ `description` text,
+ `priority` int(11) NOT NULL default '1000',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_authentication` (
+ `nonce` varchar(255) default NULL,
+ `expires` int(11) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_dialogs` (
+ `call_id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL,
+ `sip_to_user` varchar(255) default NULL,
+ `sip_to_host` varchar(255) default NULL,
+ `sip_from_user` varchar(255) default NULL,
+ `sip_from_host` varchar(255) default NULL,
+ `contact_user` varchar(255) default NULL,
+ `contact_host` varchar(255) default NULL,
+ `state` varchar(255) default NULL,
+ `direction` varchar(255) default NULL,
+ `user_agent` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_registrations` (
+ `call_id` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `status` varchar(255) default NULL,
+ `rpid` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_subscriptions` (
+ `proto` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `sub_to_user` varchar(255) default NULL,
+ `sub_to_host` varchar(255) default NULL,
+ `event` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `call_id` varchar(255) default NULL,
+ `full_from` varchar(255) default NULL,
+ `full_via` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL,
+ `accept` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_aliases` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `sofia_id` int(10) unsigned NOT NULL,
+ `alias_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+INSERT INTO `sofia_aliases` (`id`, `sofia_id`, `alias_name`) VALUES
+(1, 1, 'default'),
+(3, 1, 'sip.example.com');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+INSERT INTO `sofia_conf` (`id`, `profile_name`) VALUES
+(1, '$${domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_domains` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `domain_name` varchar(255) default NULL,
+ `parse` tinyint(1) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_gateways` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `gateway_name` varchar(255) default NULL,
+ `gateway_param` varchar(255) default NULL,
+ `gateway_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+INSERT INTO `sofia_gateways` (`id`, `sofia_id`, `gateway_name`, `gateway_param`, `gateway_value`) VALUES
+(8, 1, 'default', 'proxy', 'asterlink.com'),
+(9, 1, 'default', 'realm', 'asterlink.com'),
+(10, 1, 'default', 'username', 'USERNAME_HERE'),
+(11, 1, 'default', 'register', 'false'),
+(12, 1, 'default', 'expire-seconds', '60'),
+(13, 1, 'default', 'retry_seconds', '2'),
+(14, 1, 'default', 'password', 'PASSWORD_HERE');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+INSERT INTO `sofia_settings` (`id`, `sofia_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'user-agent-string', 'RayUA 2.0pre4'),
+(2, 1, 'auth-calls', 'true'),
+(5, 1, 'debug', '1'),
+(6, 1, 'rfc2833-pt', '101'),
+(7, 1, 'sip-port', '5060'),
+(8, 1, 'dialplan', 'XML'),
+(9, 1, 'dtmf-duration', '100'),
+(10, 1, 'codec-prefs', '$${global_codec_prefs}'),
+(11, 1, 'rtp-timeout-sec', '300'),
+(12, 1, 'rtp-ip', '$${local_ip_v4}'),
+(13, 1, 'sip-ip', '$${local_ip_v4}'),
+(14, 1, 'context', 'default'),
+(15, 1, 'manage-presence', 'true'),
+(16, 1, 'force-register-domain', 'intralanman.servehttp.com'),
+(17, 1, 'inbound-codec-negotiation', 'generous'),
+(18, 1, 'rtp-rewrite-timestampes', 'true'),
+(19, 1, 'nonce-ttl', '60'),
+(20, 1, 'vad', 'out'),
+(36, 1, 'odbc-dsn', 'freeswitch-mysql:freeswitch:Fr33Sw1tch');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `vm_profile` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile` (`vm_profile`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+INSERT INTO `voicemail_conf` (`id`, `vm_profile`) VALUES
+(1, 'default');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_email` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `voicemail_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile_param` (`param_name`,`voicemail_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+INSERT INTO `voicemail_email` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'template-file', 'voicemail.tpl'),
+(2, 1, 'date-fmt', '%A, %B %d %Y, %I %M %p'),
+(3, 1, 'email-from', '${voicemail_account}@${voicemail_domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `voicemail_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+INSERT INTO `voicemail_settings` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'file-extension', 'wav'),
+(2, 1, 'terminator-key', '#'),
+(3, 1, 'max-login-attempts', '3'),
+(4, 1, 'digit-timeout', '10000'),
+(5, 1, 'max-record-length', '300'),
+(6, 1, 'tone-spec', '%(1000, 0, 640)'),
+(7, 1, 'callback-dialplan', 'XML'),
+(8, 1, 'callback-context', 'default'),
+(9, 1, 'play-new-messages-key', '1'),
+(10, 1, 'play-saved-messages-key', '2'),
+(11, 1, 'main-menu-key', '*'),
+(12, 1, 'config-menu-key', '5'),
+(13, 1, 'record-greeting-key', '1'),
+(14, 1, 'choose-greeting-key', '2'),
+(15, 1, 'record-file-key', '3'),
+(16, 1, 'listen-file-key', '1'),
+(17, 1, 'record-name-key', '3'),
+(18, 1, 'save-file-key', '9'),
+(19, 1, 'delete-file-key', '7'),
+(20, 1, 'undelete-file-key', '8'),
+(21, 1, 'email-key', '4'),
+(22, 1, 'pause-key', '0'),
+(23, 1, 'restart-key', '1'),
+(24, 1, 'ff-key', '6'),
+(25, 1, 'rew-key', '4'),
+(26, 1, 'record-silence-threshold', '200'),
+(27, 1, 'record-silence-hits', '2'),
+(28, 1, 'web-template-file', 'web-vm.tpl'),
+(29, 1, 'operator-extension', 'operator XML default'),
+(30, 1, 'operator-key', '9');
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT `dingaling_profile` FOREIGN KEY (`dingaling_id`) REFERENCES `dingaling_profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/mysql-5.0.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,887 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:36 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_lists` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `acl_name` varchar(128) NOT NULL,
+ `default_policy` varchar(45) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS `acl_nodes` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `cidr` varchar(45) NOT NULL,
+ `type` varchar(16) NOT NULL,
+ `list_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_advertise` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `room` varchar(64) NOT NULL,
+ `status` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_room` (`room`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_controls` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_group` varchar(64) NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_group_action` USING BTREE (`conf_group`,`action`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `conference_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `unique_profile_param` (`profile_name`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan` (
+ `dialplan_id` int(11) NOT NULL auto_increment,
+ `domain` varchar(128) NOT NULL,
+ `ip_address` varchar(15) NOT NULL,
+ PRIMARY KEY (`dialplan_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_actions` (
+ `action_id` int(11) NOT NULL auto_increment,
+ `condition_id` int(11) NOT NULL,
+ `application` varchar(256) NOT NULL,
+ `data` varchar(256) NOT NULL,
+ `type` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`action_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_condition` (
+ `condition_id` int(11) NOT NULL auto_increment,
+ `extension_id` int(11) NOT NULL,
+ `field` varchar(1238) NOT NULL,
+ `expression` varchar(128) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`condition_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_context` (
+ `context_id` int(11) NOT NULL auto_increment,
+ `dialplan_id` int(11) NOT NULL,
+ `context` varchar(64) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`context_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_extension` (
+ `extension_id` int(11) NOT NULL auto_increment,
+ `context_id` int(11) NOT NULL,
+ `name` varchar(128) NOT NULL,
+ `continue` varchar(32) NOT NULL,
+ `weight` int(11) NOT NULL,
+ PRIMARY KEY (`extension_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS `dialplan_special` (
+ `id` int(11) NOT NULL auto_increment,
+ `context` varchar(255) NOT NULL,
+ `class_file` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_context` (`context`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `profile_name` varchar(64) NOT NULL,
+ `type` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`profile_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_profile_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `dingaling_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_type_name` (`dingaling_id`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `dingaling_settings` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_param` (`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS `directory` (
+ `id` int(11) NOT NULL auto_increment,
+ `username` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_domains` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `domain_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateways` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `directory_id` int(10) unsigned NOT NULL,
+ `gateway_name` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_gateway_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `d_gw_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_gw_param` (`d_gw_id`,`param_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_params` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_global_vars` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `var_name` varchar(64) NOT NULL,
+ `var_value` varchar(128) NOT NULL,
+ `domain_id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_params` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS `directory_vars` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) default NULL,
+ `var_name` varchar(255) default NULL,
+ `var_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `iax_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `iax_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL,
+ `greet_long` varchar(255) NOT NULL,
+ `greet_short` varchar(255) NOT NULL,
+ `invalid_sound` varchar(255) NOT NULL,
+ `exit_sound` varchar(255) NOT NULL,
+ `max_failures` int(10) unsigned NOT NULL default '3',
+ `timeout` int(11) NOT NULL default '5',
+ `tts_engine` varchar(64) default NULL,
+ `tts_voice` varchar(64) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS `ivr_entries` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `ivr_id` int(10) unsigned NOT NULL,
+ `action` varchar(64) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ `params` varchar(255) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_ivr_digits` USING BTREE (`ivr_id`,`digits`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `name` varchar(255) default NULL,
+ `value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS `limit_data` (
+ `hostname` varchar(255) default NULL,
+ `realm` varchar(255) default NULL,
+ `id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `local_stream_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_name` varchar(255) default NULL,
+ `directory_path` text,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `modless_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `conf_name` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `post_load_modules_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `module_name` varchar(64) NOT NULL,
+ `load_module` tinyint(1) NOT NULL default '1',
+ `priority` int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_mod` (`module_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `rss_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `directory_id` int(11) NOT NULL,
+ `feed` text NOT NULL,
+ `local_file` text NOT NULL,
+ `description` text,
+ `priority` int(11) NOT NULL default '1000',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_authentication` (
+ `nonce` varchar(255) default NULL,
+ `expires` int(11) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_dialogs` (
+ `call_id` varchar(255) default NULL,
+ `uuid` varchar(255) default NULL,
+ `sip_to_user` varchar(255) default NULL,
+ `sip_to_host` varchar(255) default NULL,
+ `sip_from_user` varchar(255) default NULL,
+ `sip_from_host` varchar(255) default NULL,
+ `contact_user` varchar(255) default NULL,
+ `contact_host` varchar(255) default NULL,
+ `state` varchar(255) default NULL,
+ `direction` varchar(255) default NULL,
+ `user_agent` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_registrations` (
+ `call_id` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `status` varchar(255) default NULL,
+ `rpid` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS `sip_subscriptions` (
+ `proto` varchar(255) default NULL,
+ `sip_user` varchar(255) default NULL,
+ `sip_host` varchar(255) default NULL,
+ `sub_to_user` varchar(255) default NULL,
+ `sub_to_host` varchar(255) default NULL,
+ `event` varchar(255) default NULL,
+ `contact` varchar(1024) default NULL,
+ `call_id` varchar(255) default NULL,
+ `full_from` varchar(255) default NULL,
+ `full_via` varchar(255) default NULL,
+ `expires` int(11) default NULL,
+ `user_agent` varchar(255) default NULL,
+ `accept` varchar(255) default NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_aliases` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `sofia_id` int(10) unsigned NOT NULL,
+ `alias_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_conf` (
+ `id` int(11) NOT NULL auto_increment,
+ `profile_name` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_domains` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `domain_name` varchar(255) default NULL,
+ `parse` tinyint(1) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_gateways` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `gateway_name` varchar(255) default NULL,
+ `gateway_param` varchar(255) default NULL,
+ `gateway_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `sofia_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `sofia_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_conf` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `vm_profile` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile` (`vm_profile`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_email` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `voicemail_id` int(10) unsigned NOT NULL,
+ `param_name` varchar(64) NOT NULL,
+ `param_value` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_profile_param` (`param_name`,`voicemail_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `voicemail_settings` (
+ `id` int(11) NOT NULL auto_increment,
+ `voicemail_id` int(11) default NULL,
+ `param_name` varchar(255) default NULL,
+ `param_value` varchar(255) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT `dingaling_profile` FOREIGN KEY (`dingaling_id`) REFERENCES `dingaling_profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle-with-examples.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle-with-examples.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/oracle-with-examples.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle-with-examples.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle-with-examples.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1431 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:35 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS "acl_lists" (
+ "id" int(10) unsigned NOT NULL,
+ "acl_name" varchar(128) NOT NULL,
+ "default_policy" varchar(45) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+INSERT INTO `acl_lists` (`id`, `acl_name`, `default_policy`) VALUES
+(1, 'rfc1918', 'deny'),
+(2, 'lan', 'allow'),
+(3, 'default', 'allow');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS "acl_nodes" (
+ "id" int(10) unsigned NOT NULL,
+ "cidr" varchar(45) NOT NULL,
+ "type" varchar(16) NOT NULL,
+ "list_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+INSERT INTO `acl_nodes` (`id`, `cidr`, `type`, `list_id`) VALUES
+(1, '192.168.0.0/16', 'allow', 1),
+(2, '10.0.0.0/8', 'allow', 1),
+(3, '172.16.0.0/12', 'allow', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_advertise" (
+ "id" int(10) unsigned NOT NULL,
+ "room" varchar(64) NOT NULL,
+ "status" varchar(128) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_room" ("room")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+INSERT INTO `conference_advertise` (`id`, `room`, `status`) VALUES
+(1, '3000@$${domain}', 'Freeswitch Conference'),
+(2, '3001@$${domain}', 'FreeSWITCH Conference 2'),
+(3, '3002@$${domain}', 'FreeSWITCH Conference 3');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_controls" (
+ "id" int(10) unsigned NOT NULL,
+ "conf_group" varchar(64) NOT NULL,
+ "action" varchar(64) NOT NULL,
+ "digits" varchar(16) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_group_action" ("conf_group","action")
+) AUTO_INCREMENT=13 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+INSERT INTO `conference_controls` (`id`, `conf_group`, `action`, `digits`) VALUES
+(1, 'default', 'mute', '0'),
+(2, 'default', 'deaf_mute', '*'),
+(3, 'default', 'energy up', '9'),
+(4, 'default', 'energy equ', '8'),
+(5, 'default', 'energy dn', '7'),
+(6, 'default', 'vol talk up', '3'),
+(7, 'default', 'vol talk dn', '1'),
+(8, 'default', 'vol talk zero', '2'),
+(9, 'default', 'vol listen up', '6'),
+(10, 'default', 'vol listen dn', '4'),
+(11, 'default', 'vol listen zero', '5'),
+(12, 'default', 'hangup', '#');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_profiles" (
+ "id" int(10) unsigned NOT NULL,
+ "profile_name" varchar(64) NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ KEY "unique_profile_param" ("profile_name","param_name")
+) AUTO_INCREMENT=8 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+INSERT INTO `conference_profiles` (`id`, `profile_name`, `param_name`, `param_value`) VALUES
+(1, 'default', 'domain', '$${domain}'),
+(2, 'default', 'rate', '8000'),
+(3, 'default', 'interval', '20'),
+(4, 'default', 'energy-level', '300'),
+(5, 'default', 'moh-sound', '$${moh_uri}'),
+(6, 'default', 'caller-id-name', '$${outbound_caller_name}'),
+(7, 'default', 'caller-id-number', '$${outbound_caller_number}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan" (
+ "dialplan_id" int(11) NOT NULL,
+ "domain" varchar(128) NOT NULL,
+ "ip_address" varchar(15) NOT NULL,
+ PRIMARY KEY ("dialplan_id")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+INSERT INTO `dialplan` (`dialplan_id`, `domain`, `ip_address`) VALUES
+(1, 'freeswitch', '127.0.0.1');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_actions" (
+ "action_id" int(11) NOT NULL,
+ "condition_id" int(11) NOT NULL,
+ "application" varchar(256) NOT NULL,
+ "data" varchar(256) NOT NULL,
+ "type" varchar(32) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("action_id")
+) AUTO_INCREMENT=170 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+INSERT INTO `dialplan_actions` (`action_id`, `condition_id`, `application`, `data`, `type`, `weight`) VALUES
+(1, 2, 'deflect', '${destination_number}', 'action', 10),
+(2, 5, 'set', 'domain_name=$${domain}', 'action', 20),
+(3, 5, 'set', 'domain_name=${sip_auth_realm}', 'anti-action', 30),
+(4, 7, 'set', 'domain_name=$${domain}', 'action', 40),
+(5, 9, 'set', 'open=true', 'action', 50),
+(6, 10, 'answer', '', 'action', 60),
+(7, 10, 'intercept', '${db(select/${domain_name}-last_dial/global)}', 'action', 70),
+(8, 10, 'sleep', '2000', 'action', 80),
+(9, 11, 'answer', '', 'action', 90),
+(10, 11, 'intercept', '${db(select/${domain_name}-last_dial/${callgroup})}', 'action', 100),
+(11, 11, 'sleep', '2000', 'action', 110),
+(12, 12, 'answer', '', 'action', 120),
+(13, 12, 'intercept', '${db(select/${domain_name}-last_dial_ext/$1)}', 'action', 130),
+(14, 12, 'sleep', '2000', 'action', 140),
+(15, 13, 'transfer', '${db(select/${domain_name}-last_dial/${caller_id_number})}', 'action', 150),
+(16, 14, 'set', 'use_profile=${cond(${acl($${local_ip_v4} rfc1918)} == true ? nat : default)}', 'action', 160),
+(17, 14, 'set', 'use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)}', 'anti-action', 170),
+(18, 15, 'set_user', 'default@${domain_name}', 'action', 180),
+(19, 16, 'info', '', 'action', 190),
+(20, 17, 'set', 'sip_secure_media=true', 'action', 200),
+(21, 18, 'db', 'insert/${domain_name}-spymap/${caller_id_number}/${uuid}', 'action', 210),
+(22, 18, 'db', 'insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}', 'action', 220),
+(23, 18, 'db', 'insert/${domain_name}-last_dial/global/${uuid}', 'action', 230),
+(24, 19, 'eval', '${snom_bind_key(2 off DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message notused)}', 'action', 240),
+(25, 19, 'transfer', '3000', 'action', 250),
+(26, 20, 'eval', '${snom_bind_key(2 on DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message api+uuid_transfer ${uuid} 9001)}', 'action', 260),
+(27, 20, 'playback', '$${hold_music}', 'action', 270),
+(28, 21, 'answer', '', 'action', 280),
+(29, 21, 'eavesdrop', '${db(select/${domain_name}-spymap/$1)}', 'action', 290),
+(30, 22, 'answer', '', 'action', 300),
+(31, 22, 'set', 'eavesdrop_indicate_failed=tone_stream://%(500, 0, 320)', 'action', 310),
+(32, 22, 'set', 'eavesdrop_indicate_new=tone_stream://%(500, 0, 620)', 'action', 320),
+(33, 22, 'set', 'eavesdrop_indicate_idle=tone_stream://%(250, 0, 920)', 'action', 330),
+(34, 22, 'eavesdrop', 'all', 'action', 340),
+(35, 23, 'transfer', '${db(select/${domain_name}-call_return/${caller_id_number})}', 'action', 350),
+(36, 24, 'answer', '', 'action', 360),
+(37, 24, 'group', 'delete:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 370),
+(38, 24, 'gentones', '%(1000, 0, 320)', 'action', 380),
+(39, 25, 'answer', '', 'action', 390),
+(40, 25, 'group', 'insert:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}', 'action', 400),
+(41, 25, 'gentones', '%(1000, 0, 640)', 'action', 410),
+(42, 26, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name})}', 'action', 420),
+(43, 27, 'set', 'call_timeout=10', 'action', 430),
+(44, 27, 'bridge', '{ignore_early_media=true}${group(call:$1@${domain_name}:order)}', 'action', 440),
+(45, 28, 'set', 'dialed_extension=$1', 'action', 450),
+(46, 28, 'export', 'sip_auto_answer=true', 'action', 460),
+(47, 28, 'bridge', 'user/${dialed_extension}@${domain_name}', 'action', 470),
+(48, 29, 'set', 'dialed_extension=$1', 'action', 480),
+(49, 29, 'export', 'dialed_extension=$1', 'action', 490),
+(50, 30, 'set', 'voicemail_authorized=${sip_authorized}', 'action', 500),
+(51, 30, 'answer', '', 'action', 510),
+(52, 30, 'sleep', '1000', 'action', 520),
+(53, 30, 'voicemail', 'check default ${domain_name} ${dialed_extension}', 'action', 530),
+(54, 30, 'bind_meta_app', '1 b s execute_extension::dx XML features', 'anti-action', 540),
+(55, 30, 'bind_meta_app', '2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav', 'anti-action', 550),
+(56, 30, 'bind_meta_app', '3 b s execute_extension::cf XML features', 'anti-action', 560),
+(57, 30, 'set', 'ringback=${us-ring}', 'anti-action', 570),
+(58, 30, 'set', 'transfer_ringback=$${hold_music}', 'anti-action', 580),
+(59, 30, 'set', 'call_timeout=30', 'anti-action', 590),
+(60, 30, 'set', 'hangup_after_bridge=true', 'anti-action', 600),
+(61, 30, 'set', 'continue_on_fail=true', 'anti-action', 610),
+(62, 30, 'db', 'insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}', 'anti-action', 620),
+(63, 30, 'db', 'insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}', 'anti-action', 630),
+(64, 30, 'set', 'called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}', 'anti-action', 640),
+(65, 30, 'db', 'insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}', 'anti-action', 650),
+(66, 30, 'bridge', 'user/${dialed_extension}@${domain_name}', 'anti-action', 660),
+(67, 30, 'answer', '', 'anti-action', 670),
+(68, 30, 'sleep', '1000', 'anti-action', 680),
+(69, 30, 'voicemail', 'default ${domain_name} ${dialed_extension}', 'anti-action', 690),
+(70, 31, 'bridge', '${group_call(sales@${domain_name})}', 'action', 700),
+(71, 32, 'bridge', 'group/support@${domain_name}', 'action', 710),
+(72, 33, 'bridge', 'group/billing@${domain_name}', 'action', 720),
+(73, 34, 'set', 'transfer_ringback=$${hold_music}', 'action', 730),
+(74, 34, 'transfer', '1000 XML features', 'action', 740),
+(75, 35, 'answer', '', 'action', 750),
+(76, 35, 'sleep', '1000', 'action', 760),
+(77, 35, 'voicemail', 'check default ${domain_name}', 'action', 770),
+(78, 36, 'bridge', 'sofia/${use_profile}/$1', 'action', 780),
+(79, 37, 'answer', '', 'action', 790),
+(80, 37, 'conference', '$1-${domain_name}@default', 'action', 800),
+(81, 38, 'answer', '', 'action', 810),
+(82, 38, 'conference', '$1-${domain_name}@wideband', 'action', 820),
+(83, 39, 'answer', '', 'action', 830),
+(84, 39, 'conference', '$1-${domain_name}@ultrawideband', 'action', 840),
+(85, 40, 'answer', '', 'action', 850),
+(86, 40, 'conference', '$1-${domain_name}@cdquality', 'action', 860),
+(87, 41, 'bridge', 'sofia/${use_profile}/$1@conference.freeswitch.org', 'action', 870),
+(88, 42, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss1', 'action', 880),
+(89, 42, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 890),
+(90, 42, 'set', 'conference_auto_outcall_timeout=60', 'action', 900),
+(91, 42, 'set', 'conference_auto_outcall_flags=mute', 'action', 910),
+(92, 42, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 920),
+(93, 42, 'set', 'sip_exclude_contact=${network_addr}', 'action', 930),
+(94, 42, 'conference_set_auto_outcall', '${group_call(sales)}', 'action', 940),
+(95, 42, 'conference', 'madboss_intercom1@default+flags{endconf|deaf}', 'action', 950),
+(96, 43, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss2', 'action', 960),
+(97, 43, 'set', 'conference_auto_outcall_caller_id_number=0912', 'action', 970),
+(98, 43, 'set', 'conference_auto_outcall_timeout=60', 'action', 980),
+(99, 43, 'set', 'conference_auto_outcall_flags=mute', 'action', 990),
+(100, 43, 'set', 'conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer=''bind_meta_app 2 a s1 intercept::${uuid}''}', 'action', 1000),
+(101, 43, 'set', 'sip_exclude_contact=${network_addr}', 'action', 1010),
+(102, 43, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1020),
+(103, 43, 'conference', 'madboss_intercom2@default+flags{endconf|deaf}', 'action', 1030),
+(104, 44, 'set', 'conference_auto_outcall_caller_id_name=Mad Boss', 'action', 1040),
+(105, 44, 'set', 'conference_auto_outcall_caller_id_number=0911', 'action', 1050),
+(106, 44, 'set', 'conference_auto_outcall_timeout=60', 'action', 1060),
+(107, 44, 'set', 'conference_auto_outcall_flags=none', 'action', 1070),
+(108, 44, 'conference_set_auto_outcall', 'loopback/9999', 'action', 1080),
+(109, 44, 'conference', 'madboss3@default', 'action', 1090),
+(110, 45, 'answer', '', 'action', 1100),
+(111, 45, 'sleep', '2000', 'action', 1110),
+(112, 45, 'ivr', 'demo_ivr', 'action', 1120),
+(113, 46, 'conference', 'bridge:mydynaconf:sofia/${use_profile}/1234@conference.freeswitch.org', 'action', 1130),
+(114, 47, 'answer', '', 'action', 1140),
+(115, 47, 'esf_page_group', '', 'action', 1150),
+(116, 48, 'set', 'fifo_music=$${hold_music}', 'action', 1160),
+(117, 48, 'fifo', '5900@${domain_name} in', 'action', 1170),
+(118, 49, 'answer', '', 'action', 1180),
+(119, 49, 'fifo', '5900@${domain_name} out nowait', 'action', 1190),
+(120, 51, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1200),
+(121, 54, 'answer', '', 'action', 1210),
+(122, 54, 'fifo', '$1@${domain_name} out nowait', 'action', 1220),
+(123, 57, '', '', 'expression', 1230),
+(124, 57, 'fifo', '$1@${domain_name} in undef $${hold_music}', 'action', 1240),
+(125, 60, 'answer', '', 'action', 1250),
+(126, 60, 'fifo', '$1@${domain_name} out nowait', 'action', 1260),
+(127, 61, 'pre_answer', '', 'action', 1270),
+(128, 61, 'sleep', '20000', 'action', 1280),
+(129, 61, 'answer', '', 'action', 1290),
+(130, 61, 'sleep', '1000', 'action', 1300),
+(131, 61, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1310),
+(132, 61, 'hangup', '', 'action', 1320),
+(133, 62, 'ring_ready', '', 'action', 1330),
+(134, 62, 'sleep', '20000', 'action', 1340),
+(135, 62, 'answer', '', 'action', 1350),
+(136, 62, 'sleep', '1000', 'action', 1360),
+(137, 62, 'playback', 'voicemail/vm-goodbye.wav', 'action', 1370),
+(138, 62, 'hangup', '', 'action', 1380),
+(139, 63, 'set', 'ringback=$${uk-ring}', 'action', 1390),
+(140, 63, 'bridge', 'loopback/wait', 'action', 1400),
+(141, 64, 'set', 'ringback=$${hold_music}', 'action', 1410),
+(142, 64, 'bridge', 'loopback/wait', 'action', 1420),
+(143, 65, 'set', 'transfer_ringback=$${uk-ring}', 'action', 1430),
+(144, 65, 'answer', '', 'action', 1440),
+(145, 65, 'bridge', 'loopback/wait', 'action', 1450),
+(146, 66, 'set', 'transfer_ringback=$${hold_music}', 'action', 1460),
+(147, 66, 'answer', '', 'action', 1470),
+(148, 66, 'bridge', 'loopback/wait', 'action', 1480),
+(149, 67, 'answer', '', 'action', 1490),
+(150, 67, 'info', '', 'action', 1500),
+(151, 67, 'sleep', '250', 'action', 1510),
+(152, 67, 'hangup', '', 'action', 1520),
+(153, 68, 'answer', '', 'action', 1530),
+(154, 68, 'record_fsv', '/tmp/testrecord.fsv', 'action', 1540),
+(155, 69, 'answer', '', 'action', 1550),
+(156, 69, 'play_fsv', '/tmp/testrecord.fsv', 'action', 1560),
+(157, 70, 'answer', '', 'action', 1570),
+(158, 70, 'delay_echo', '5000', 'action', 1580),
+(159, 71, 'answer', '', 'action', 1590),
+(160, 71, 'echo', '', 'action', 1600),
+(161, 72, 'answer', '', 'action', 1610),
+(162, 72, 'playback', 'tone_stream://%(10000,0,1004);loops=-1', 'action', 1620),
+(163, 73, 'answer', '', 'action', 1630),
+(164, 73, 'playback', 'tone_stream://path=${base_dir}/conf/tetris.ttml;loops=10', 'action', 1640),
+(165, 75, 'answer', '', 'action', 1650),
+(166, 75, 'execute_extension', 'is_secure XML features', 'action', 1660),
+(167, 75, 'playback', '$${hold_music}', 'action', 1670),
+(168, 75, 'answer', '', 'anti-action', 1680),
+(169, 75, 'playback', '$${hold_music}', 'anti-action', 1690);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_condition" (
+ "condition_id" int(11) NOT NULL,
+ "extension_id" int(11) NOT NULL,
+ "field" varchar(1238) NOT NULL,
+ "expression" varchar(128) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("condition_id")
+) AUTO_INCREMENT=76 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+INSERT INTO `dialplan_condition` (`condition_id`, `extension_id`, `field`, `expression`, `weight`) VALUES
+(1, 1, '$${unroll_loops}', '^true$', 10),
+(2, 1, '${sip_looped_call}', '^true$', 20),
+(3, 2, '${domain_name}', '^$', 30),
+(4, 2, 'source', 'mod_sofia', 40),
+(5, 2, '${sip_auth_realm}', '^$', 50),
+(6, 3, '${domain_name}', '^$', 60),
+(7, 3, 'source', 'mod_openzap', 70),
+(8, 4, '${strftime(%w)}', '^([1-5])$', 80),
+(9, 4, '${strftime(%H%M)}', '^((09|1[0-7])[0-5][0-9]|1800)$', 90),
+(10, 5, 'destination_number', '^886$', 100),
+(11, 6, 'destination_number', '^\\*8$', 110),
+(12, 7, 'destination_number', '^\\*\\*(\\d+)$', 120),
+(13, 8, 'destination_number', '^870$', 130),
+(14, 9, '${network_addr}', '^$', 140),
+(15, 9, '${numbering_plan}', '^$', 150),
+(16, 9, '${call_debug}', '^true$', 160),
+(17, 9, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 170),
+(18, 9, '', '', 180),
+(19, 10, 'destination_number', '^9001$', 190),
+(20, 11, 'destination_number', '^9000$', 200),
+(21, 12, 'destination_number', '^88(.*)$|^\\*0(.*)$', 210),
+(22, 13, 'destination_number', '^779$', 220),
+(23, 14, 'destination_number', '^\\*69$|^869$|^lcr$', 230),
+(24, 15, 'destination_number', '^80(\\d{2})$', 240),
+(25, 16, 'destination_number', '^81(\\d{2})$', 250),
+(26, 17, 'destination_number', '^82(\\d{2})$', 260),
+(27, 18, 'destination_number', '^83(\\d{2})$', 270),
+(28, 19, 'destination_number', '^8(10[01][0-9])$', 280),
+(29, 20, 'destination_number', '^(20[01][0-9])$', 290),
+(30, 20, 'destination_number', '^${caller_id_number}$', 300),
+(31, 21, 'destination_number', '^3000$', 310),
+(32, 22, 'destination_number', '^3001$', 320),
+(33, 23, 'destination_number', '^3002$', 330),
+(34, 24, 'destination_number', '^operator$|^0$', 340),
+(35, 25, 'destination_number', '^vmain|4000$', 350),
+(36, 26, 'destination_number', '^sip:(.*)$', 360),
+(37, 27, 'destination_number', '^(30\\d{2})$', 370),
+(38, 28, 'destination_number', '^(31\\d{2})$', 380),
+(39, 29, 'destination_number', '^(32\\d{2})$', 390),
+(40, 30, 'destination_number', '^(33\\d{2})$', 400),
+(41, 31, 'destination_number', '^9(888|1616|3232)$', 410),
+(42, 32, 'destination_number', '^0911$', 420),
+(43, 33, 'destination_number', '^0912$', 430),
+(44, 34, 'destination_number', '^0913$', 440),
+(45, 35, 'destination_number', '^5000$', 450),
+(46, 36, 'destination_number', '^5001$', 460),
+(47, 37, 'destination_number', '^pagegroup$|^7243', 470),
+(48, 38, 'destination_number', '^5900$', 480),
+(49, 39, 'destination_number', '^5901$', 490),
+(50, 40, 'source', 'mod_sofia', 500),
+(51, 40, 'destination_number', 'park\\+(\\d+)', 510),
+(52, 41, 'source', 'mod_sofia', 520),
+(53, 41, 'destination_number', '^parking$', 530),
+(54, 41, '${sip_to_params}', 'fifo\\=(\\d+)', 540),
+(55, 42, 'source', 'mod_sofia', 550),
+(56, 42, 'destination_number', 'callpark', 560),
+(57, 42, '${sip_refer_to}', '', 570),
+(58, 43, 'source', 'mod_sofia', 580),
+(59, 43, 'destination_number', 'pickup', 590),
+(60, 43, '${sip_to_params}', 'orbit\\=(\\d+)', 600),
+(61, 44, 'destination_number', '^wait$', 610),
+(62, 45, 'destination_number', '^9980$', 620),
+(63, 46, 'destination_number', '^9981$', 630),
+(64, 47, 'destination_number', '^9982$', 640),
+(65, 48, 'destination_number', '^9983$', 650),
+(66, 49, 'destination_number', '^9984$', 660),
+(67, 50, 'destination_number', '^9992$', 670),
+(68, 51, 'destination_number', '^9993$', 680),
+(69, 52, 'destination_number', '^9994$', 690),
+(70, 53, 'destination_number', '^9995$', 700),
+(71, 54, 'destination_number', '^9996$', 710),
+(72, 55, 'destination_number', '^9997$', 720),
+(73, 56, 'destination_number', '^9998$', 730),
+(74, 57, 'destination_number', '^9999$', 740),
+(75, 57, '${sip_has_crypto}', '^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$', 750);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_context" (
+ "context_id" int(11) NOT NULL,
+ "dialplan_id" int(11) NOT NULL,
+ "context" varchar(64) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("context_id")
+) AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+INSERT INTO `dialplan_context` (`context_id`, `dialplan_id`, `context`, `weight`) VALUES
+(1, 1, 'default', 10),
+(2, 1, 'public', 20);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_extension" (
+ "extension_id" int(11) NOT NULL,
+ "context_id" int(11) NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "continue" varchar(32) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("extension_id")
+) AUTO_INCREMENT=58 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+INSERT INTO `dialplan_extension` (`extension_id`, `context_id`, `name`, `continue`, `weight`) VALUES
+(1, 1, 'unloop', '', 10),
+(2, 1, 'set_domain', 'true', 20),
+(3, 1, 'set_domain_openzap', 'true', 30),
+(4, 1, 'tod_example', 'true', 40),
+(5, 1, 'global-intercept', '', 50),
+(6, 1, 'group-intercept', '', 60),
+(7, 1, 'intercept-ext', '', 70),
+(8, 1, 'redial', '', 80),
+(9, 1, 'global', 'true', 90),
+(10, 1, 'snom-demo-2', '', 100),
+(11, 1, 'snom-demo-1', '', 110),
+(12, 1, 'eavesdrop', '', 120),
+(13, 1, 'eavesdrop', '', 130),
+(14, 1, 'call_return', '', 140),
+(15, 1, 'del-group', '', 150),
+(16, 1, 'add-group', '', 160),
+(17, 1, 'call-group-simo', '', 170),
+(18, 1, 'call-group-order', '', 180),
+(19, 1, 'extension-intercom', '', 190),
+(20, 1, 'Local_Extension', '', 200),
+(21, 1, 'group_dial_sales', '', 210),
+(22, 1, 'group_dial_support', '', 220),
+(23, 1, 'group_dial_billing', '', 230),
+(24, 1, 'operator', '', 240),
+(25, 1, 'vmain', '', 250),
+(26, 1, 'sip_uri', '', 260),
+(27, 1, 'nb_conferences', '', 270),
+(28, 1, 'wb_conferences', '', 280),
+(29, 1, 'uwb_conferences', '', 290),
+(30, 1, 'cdquality_conferences', '', 300),
+(31, 1, 'freeswitch_public_conf_via_sip', '', 310),
+(32, 1, 'mad_boss_intercom', '', 320),
+(33, 1, 'mad_boss_intercom', '', 330),
+(34, 1, 'mad_boss', '', 340),
+(35, 1, 'ivr_demo', '', 350),
+(36, 1, 'dyanmic conference', '', 360),
+(37, 1, 'rtp_multicast_page', '', 370),
+(38, 1, 'park', '', 380),
+(39, 1, 'unpark', '', 390),
+(40, 1, 'park', '', 400),
+(41, 1, 'unpark', '', 410),
+(42, 1, 'park', '', 420),
+(43, 1, 'unpark', '', 430),
+(44, 1, 'wait', '', 440),
+(45, 1, 'ringback_180', '', 450),
+(46, 1, 'ringback_183_uk_ring', '', 460),
+(47, 1, 'ringback_183_music_ring', '', 470),
+(48, 1, 'ringback_post_answer_uk_ring', '', 480),
+(49, 1, 'ringback_post_answer_music', '', 490),
+(50, 1, 'show_info', '', 500),
+(51, 1, 'video_record', '', 510),
+(52, 1, 'video_playback', '', 520),
+(53, 1, 'delay_echo', '', 530),
+(54, 1, 'echo', '', 540),
+(55, 1, 'milliwatt', '', 550),
+(56, 2, 'tone_stream', '', 560),
+(57, 2, 'hold_music', '', 570);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_special" (
+ "id" int(11) NOT NULL,
+ "context" varchar(255) NOT NULL,
+ "class_file" varchar(255) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_context" ("context")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_profiles" (
+ "id" int(10) unsigned NOT NULL,
+ "profile_name" varchar(64) NOT NULL,
+ "type" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_name" ("profile_name")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+INSERT INTO `dingaling_profiles` (`id`, `profile_name`, `type`) VALUES
+(1, 'fs.intralanman.servehttp.com', 'component');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_profile_params" (
+ "id" int(10) unsigned NOT NULL,
+ "dingaling_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_type_name" ("dingaling_id","param_name")
+) AUTO_INCREMENT=5 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+INSERT INTO `dingaling_profile_params` (`id`, `dingaling_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', 'secret'),
+(2, 1, 'dialplan', 'XML,enum'),
+(3, 1, 'server', 'example.org'),
+(4, 1, 'name', 'fs.example.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_settings" (
+ "id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_param" ("param_name")
+) AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+INSERT INTO `dingaling_settings` (`id`, `param_name`, `param_value`) VALUES
+(1, 'debug', '0'),
+(2, 'codec-prefs', '$${global_codec_prefs}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS "directory" (
+ "id" int(11) NOT NULL,
+ "username" varchar(255) NOT NULL,
+ "domain" varchar(255) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=12 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+INSERT INTO `directory` (`id`, `username`, `domain`) VALUES
+(1, '1000', 'example.com'),
+(2, '1001', 'example.org'),
+(3, '1002', 'example.net'),
+(5, '1003', 'example.info'),
+(6, '1004', 'example.com'),
+(7, '1005', 'example.org'),
+(8, '1006', 'example.net'),
+(9, '1007', 'example.info'),
+(10, '2000', 'default'),
+(11, '1009', '$${local_ip_v4}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_domains" (
+ "id" int(10) unsigned NOT NULL,
+ "domain_name" varchar(128) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=3 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+INSERT INTO `directory_domains` (`id`, `domain_name`) VALUES
+(1, 'freeswitch.org'),
+(2, 'sofaswitch.org');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_gateways" (
+ "id" int(10) unsigned NOT NULL,
+ "directory_id" int(10) unsigned NOT NULL,
+ "gateway_name" varchar(128) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_gateway_params" (
+ "id" int(10) unsigned NOT NULL,
+ "d_gw_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_gw_param" ("d_gw_id","param_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_global_params" (
+ "id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(128) NOT NULL,
+ "domain_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+INSERT INTO `directory_global_params` (`id`, `param_name`, `param_value`, `domain_id`) VALUES
+(1, 'default_gateway', 'errors', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_global_vars" (
+ "id" int(10) unsigned NOT NULL,
+ "var_name" varchar(64) NOT NULL,
+ "var_value" varchar(128) NOT NULL,
+ "domain_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_params" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=23 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+INSERT INTO `directory_params` (`id`, `directory_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'password', '1234'),
+(2, 1, 'vm-password', '861000'),
+(3, 2, 'password', '1234'),
+(4, 2, 'vm-password', '861001'),
+(7, 5, 'password', '1234'),
+(8, 6, 'password', '1234'),
+(9, 7, 'password', '1234'),
+(10, 8, 'password', '123456'),
+(11, 9, 'password', '1234'),
+(12, 10, 'password', '123456'),
+(13, 11, 'password', '1234'),
+(14, 3, 'vm-password', '861002'),
+(15, 3, 'password', '1234'),
+(16, 11, 'vm-password', '861009'),
+(17, 10, 'vm-password', '1234'),
+(18, 9, 'vm-password', '861007'),
+(19, 8, 'vm-password', '861006'),
+(20, 7, 'vm-password', '861005'),
+(21, 6, 'vm-password', '861004'),
+(22, 5, 'vm-password', '861003');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_vars" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) default NULL,
+ "var_name" varchar(255) default NULL,
+ "var_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=6 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+INSERT INTO `directory_vars` (`id`, `directory_id`, `var_name`, `var_value`) VALUES
+(1, 1, 'numbering_plan', 'US'),
+(2, 2, 'numbering_plan', 'US'),
+(3, 3, 'numbering_plan', 'AU'),
+(4, 5, 'numbering_plan', 'US'),
+(5, 5, 'area_code', '434');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "iax_conf" (
+ "id" int(11) NOT NULL,
+ "profile_name" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+INSERT INTO `iax_conf` (`id`, `profile_name`) VALUES
+(3, 'test_profile');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "iax_settings" (
+ "id" int(11) NOT NULL,
+ "iax_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=43 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+INSERT INTO `iax_settings` (`id`, `iax_id`, `param_name`, `param_value`) VALUES
+(35, 3, 'debug', '1'),
+(36, 3, 'ip', '$${local_ip_v4}'),
+(37, 3, 'port', '4569'),
+(38, 3, 'context', 'public'),
+(39, 3, 'dialplan', 'enum,XML'),
+(40, 3, 'codec-prefs', '$${global_codec_prefs}'),
+(41, 3, 'codec-master', 'us'),
+(42, 3, 'codec-rate', '8');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "ivr_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "name" varchar(64) NOT NULL,
+ "greet_long" varchar(255) NOT NULL,
+ "greet_short" varchar(255) NOT NULL,
+ "invalid_sound" varchar(255) NOT NULL,
+ "exit_sound" varchar(255) NOT NULL,
+ "max_failures" int(10) unsigned NOT NULL default '3',
+ "timeout" int(11) NOT NULL default '5',
+ "tts_engine" varchar(64) default NULL,
+ "tts_voice" varchar(64) default NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_name" ("name")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+INSERT INTO `ivr_conf` (`id`, `name`, `greet_long`, `greet_short`, `invalid_sound`, `exit_sound`, `max_failures`, `timeout`, `tts_engine`, `tts_voice`) VALUES
+(1, 'demo', 'soundfiles/ivr/demo/greet-long.wav', 'soundfiles/ivr/demo/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, 'cepstral', 'allison'),
+(2, 'demo2', 'soundfiles/ivr/demo2/greet-long.wav', 'soundfiles/ivr/demo2/greet-short.wav', 'soundfiles/ivr/invalid.wav', 'soundfiles/ivr/exit.wav', 3, 5, NULL, NULL),
+(3, 'menu8', 'soundfiles/ivr/menu8/greet-long.wav', 'soundfiles/ivr/menu8/greet-short.wav', 'soundfiles/ivr/menu8/invalid.wav', 'soundfiles/ivr/menu8/exit.wav', 3, 5, NULL, NULL);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS "ivr_entries" (
+ "id" int(10) unsigned NOT NULL,
+ "ivr_id" int(10) unsigned NOT NULL,
+ "action" varchar(64) NOT NULL,
+ "digits" varchar(16) NOT NULL,
+ "params" varchar(255) default NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_ivr_digits" ("ivr_id","digits")
+) AUTO_INCREMENT=11 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+INSERT INTO `ivr_entries` (`id`, `ivr_id`, `action`, `digits`, `params`) VALUES
+(1, 1, 'menu-play-sound', '1', 'soundfiles/features.wav'),
+(2, 1, 'menu-exit', '*', NULL),
+(3, 1, 'menu-sub', '2', 'demo2'),
+(4, 1, 'menu-exec-api', '3', 'bridge sofia/$${domain}/888@conference.freeswtich.org'),
+(5, 1, 'menu-call-transfer', '4', '888'),
+(6, 2, 'menu-back', '#', NULL),
+(7, 2, 'menu-top', '*', NULL),
+(8, 3, 'menu-back', '#', NULL),
+(9, 3, 'menu-top', '*', NULL),
+(10, 3, 'menu-playsound', '4', 'soundfiles/4.wav');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "limit_conf" (
+ "id" int(11) NOT NULL,
+ "name" varchar(255) default NULL,
+ "value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS "limit_data" (
+ "hostname" varchar(255) default NULL,
+ "realm" varchar(255) default NULL,
+ "id" varchar(255) default NULL,
+ "uuid" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "local_stream_conf" (
+ "id" int(11) NOT NULL,
+ "directory_name" varchar(255) default NULL,
+ "directory_path" text,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "modless_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "conf_name" varchar(64) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+INSERT INTO `modless_conf` (`id`, `conf_name`) VALUES
+(1, 'acl.conf'),
+(2, 'postl_load_switch.conf'),
+(3, 'post_load_modules.conf');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "post_load_modules_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "module_name" varchar(64) NOT NULL,
+ "load_module" tinyint(1) NOT NULL default '1',
+ "priority" int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_mod" ("module_name")
+) AUTO_INCREMENT=54 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+INSERT INTO `post_load_modules_conf` (`id`, `module_name`, `load_module`, `priority`) VALUES
+(1, 'mod_sofia', 1, 2000),
+(2, 'mod_iax', 1, 2000),
+(3, 'mod_xml_rpc', 1, 100),
+(4, 'mod_portaudio', 1, 1000),
+(5, 'mod_enum', 1, 2000),
+(6, 'mod_xml_cdr', 1, 1000),
+(7, 'mod_spidermonkey', 1, 1000),
+(8, 'mod_alsa', 0, 1000),
+(9, 'mod_log_file', 1, 0),
+(10, 'mod_commands', 1, 1000),
+(11, 'mod_voicemail', 1, 1000),
+(12, 'mod_dialplan_xml', 1, 150),
+(13, 'mod_dialplan_asterisk', 1, 150),
+(14, 'mod_openzap', 0, 1000),
+(15, 'mod_woomera', 0, 1000),
+(17, 'mod_speex', 1, 500),
+(18, 'mod_ilbc', 0, 1000),
+(20, 'mod_g723_1', 1, 500),
+(21, 'mod_g729', 1, 500),
+(22, 'mod_g722', 1, 500),
+(23, 'mod_g726', 1, 500),
+(25, 'mod_amr', 1, 500),
+(26, 'mod_fifo', 1, 1000),
+(27, 'mod_limit', 1, 1000),
+(28, 'mod_syslog', 1, 0),
+(29, 'mod_dingaling', 1, 2000),
+(30, 'mod_cdr_csv', 1, 1000),
+(31, 'mod_event_socket', 1, 100),
+(32, 'mod_multicast', 0, 1000),
+(33, 'mod_zeroconf', 0, 1000),
+(34, 'mod_xmpp_event', 0, 1000),
+(35, 'mod_sndfile', 1, 1000),
+(36, 'mod_native_file', 1, 1000),
+(37, 'mod_shout', 1, 1000),
+(38, 'mod_local_stream', 1, 1000),
+(39, 'mod_perl', 0, 1000),
+(40, 'mod_python', 0, 1000),
+(41, 'mod_java', 0, 1000),
+(42, 'mod_cepstral', 0, 1000),
+(43, 'mod_openmrcp', 0, 1000),
+(44, 'mod_lumenvox', 0, 1000),
+(45, 'mod_rss', 0, 1000),
+(46, 'mod_say_de', 1, 1000),
+(47, 'mod_say_fr', 0, 1000),
+(48, 'mod_say_en', 1, 1000),
+(49, 'mod_conference', 1, 1000),
+(50, 'mod_ivr', 0, 1000),
+(51, 'mod_console', 1, 0),
+(52, 'mod_dptools', 1, 1500),
+(53, 'mod_voipcodecs', 1, 500);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "rss_conf" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) NOT NULL,
+ "feed" text NOT NULL,
+ "local_file" text NOT NULL,
+ "description" text,
+ "priority" int(11) NOT NULL default '1000',
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_authentication" (
+ "nonce" varchar(255) default NULL,
+ "expires" int(11) default NULL
+);
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_dialogs" (
+ "call_id" varchar(255) default NULL,
+ "uuid" varchar(255) default NULL,
+ "sip_to_user" varchar(255) default NULL,
+ "sip_to_host" varchar(255) default NULL,
+ "sip_from_user" varchar(255) default NULL,
+ "sip_from_host" varchar(255) default NULL,
+ "contact_user" varchar(255) default NULL,
+ "contact_host" varchar(255) default NULL,
+ "state" varchar(255) default NULL,
+ "direction" varchar(255) default NULL,
+ "user_agent" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_registrations" (
+ "call_id" varchar(255) default NULL,
+ "sip_user" varchar(255) default NULL,
+ "sip_host" varchar(255) default NULL,
+ "contact" varchar(1024) default NULL,
+ "status" varchar(255) default NULL,
+ "rpid" varchar(255) default NULL,
+ "expires" int(11) default NULL,
+ "user_agent" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_subscriptions" (
+ "proto" varchar(255) default NULL,
+ "sip_user" varchar(255) default NULL,
+ "sip_host" varchar(255) default NULL,
+ "sub_to_user" varchar(255) default NULL,
+ "sub_to_host" varchar(255) default NULL,
+ "event" varchar(255) default NULL,
+ "contact" varchar(1024) default NULL,
+ "call_id" varchar(255) default NULL,
+ "full_from" varchar(255) default NULL,
+ "full_via" varchar(255) default NULL,
+ "expires" int(11) default NULL,
+ "user_agent" varchar(255) default NULL,
+ "accept" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_aliases" (
+ "id" int(10) unsigned NOT NULL,
+ "sofia_id" int(10) unsigned NOT NULL,
+ "alias_name" varchar(255) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+INSERT INTO `sofia_aliases` (`id`, `sofia_id`, `alias_name`) VALUES
+(1, 1, 'default'),
+(3, 1, 'sip.example.com');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_conf" (
+ "id" int(11) NOT NULL,
+ "profile_name" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+INSERT INTO `sofia_conf` (`id`, `profile_name`) VALUES
+(1, '$${domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_domains" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "domain_name" varchar(255) default NULL,
+ "parse" tinyint(1) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_gateways" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "gateway_name" varchar(255) default NULL,
+ "gateway_param" varchar(255) default NULL,
+ "gateway_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=15 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+INSERT INTO `sofia_gateways` (`id`, `sofia_id`, `gateway_name`, `gateway_param`, `gateway_value`) VALUES
+(8, 1, 'default', 'proxy', 'asterlink.com'),
+(9, 1, 'default', 'realm', 'asterlink.com'),
+(10, 1, 'default', 'username', 'USERNAME_HERE'),
+(11, 1, 'default', 'register', 'false'),
+(12, 1, 'default', 'expire-seconds', '60'),
+(13, 1, 'default', 'retry_seconds', '2'),
+(14, 1, 'default', 'password', 'PASSWORD_HERE');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_settings" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=37 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+INSERT INTO `sofia_settings` (`id`, `sofia_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'user-agent-string', 'RayUA 2.0pre4'),
+(2, 1, 'auth-calls', 'true'),
+(5, 1, 'debug', '1'),
+(6, 1, 'rfc2833-pt', '101'),
+(7, 1, 'sip-port', '5060'),
+(8, 1, 'dialplan', 'XML'),
+(9, 1, 'dtmf-duration', '100'),
+(10, 1, 'codec-prefs', '$${global_codec_prefs}'),
+(11, 1, 'rtp-timeout-sec', '300'),
+(12, 1, 'rtp-ip', '$${local_ip_v4}'),
+(13, 1, 'sip-ip', '$${local_ip_v4}'),
+(14, 1, 'context', 'default'),
+(15, 1, 'manage-presence', 'true'),
+(16, 1, 'force-register-domain', 'intralanman.servehttp.com'),
+(17, 1, 'inbound-codec-negotiation', 'generous'),
+(18, 1, 'rtp-rewrite-timestampes', 'true'),
+(19, 1, 'nonce-ttl', '60'),
+(20, 1, 'vad', 'out'),
+(36, 1, 'odbc-dsn', 'freeswitch-mysql:freeswitch:Fr33Sw1tch');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "vm_profile" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_profile" ("vm_profile")
+) AUTO_INCREMENT=2 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+INSERT INTO `voicemail_conf` (`id`, `vm_profile`) VALUES
+(1, 'default');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_email" (
+ "id" int(10) unsigned NOT NULL,
+ "voicemail_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_profile_param" ("param_name","voicemail_id")
+) AUTO_INCREMENT=4 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+INSERT INTO `voicemail_email` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'template-file', 'voicemail.tpl'),
+(2, 1, 'date-fmt', '%A, %B %d %Y, %I %M %p'),
+(3, 1, 'email-from', '${voicemail_account}@${voicemail_domain}');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_settings" (
+ "id" int(11) NOT NULL,
+ "voicemail_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=31 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+INSERT INTO `voicemail_settings` (`id`, `voicemail_id`, `param_name`, `param_value`) VALUES
+(1, 1, 'file-extension', 'wav'),
+(2, 1, 'terminator-key', '#'),
+(3, 1, 'max-login-attempts', '3'),
+(4, 1, 'digit-timeout', '10000'),
+(5, 1, 'max-record-length', '300'),
+(6, 1, 'tone-spec', '%(1000, 0, 640)'),
+(7, 1, 'callback-dialplan', 'XML'),
+(8, 1, 'callback-context', 'default'),
+(9, 1, 'play-new-messages-key', '1'),
+(10, 1, 'play-saved-messages-key', '2'),
+(11, 1, 'main-menu-key', '*'),
+(12, 1, 'config-menu-key', '5'),
+(13, 1, 'record-greeting-key', '1'),
+(14, 1, 'choose-greeting-key', '2'),
+(15, 1, 'record-file-key', '3'),
+(16, 1, 'listen-file-key', '1'),
+(17, 1, 'record-name-key', '3'),
+(18, 1, 'save-file-key', '9'),
+(19, 1, 'delete-file-key', '7'),
+(20, 1, 'undelete-file-key', '8'),
+(21, 1, 'email-key', '4'),
+(22, 1, 'pause-key', '0'),
+(23, 1, 'restart-key', '1'),
+(24, 1, 'ff-key', '6'),
+(25, 1, 'rew-key', '4'),
+(26, 1, 'record-silence-threshold', '200'),
+(27, 1, 'record-silence-hits', '2'),
+(28, 1, 'web-template-file', 'web-vm.tpl'),
+(29, 1, 'operator-extension', 'operator XML default'),
+(30, 1, 'operator-key', '9');
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT "dingaling_profile" FOREIGN KEY ("dingaling_id") REFERENCES "dingaling_profiles" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle.sql
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle.sql (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_curl/sql/oracle.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle.sql (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_curl/sql/oracle.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,885 @@
+-- phpMyAdmin SQL Dump
+-- version 3.1.2deb1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Feb 15, 2009 at 09:37 PM
+-- Server version: 5.0.75
+-- PHP Version: 5.2.6-3ubuntu2
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `freeswitch`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_lists`
+--
+
+CREATE TABLE IF NOT EXISTS "acl_lists" (
+ "id" int(10) unsigned NOT NULL,
+ "acl_name" varchar(128) NOT NULL,
+ "default_policy" varchar(45) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_lists`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `acl_nodes`
+--
+
+CREATE TABLE IF NOT EXISTS "acl_nodes" (
+ "id" int(10) unsigned NOT NULL,
+ "cidr" varchar(45) NOT NULL,
+ "type" varchar(16) NOT NULL,
+ "list_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `acl_nodes`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_advertise`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_advertise" (
+ "id" int(10) unsigned NOT NULL,
+ "room" varchar(64) NOT NULL,
+ "status" varchar(128) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_room" ("room")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_advertise`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_controls`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_controls" (
+ "id" int(10) unsigned NOT NULL,
+ "conf_group" varchar(64) NOT NULL,
+ "action" varchar(64) NOT NULL,
+ "digits" varchar(16) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_group_action" ("conf_group","action")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_controls`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `conference_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS "conference_profiles" (
+ "id" int(10) unsigned NOT NULL,
+ "profile_name" varchar(64) NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ KEY "unique_profile_param" ("profile_name","param_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `conference_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan" (
+ "dialplan_id" int(11) NOT NULL,
+ "domain" varchar(128) NOT NULL,
+ "ip_address" varchar(15) NOT NULL,
+ PRIMARY KEY ("dialplan_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_actions`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_actions" (
+ "action_id" int(11) NOT NULL,
+ "condition_id" int(11) NOT NULL,
+ "application" varchar(256) NOT NULL,
+ "data" varchar(256) NOT NULL,
+ "type" varchar(32) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("action_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_actions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_condition`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_condition" (
+ "condition_id" int(11) NOT NULL,
+ "extension_id" int(11) NOT NULL,
+ "field" varchar(1238) NOT NULL,
+ "expression" varchar(128) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("condition_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_condition`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_context`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_context" (
+ "context_id" int(11) NOT NULL,
+ "dialplan_id" int(11) NOT NULL,
+ "context" varchar(64) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("context_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_context`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_extension`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_extension" (
+ "extension_id" int(11) NOT NULL,
+ "context_id" int(11) NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "continue" varchar(32) NOT NULL,
+ "weight" int(11) NOT NULL,
+ PRIMARY KEY ("extension_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_extension`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dialplan_special`
+--
+
+CREATE TABLE IF NOT EXISTS "dialplan_special" (
+ "id" int(11) NOT NULL,
+ "context" varchar(255) NOT NULL,
+ "class_file" varchar(255) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_context" ("context")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dialplan_special`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profiles`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_profiles" (
+ "id" int(10) unsigned NOT NULL,
+ "profile_name" varchar(64) NOT NULL,
+ "type" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_name" ("profile_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profiles`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_profile_params`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_profile_params" (
+ "id" int(10) unsigned NOT NULL,
+ "dingaling_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_type_name" ("dingaling_id","param_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_profile_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `dingaling_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "dingaling_settings" (
+ "id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_param" ("param_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `dingaling_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory`
+--
+
+CREATE TABLE IF NOT EXISTS "directory" (
+ "id" int(11) NOT NULL,
+ "username" varchar(255) NOT NULL,
+ "domain" varchar(255) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_domains`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_domains" (
+ "id" int(10) unsigned NOT NULL,
+ "domain_name" varchar(128) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_gateways" (
+ "id" int(10) unsigned NOT NULL,
+ "directory_id" int(10) unsigned NOT NULL,
+ "gateway_name" varchar(128) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_gateway_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_gateway_params" (
+ "id" int(10) unsigned NOT NULL,
+ "d_gw_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_gw_param" ("d_gw_id","param_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_gateway_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_global_params" (
+ "id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(128) NOT NULL,
+ "domain_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_global_vars`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_global_vars" (
+ "id" int(10) unsigned NOT NULL,
+ "var_name" varchar(64) NOT NULL,
+ "var_value" varchar(128) NOT NULL,
+ "domain_id" int(10) unsigned NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_global_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_params`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_params" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_params`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `directory_vars`
+--
+
+CREATE TABLE IF NOT EXISTS "directory_vars" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) default NULL,
+ "var_name" varchar(255) default NULL,
+ "var_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `directory_vars`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "iax_conf" (
+ "id" int(11) NOT NULL,
+ "profile_name" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `iax_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "iax_settings" (
+ "id" int(11) NOT NULL,
+ "iax_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `iax_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "ivr_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "name" varchar(64) NOT NULL,
+ "greet_long" varchar(255) NOT NULL,
+ "greet_short" varchar(255) NOT NULL,
+ "invalid_sound" varchar(255) NOT NULL,
+ "exit_sound" varchar(255) NOT NULL,
+ "max_failures" int(10) unsigned NOT NULL default '3',
+ "timeout" int(11) NOT NULL default '5',
+ "tts_engine" varchar(64) default NULL,
+ "tts_voice" varchar(64) default NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_name" ("name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ivr_entries`
+--
+
+CREATE TABLE IF NOT EXISTS "ivr_entries" (
+ "id" int(10) unsigned NOT NULL,
+ "ivr_id" int(10) unsigned NOT NULL,
+ "action" varchar(64) NOT NULL,
+ "digits" varchar(16) NOT NULL,
+ "params" varchar(255) default NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_ivr_digits" ("ivr_id","digits")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `ivr_entries`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "limit_conf" (
+ "id" int(11) NOT NULL,
+ "name" varchar(255) default NULL,
+ "value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `limit_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `limit_data`
+--
+
+CREATE TABLE IF NOT EXISTS "limit_data" (
+ "hostname" varchar(255) default NULL,
+ "realm" varchar(255) default NULL,
+ "id" varchar(255) default NULL,
+ "uuid" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `limit_data`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `local_stream_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "local_stream_conf" (
+ "id" int(11) NOT NULL,
+ "directory_name" varchar(255) default NULL,
+ "directory_path" text,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `local_stream_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `modless_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "modless_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "conf_name" varchar(64) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `modless_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `post_load_modules_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "post_load_modules_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "module_name" varchar(64) NOT NULL,
+ "load_module" tinyint(1) NOT NULL default '1',
+ "priority" int(10) unsigned NOT NULL default '1000',
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_mod" ("module_name")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `post_load_modules_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rss_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "rss_conf" (
+ "id" int(11) NOT NULL,
+ "directory_id" int(11) NOT NULL,
+ "feed" text NOT NULL,
+ "local_file" text NOT NULL,
+ "description" text,
+ "priority" int(11) NOT NULL default '1000',
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `rss_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_authentication`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_authentication" (
+ "nonce" varchar(255) default NULL,
+ "expires" int(11) default NULL
+);
+
+--
+-- Dumping data for table `sip_authentication`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_dialogs`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_dialogs" (
+ "call_id" varchar(255) default NULL,
+ "uuid" varchar(255) default NULL,
+ "sip_to_user" varchar(255) default NULL,
+ "sip_to_host" varchar(255) default NULL,
+ "sip_from_user" varchar(255) default NULL,
+ "sip_from_host" varchar(255) default NULL,
+ "contact_user" varchar(255) default NULL,
+ "contact_host" varchar(255) default NULL,
+ "state" varchar(255) default NULL,
+ "direction" varchar(255) default NULL,
+ "user_agent" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_dialogs`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_registrations`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_registrations" (
+ "call_id" varchar(255) default NULL,
+ "sip_user" varchar(255) default NULL,
+ "sip_host" varchar(255) default NULL,
+ "contact" varchar(1024) default NULL,
+ "status" varchar(255) default NULL,
+ "rpid" varchar(255) default NULL,
+ "expires" int(11) default NULL,
+ "user_agent" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_registrations`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sip_subscriptions`
+--
+
+CREATE TABLE IF NOT EXISTS "sip_subscriptions" (
+ "proto" varchar(255) default NULL,
+ "sip_user" varchar(255) default NULL,
+ "sip_host" varchar(255) default NULL,
+ "sub_to_user" varchar(255) default NULL,
+ "sub_to_host" varchar(255) default NULL,
+ "event" varchar(255) default NULL,
+ "contact" varchar(1024) default NULL,
+ "call_id" varchar(255) default NULL,
+ "full_from" varchar(255) default NULL,
+ "full_via" varchar(255) default NULL,
+ "expires" int(11) default NULL,
+ "user_agent" varchar(255) default NULL,
+ "accept" varchar(255) default NULL
+);
+
+--
+-- Dumping data for table `sip_subscriptions`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_aliases`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_aliases" (
+ "id" int(10) unsigned NOT NULL,
+ "sofia_id" int(10) unsigned NOT NULL,
+ "alias_name" varchar(255) NOT NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_aliases`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_conf" (
+ "id" int(11) NOT NULL,
+ "profile_name" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_domains`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_domains" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "domain_name" varchar(255) default NULL,
+ "parse" tinyint(1) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_domains`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_gateways`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_gateways" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "gateway_name" varchar(255) default NULL,
+ "gateway_param" varchar(255) default NULL,
+ "gateway_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_gateways`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sofia_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "sofia_settings" (
+ "id" int(11) NOT NULL,
+ "sofia_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `sofia_settings`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_conf`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_conf" (
+ "id" int(10) unsigned NOT NULL,
+ "vm_profile" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_profile" ("vm_profile")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_conf`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_email`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_email" (
+ "id" int(10) unsigned NOT NULL,
+ "voicemail_id" int(10) unsigned NOT NULL,
+ "param_name" varchar(64) NOT NULL,
+ "param_value" varchar(64) NOT NULL,
+ PRIMARY KEY ("id"),
+ UNIQUE KEY "unique_profile_param" ("param_name","voicemail_id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_email`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `voicemail_settings`
+--
+
+CREATE TABLE IF NOT EXISTS "voicemail_settings" (
+ "id" int(11) NOT NULL,
+ "voicemail_id" int(11) default NULL,
+ "param_name" varchar(255) default NULL,
+ "param_value" varchar(255) default NULL,
+ PRIMARY KEY ("id")
+) AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `voicemail_settings`
+--
+
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `dingaling_profile_params`
+--
+ALTER TABLE `dingaling_profile_params`
+ ADD CONSTRAINT "dingaling_profile" FOREIGN KEY ("dingaling_id") REFERENCES "dingaling_profiles" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_sock)
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/fs_sock.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/fs_sock.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_sock/fs_sock.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/fs_sock.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/fs_sock.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,426 @@
+<?php
+/**
+ * Class for FreeSWITCH event socket
+ *
+ */
+
+/**
+ * Class for FreeSWITCH event socket
+ *
+ */
+class fs_sock {
+ /**
+ * file handler for FreeSWITCH socket connection
+ *
+ * @var file pointer
+ */
+ public $sock;
+
+ /**
+ * Sets Whether auth was successful or not
+ * Used to not send further commands until auth is successful
+ *
+ * @var boolean
+ */
+ public $auth;
+
+ /**
+ * Variable to hold current command
+ *
+ * @var string
+ */
+ private $command = 'initial_read';
+
+ private $input_buffer;
+ private $output_buffer;
+
+ /**
+ * Class instantiation
+ * This method will connect to the socket and authenticate
+ *
+ * @param array $vars
+ * @return fs_sock
+ */
+ function fs_sock($vars=null) {
+ if (!defined('BUFFER_SIZE')) {
+ /**
+ * This is the buffer size for fread/fgets operations (default 4096)
+ * Define BUFFER_SIZE before instantiation to use a different size
+ */
+ define('BUFFER_SIZE', 4096);
+ }
+ $vars_array = is_array($vars) ? $vars : array();
+ $initial_vars = $this -> set_initial_vars($vars_array);
+ //$this -> debug($initial_vars);
+ $this -> sock_connect($initial_vars);
+ $initial_output = $this -> sock_get();
+ if ($initial_output['Content-Type'] == 'auth/request') {
+ $this -> debug('---- authentication requested ----');
+ $this -> sock_auth($initial_vars['pass']);
+ }
+ }
+
+ /**
+ * Close the connection to the event socket
+ *
+ */
+ function sock_close() {
+ $this -> send_command('exit');
+ fclose($this -> sock);
+ }
+
+ /**
+ * Sets connection info from array passed, or used a set of defaults if nothing is passed
+ *
+ * @param array $var_array array of connection settings to use (host|port|pass|timeout)
+ * @return array
+ */
+ function set_initial_vars($var_array) {
+ $defaults = array(
+ 'host' => '127.0.0.1',
+ 'port' => '8021',
+ 'pass' => 'ClueCon',
+ 'timeout' => 30,
+ 'stream_timeout' => 5
+ );
+ if (array_key_exists('host', $var_array)
+ && $var_array['host'] == 'localhost') {
+ //$this -> debug('Replacing localhost with 127.0.0.1');
+ $var_array['host'] = '127.0.0.1';
+ }
+ foreach ($defaults as $key => $val) {
+ if (array_key_exists($key, $var_array)) {
+ //$this -> debug("$key found in vars");
+ $connection_settings[$key] = $var_array[$key];
+ } else {
+ //$this -> debug("$key not found in vars");
+ $connection_settings[$key] = $val;
+ }
+ }
+ //$this -> debug($connection_settings);
+ return $connection_settings;
+ }
+
+ /**
+ * Connect to the event socket using the array determined by set_initial_vars
+ *
+ * @param array $sock_array array of connection parameters
+ * @return boolean
+ */
+ function sock_connect($sock_array) {
+ //$this -> debug($sock_array);
+ $host = $sock_array['host'];
+ $port = $sock_array['port'];
+ $timeout = $sock_array['timeout'];
+ $this -> sock = fsockopen($host, $port, $errno, $errstr, $timeout);
+ if (!$this -> sock) {
+ $error = sprintf('Unable to connect to %s:%s Error #%s: %s'
+ , $host, $port, $errno, $errstr
+ );
+ trigger_error($error, E_USER_ERROR);
+ return false;
+ } else {
+ //$this -> debug(stream_get_meta_data($this -> sock));
+ $this -> set_stream_opts($sock_array);
+ return true;
+ }
+ }
+
+ /**
+ * Set the stream timeout to not block for long periods of time
+ *
+ * @param array $opts initial options passed to class instantiation
+ * @return void
+ */
+ function set_stream_opts($opts) {
+ //$this -> debug($opts);
+ if (ereg('^[0-9]*\.[0-9]+$', $opts['stream_timeout'])) {
+ //$this -> debug($opts['stream_timeout'] . ' seems to be a float');
+ $time_opts = split('\.', $opts['stream_timeout']);
+ //$this -> debug($time_opts);
+ $secs = sprintf('%d', $time_opts[0]);
+ $ms = ($time_opts[1] * 100000);
+ } else {
+ $secs = $opts['stream_timeout'];
+ $ms = 0;
+ }
+ if (!stream_set_timeout($this -> sock, $secs, $ms)) {
+ $this -> debug(
+ "Failed to set timeout to $secs seconds and $ms microseconds"
+ );
+ }
+ }
+
+ /**
+ * Authenticate to the FreeSWITCH event socket
+ *
+ * @param string $pass FreeSWITCH event socket password
+ * @return void
+ */
+ function sock_auth($pass) {
+ $reply = $this -> send_command("auth $pass");
+ if (is_array($reply) && array_key_exists('Reply-Text', $reply)
+ && ereg('^\+?OK', $reply['Reply-Text'])) {
+ $this -> debug('Successfully authenticated');
+ $this -> debug($reply);
+ $this -> auth = true;
+ } else {
+ $this -> debug('Failed to authenticate');
+ $this -> debug($reply);
+ $this -> auth = false;
+ }
+ }
+
+ /**
+ * write raw data to the FreeSWITCH socket
+ *
+ * @param string $input command to write to the socket
+ */
+ private function sock_put($input, $sock=null) {
+ $sock = is_null($sock) ? $this -> sock : $sock;
+ fputs($this -> sock, $input);
+ }
+
+ /**
+ * Read an event from the FreeSWITCH event socket
+ *
+ * @return array multi-dimentional array of the event
+ */
+ private function sock_get($sock=null) {
+ $sock = is_null($sock) ? $this -> sock : $sock;
+ $this -> debug('---- Event Start ----');
+ while ($orig_line = fgets($this -> sock, BUFFER_SIZE)) {
+ $trim_line = trim($orig_line);
+ $this -> debug($trim_line);
+ if (strlen($trim_line) > 0) {
+ if (strstr($trim_line, ":")) {
+ $split = split(":", $trim_line);
+ $header = trim($split[0]);
+ $value = trim($split[1]);
+ $event[$header] = $value;
+ }
+ } elseif (is_array($event)
+ && array_key_exists('Content-Length', $event)) {
+ $this -> debug("line is empty: " . (empty($trim_line) ? 'true' : 'false'));
+ $event['Body'] = $this -> sock_get_length($event['Content-Length']);
+ break;
+ } else {
+ break;
+ }
+ }
+ $this -> debug('---- Event Finish ----');
+ $this -> debug($event);
+ return $event;
+ }
+
+ /**
+ * Read $content_len bytes from the socket
+ *
+ * @param integer $content_len
+ * @return array
+ */
+ private function sock_get_length($content_len) {
+ $len = 0;
+ $content = null;
+ $this -> debug("calling sock_get_length with length of $content_len");
+ //for ($i=0; $i<$content_len; $i+=strlen($orig_line)) {
+ while ($orig_line = fgets($this -> sock, BUFFER_SIZE)) {
+ $len += strlen($orig_line);
+ $trim_line = trim($orig_line);
+ $this -> debug("$trim_line - $len");
+ if (strstr($orig_line, ":")) {
+ $split = split(":", $orig_line);
+ $attribute = trim($split[0]);
+ $value = trim($split[1]);
+ $content[$attribute] = urldecode($value);
+ } elseif (empty($trim_line) && is_array($content)
+ && array_key_exists('Content-Length', $content)) {
+ $content['Body'] = $this -> sock_get_length($content['Content-Length']);
+ $len += $content['Content-Length'];
+ break;
+ } elseif (!empty($trim_line)) {
+ $content .= $trim_line;
+ }
+ if ($len >= $content_len) {
+ break;
+ }
+ }
+ $this -> debug("leaving after $len bytes");
+ //$this -> debug($content);
+ return $content;
+ }
+
+ /**
+ * Send a command to the FreeSWITCH event socket
+ * This method sends a command string to the FreeSWITCH event socket and
+ * returns true upon success and false upon failure
+ * @param string $cmd command string to send to socket excluding any \r or \n
+ * @return boolean
+ */
+ public function send_command($cmd, $sock=null) {
+ $sock = is_null($sock) ? $this -> sock : $sock;
+ $this -> debug('command is ' . $cmd);
+ $cmd_split = split(' ', $cmd);
+ //$this -> debug($cmd_split);
+ $this -> command = $cmd_split[0];
+ if ($this -> auth != true && $this -> command != 'auth') {
+ unset($this -> command);
+ return false;
+ }
+ $this -> debug("sending command: '$cmd'");
+ $this -> sock_put("$cmd\r\n\r\n", $sock);
+ if ($this -> command != 'exit') {
+ $reply = $this -> sock_get($sock);
+ //$this -> debug($reply);
+ } else {
+ unset($this -> command);
+ return;
+ }
+ if (is_array($reply)) {
+ unset($this -> command);
+ return $reply;
+ } else {
+ unset($this -> command);
+ $this -> debug("Didn't get an array as a reply");
+ return false;
+ }
+ }
+
+ /**
+ * Execute an api command
+ *
+ * @param string $cmd_str
+ * @return array of the response or false
+ */
+ function api_command($cmd_str, $sock=null) {
+ $sock = is_null($sock) ? $this -> sock : $sock;
+ $reply = $this -> send_command("api $cmd_str", $sock);
+ while ($reply['Content-Type'] != 'api/response') {
+ if (count($reply) > 0) {
+ $debug_text = sprintf(
+ "%s - (%s) != (api/response) adding an event to the output buffer"
+ , count($reply), $reply['Content-Type']
+ );
+ $this -> debug($debug_text);
+ $this -> output_buffer[] = $reply;
+ }
+ $reply = $this -> sock_get();
+ }
+ return $reply;
+ }
+
+ /**
+ * Execute a backgrounded api command
+ *
+ * @param string $cmd_str
+ * @return array of the response or false
+ */
+ function bgapi_command($cmd_str) {
+ $reply = $this -> send_command("bgapi $cmd_str");
+ while ($reply['Content-Type'] != 'command/reply') {
+ if (count($reply) > 0) {
+ $debug_text = sprintf(
+ "%s - (%s) != (command/reply) adding an event to the output buffer"
+ , count($reply), $reply['Content-Type']
+ );
+ $this -> debug($debug_text);
+ $this -> output_buffer[] = $reply;
+ }
+ $reply = $this -> sock_get();
+ }
+ if (array_key_exists('Reply-Text', $reply)) {
+ $split = split(':', $reply['Reply-Text']);
+ $uuid = trim($split[1]);
+ $reply['Job-UUID'] = $uuid;
+ }
+ return $reply;
+ }
+
+ /**
+ * Pop an event off of the buffer or try to get one from the socket
+ *
+ * @return array
+ */
+ function read_event() {
+ if (count($this -> output_buffer) > 0) {
+ return array_shift($this -> output_buffer);
+ } else {
+ $reply = $this -> sock_get();
+ return $reply;
+ }
+ }
+
+ /**
+ * Keep trying read_event until we actually get one
+ *
+ * @return array
+ */
+ function wait_for_event() {
+ $event = array();
+ while (count($event) < 1) {
+ $event = $this -> read_event();
+ }
+ return $event;
+ }
+
+ /**
+ * Subscribe to event notifications
+ *
+ * @param mixed $events comma-separated or array of events
+ * @return boolean
+ */
+ function subscribe_events($events) {
+ if (is_array($events)) {
+ if (count($events) > 1) {
+ $events_str = implode(',', $events);
+ } else {
+ $events_str = $events[0];
+ }
+ } else {
+ $events_str = $events;
+ }
+ $reply = $this -> send_command("event plain $events_str");
+ $this -> debug($reply);
+ if (ereg('^\+?OK', $reply['Reply-Text'])) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Function to print out debugging info
+ * This method will recieve arbitrary data and print it to the screen
+ * enable/disable by defining FS_SOCK_DEBUG to true/false
+ * @param mixed $input what to debug, arrays and strings tested, objects MAY work
+ * @param integer $spaces
+ */
+ function debug($input, $spaces=0) {
+ if (defined('FS_SOCK_DEBUG') && FS_SOCK_DEBUG == true) {
+ if (is_array($input)) {
+ foreach ($input as $key=>$val) {
+ if (is_array($val) || is_object($val)) {
+ $this -> debug("[$key] => $val", $spaces+4);
+ $this -> debug('(', $spaces + 8);
+ $this -> debug($val, $spaces + 8);
+ } else {
+ $this -> debug("[$key] => '$val'", $spaces + 4);
+ }
+ }
+ $this -> debug(")", $spaces);
+ } else {
+ if (is_array($_SERVER)
+ && array_key_exists('HTTP_HOST', $_SERVER)) {
+ printf("<!--%s%s-->\r\n"
+ , str_repeat(' ', $spaces)
+ , htmlentities($input)
+ );
+ } else {
+ $input = trim($input);
+ printf("%s%s\r\n", str_repeat(' ', $spaces), $input);
+ }
+ }
+ }
+ }
+}
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/socktest.php
Copied: freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/socktest.php (from rev 14471, freeswitch/trunk/contrib/intralanman/PHP/fs_sock/socktest.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/socktest.php (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/PHP/fs_sock/socktest.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,62 @@
+<?php
+require_once('fs_sock.php');
+
+// uncommenting this will produce LARGE amounts of output
+// define('FS_SOCK_DEBUG', true);
+
+// different connection settings, all of these should work with a fresh install
+$array[] = array('host'=>'127.0.0.1');
+$array[] = array('host'=>'127.0.0.1', 'port'=>'8021');
+$array[] = array('pass'=>'ClueCon', 'timeout'=>7);
+$array[] = array(
+'host'=>'localhost',
+'port'=>'8021',
+'pass'=>'ClueCon',
+'timeout'=>3,
+'stream_timeout'=>0.5
+);
+
+// commands to run, initially this was how i caught a few of my bugs
+$cmds[] = 'status';
+$cmds[] = 'originate';
+$cmds[] = 'reloadxml';
+$cmds[] = 'invalidapp';
+$cmds[] = 'craptest';
+
+$obj = new fs_sock($array[3]);
+if ($obj -> auth != true) {
+ die(printf("Unable to authenticate\r\n"));
+}
+
+if (!$obj -> subscribe_events('ALL')) {
+ die(printf("Unable to subscribe to events"));
+}
+
+for ($x=0; $x<count($cmds); $x++) {
+ $debug_string = sprintf("Return ouput from (%s) is:", $cmds[$x]);
+ $return = $obj -> api_command($cmds[$x]);
+ $bg_return = $obj -> bgapi_command($cmds[$x]);
+
+ $obj -> debug("$debug_string\r\n");
+ $obj -> debug($return);
+ $obj -> debug($bg_return);
+}
+
+
+
+//get $items number of items from the event buffer
+$output = array();
+$items = 25;
+for ($i=0; count($output)<$items; $i++) {
+ $count = count($output);
+ printf("%s - %s\r\n", $i+1, $count);
+ //$output[] = $obj -> read_event();
+ $output[] = $obj -> wait_for_event();
+}
+$obj -> debug($output);
+
+
+
+
+$obj -> sock_close();
+?>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/intralanman/javascript (from rev 14471, freeswitch/trunk/contrib/intralanman/javascript)
Deleted: freeswitch/branches/seven/contrib/intralanman/javascript/cnam.js
Copied: freeswitch/branches/seven/contrib/intralanman/javascript/cnam.js (from rev 14471, freeswitch/trunk/contrib/intralanman/javascript/cnam.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/javascript/cnam.js (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/javascript/cnam.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+/*
+ *
+ * Author Raymond Chandler (intralanman)
+ * This CNAM script will work for IP CNAM queries from metrostat.net
+ * put this .js file in your FS_ROOT/scripts directory and add a line to your
+ * dialplan like the following:
+ * <action application="javascript" data="cnam.js"/>
+ *
+ */
+
+function logger(logstuff, loglevel) {
+ console_log(loglevel, logstuff + "\n");
+}
+
+var cid_num_array = /\+?1?([2-9]\d{2}[0-9]\d{6})/.exec(session.caller_id_number);
+if(cid_num_array && cid_num_array[1].length > 1) {
+ var cid_num = cid_num_array[1];
+} else {
+ exit();
+}
+logger(cid_num, "info");
+
+var base_url = "http://cnam1.edicentral.net/getcnam?q=C&f=S&dn=";
+var complete_url = base_url + cid_num
+logger(complete_url, "info");
+
+var data = fetchURL(complete_url);
+logger("CNAM is: " + data, "info");
+if(data && data.length > 1) {
+ session.setVariable("effective_caller_id_name", data);
+}
Copied: freeswitch/branches/seven/contrib/intralanman/perl (from rev 14471, freeswitch/trunk/contrib/intralanman/perl)
Copied: freeswitch/branches/seven/contrib/intralanman/perl/cdr (from rev 14471, freeswitch/trunk/contrib/intralanman/perl/cdr)
Property changes: freeswitch/branches/seven/contrib/intralanman/perl/cdr
Name: svn:mergeinfo
+
Deleted: freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer
Copied: freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer (from rev 14471, freeswitch/trunk/contrib/intralanman/perl/cdr/cdr-csv-importer) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,107 @@
+#!/usr/bin/perl
+
+use DBI;
+use Data::Dumper;
+use Sys::Syslog;
+
+my $config={};
+my $db;
+my $identifier = 'cdr-csv-importer';
+
+sub parse_config {
+ open(CONFIG, "<cdr-csv-importer.ini") or die("Can't open config file (cdr-csv-importer.ini)\n");
+ while (<CONFIG>) {
+ #print $_;
+ chomp; #kill whitespaces
+
+ next if !(m/^[[:alnum:]]/); #skip lines that don't start right
+ next if m/^\s*$/; #skip lines with only whitespace
+ next if m/^;/; #skip ini comments
+ next if m(/^\[.*\]/); # skip the start of a section
+
+ my ($key, $val) = split(/\s+=\s+/, $_, 2);
+ #print "'$key' = '$val'\n";
+ if($key eq "fields") {
+ @{$config->{fields}} = split(/,/, $val);
+ } else {
+ $config->{$key} = $val;
+ }
+ }
+ close(CONFIG);
+}
+
+sub create_table {
+# my $db = shift;
+ my $sql = "CREATE TABLE IF NOT EXISTS `$config->{table}` (
+ `id` int(11) NOT NULL auto_increment,
+ `caller_id_name` varchar(255) NOT NULL default '',
+ `caller_id_number` varchar(255) NOT NULL default '',
+ `destination_number` varchar(255) NOT NULL default '',
+ `context` varchar(255) NOT NULL default '',
+ `start_stamp` varchar(255) NOT NULL default '',
+ `answer_stamp` varchar(255) NOT NULL default '',
+ `end_stamp` varchar(255) NOT NULL default '',
+ `duration` varchar(255) NOT NULL default '',
+ `billsec` varchar(255) NOT NULL default '',
+ `hangup_cause` varchar(255) NOT NULL default '',
+ `uuid` varchar(255) NOT NULL default '',
+ `bleg_uuid` varchar(255) NOT NULL default '',
+ `accountcode` varchar(255) NOT NULL default '',
+ `read_codec` varchar(255) NOT NULL default '',
+ `write_codec` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uuid` (`uuid`)
+) ENGINE=InnoDB";
+ $db->do($sql);
+ if (!$db->{Executed}) {
+ die("We couldn't CREATE the DB table\n");
+ }
+}
+
+sub connect_db {
+ return DBI->connect($config->{connect_string}, $config->{username}, $config->{password});
+}
+
+sub is_db_connected {
+ $query = $db->prepare("SELECT CURRENT_TIMESTAMP;");
+ $query->execute();
+}
+
+openlog($identifier, 'ndelay,pid', LOG_USER);
+open(STDERR,"|logger -t \"${identifier}[$$]: \"") or die "Error: Unable to redirect STDERR to logger!";
+open(STDOUT,"|logger -t \"${identifier}[$$]: \"") or die "Error: Unable to redirect STDOUT to logger!";
+&parse_config;
+#print Dumper $config;
+open(PID, ">$config->{pid_file}");
+print PID $$;
+$db = &connect_db;
+&create_table($db);
+$field_count = @{$config->{fields}};
+my $values = '?';
+my $fields = $config->{fields}[0];
+for ($i=1; $i<$field_count; $i++) {
+ $fields = sprintf('%s, %s', $fields, $config->{fields}[$i]);
+ $values = sprintf('%s, ?', $values);
+}
+
+
+my $query = sprintf(
+ "INSERT INTO %s (%s) VALUES (%s);",
+ $config->{table}, join(',', @{$config->{fields}}), $values
+ );
+syslog(LOG_INFO, "$query");
+
+sub mylog {
+ $log = shift;
+ syslog(LOG_INFO, "$log");
+}
+
+print Dumper @ARGV;
+my $query_handle = $db->prepare($query);
+while (<STDIN>) {
+ syslog(LOG_INFO, $_);
+ chomp;
+ @values = split(/,/);
+ #print Dumper @values;
+ $query_handle->execute(@values);
+}
Deleted: freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer.ini
Copied: freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer.ini (from rev 14471, freeswitch/trunk/contrib/intralanman/perl/cdr/cdr-csv-importer.ini) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer.ini (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/perl/cdr/cdr-csv-importer.ini 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+[default]
+table = cdrs
+username = freeswitch
+password = Fr33Sw1tch
+connect_string = DBI:mysql:freeswitch
+pid_file = /var/run/cdr-csv-importer.pid
+fields = 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
Deleted: freeswitch/branches/seven/contrib/intralanman/perl/cdr/xml-cdr-importer
Copied: freeswitch/branches/seven/contrib/intralanman/perl/cdr/xml-cdr-importer (from rev 14471, freeswitch/trunk/contrib/intralanman/perl/cdr/xml-cdr-importer) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/perl/cdr/xml-cdr-importer (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/perl/cdr/xml-cdr-importer 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+use strict;
+use Data::Dumper;
+use Sys::Syslog;
+use XML::Simple;
+use CGI;
+use DBI;
+
+openlog('xml-cdr', 'pid|ndelay', "LOG_USER");
+open(DEBUG, ">/tmp/debug.txt");
+
+my $config={};
+my $db;
+my $identifier = 'cdr-csv-importer';
+
+sub parse_config {
+ open(CONFIG, "<cdr-csv-importer.ini") or die("Can't open config file (cdr-csv-importer.ini)\n");
+ while (<CONFIG>) {
+ #print $_;
+ chomp; #kill whitespaces
+
+ next if !(m/^[[:alnum:]]/); #skip lines that don't start right
+ next if m/^\s*$/; #skip lines with only whitespace
+ next if m/^;/; #skip ini comments
+ next if m(/^\[.*\]/); # skip the start of a section
+
+ my ($key, $val) = split(/\s+=\s+/, $_, 2);
+ #print "'$key' = '$val'\n";
+ if($key eq "fields") {
+ @{$config->{fields}} = split(/,/, $val);
+ } else {
+ $config->{$key} = $val;
+ }
+ }
+ close(CONFIG);
+}
+
+sub create_table {
+# my $db = shift;
+ my $sql = "CREATE TABLE IF NOT EXISTS `$config->{table}` (
+ `id` int(11) NOT NULL auto_increment,
+ `caller_id_name` varchar(255) NOT NULL default '',
+ `caller_id_number` varchar(255) NOT NULL default '',
+ `destination_number` varchar(255) NOT NULL default '',
+ `context` varchar(255) NOT NULL default '',
+ `start_stamp` varchar(255) NOT NULL default '',
+ `answer_stamp` varchar(255) NOT NULL default '',
+ `end_stamp` varchar(255) NOT NULL default '',
+ `duration` varchar(255) NOT NULL default '',
+ `billsec` varchar(255) NOT NULL default '',
+ `hangup_cause` varchar(255) NOT NULL default '',
+ `uuid` varchar(255) NOT NULL default '',
+ `bleg_uuid` varchar(255) NOT NULL default '',
+ `accountcode` varchar(255) NOT NULL default '',
+ `read_codec` varchar(255) NOT NULL default '',
+ `write_codec` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uuid` (`uuid`)
+) ENGINE=InnoDB";
+ $db->do($sql);
+ if (!$db->{Executed}) {
+ die("We couldn't CREATE the DB table\n");
+ }
+}
+
+sub connect_db {
+ return DBI->connect($config->{connect_string}, $config->{username}, $config->{password});
+}
+
+sub is_db_connected {
+ my $query = $db->prepare("SELECT CURRENT_TIMESTAMP;");
+ $query->execute();
+}
+
+sub urldecode {
+ my $url = shift;
+ $url =~ s/%([a-fA-F0-9]{2,2})/chr(hex($1))/eg;
+ return $url;
+}
+
+
+
+&parse_config;
+$db = &connect_db;
+&create_table;
+my $cgi = new CGI;
+#syslog("LOG_INFO", Dumper $cgi);
+#syslog("LOG_INFO", Dumper \@ARGV);
+
+my @cgi_params = $cgi->param;
+print "Content-Type: text/plain\r\n\r\n";
+
+my $xml = new XML::Simple();
+#my $cdr = $xml->XMLin('/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml');
+my $cdr = $xml->parse_string($cgi->param('cdr'));
+print DEBUG Dumper $cdr;
+
+my $variables = $cdr->{variables};
+my $caller_profile = {};
+if (ref $cdr->{callflow} eq "ARRAY") {
+ syslog("LOG_INFO", "callflow is an array");
+ $caller_profile = $cdr->{callflow}->[0]->{caller_profile};
+} else {
+ syslog("LOG_INFO", "callflow is not an array");
+ $caller_profile = $cdr->{callflow}->{caller_profile};
+}
+
+#syslog(LOG_INFO, Dumper $cdr);
+
+print "caller_id_name: $caller_profile->{caller_id_name}\n";
+print "caller_id_number: $caller_profile->{caller_id_number}\n";
+print "destination_number: $caller_profile->{destination_number}\n";
+print "context: $caller_profile->{context}\n";
+print "start_stamp: " . &urldecode($variables->{start_stamp}) . "\n";
+print "answer_stamp: " . &urldecode($variables->{answer_stamp}) . "\n";
+print "end_stamp: " . &urldecode($variables->{end_stamp}) . "\n";
+print "duration: $variables->{duration}\n";
+print "billsec: $variables->{billsec}\n";
+print "hangup_cause: $variables->{hangup_cause}\n";
+print "uuid: $caller_profile->{uuid}\n";
+print "bleg_uuid: $caller_profile->{bleg_uuid}\n";
+print "accountcode: $variables->{accountcode}\n";
+print "\n\n";
+
+my $cdr_line = sprintf(
+ '"%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s"',
+ $caller_profile->{caller_id_name},
+ $caller_profile->{caller_id_number},
+ $caller_profile->{destination_number},
+ $caller_profile->{context},
+ &urldecode($variables->{start_stamp}),
+ &urldecode($variables->{answer_stamp}),
+ &urldecode($variables->{end_stamp}),
+ $variables->{duration},
+ $variables->{billsec},
+ $variables->{hangup_cause},
+ $caller_profile->{uuid},
+ $caller_profile->{bleg_uuid},
+ $variables->{accountcode},
+ $variables->{read_codec},
+ $variables->{write_codec}
+);
+
+syslog("LOG_INFO", $cdr_line);
+
+my $query = sprintf(
+ "INSERT INTO %s (%s) VALUES (%s);",
+ $config->{table}, join(',', @{$config->{fields}}), $cdr_line
+ );
+syslog("LOG_INFO", $query);
+$db->do($query);
Deleted: freeswitch/branches/seven/contrib/intralanman/perl/fspb
Copied: freeswitch/branches/seven/contrib/intralanman/perl/fspb (from rev 14471, freeswitch/trunk/contrib/intralanman/perl/fspb) (0 => 14472)
--- freeswitch/branches/seven/contrib/intralanman/perl/fspb (rev 0)
+++ freeswitch/branches/seven/contrib/intralanman/perl/fspb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,76 @@
+#!/usr/bin/perl
+use LWP::UserAgent;
+use Getopt::Long;
+use Sys::Hostname;
+#use Data::Dumper;
+
+sub usage() {
+ print "Options:\n";
+ print " -h This message \n";
+ print " -l Use long hostname (i.e. user\@host)\n";
+ print " -n Nick to use for post\n";
+ print " -r Length of time to keep the post d, m, or f \n\tfor day, month, or forever respectively\n";
+ exit;
+}
+
+my $ua = new LWP::UserAgent;
+$ua->env_proxy();
+my $url = 'http://pastebin.freeswitch.org/';
+my $line;
+my $text;
+my $login = getlogin() || getpwuid($<) || "Anonymous";
+my $host = hostname();
+my @getopt_args = (
+ 'n=s', #nick to use for paste
+ 'H=s', #highlighting to use
+ 'r=s', #how long to keep the paste [dmf]
+ 'l', #use long name user@host
+ 'h', # help, shows usage()
+ 'd' #debug
+);
+
+# Options Stuff
+Getopt::Long::config("noignorecase", "bundling");
+GetOptions(\%options, @getopt_args);
+usage() if $options{h};
+$debug = 1 if $options{d};
+my $nick = length($options{n}) > 0 ? $options{n} : $login;
+$nick = $options{l} ? $nick . "_AT_" . $host : $nick;
+my $highlighting = length($options{H}) > 0 ? $options{H} : 'text';
+my $keep = length($options{r}) > 0 ? $options{r} : 'd';
+if($debug) {
+ print "Nick is $nick\nhighlighting is $highlighting\nKeep for $keep\n";
+}
+#exit;
+
+
+while($line = <STDIN>) {
+ $text .= $line;
+}
+push @{ $ua->requests_redirectable }, 'POST';
+# this should be smart enough to get the realm on its own....
+# maybe in a future version, i'll add that
+$ua ->credentials(
+ 'pastebin.freeswitch.org:80',
+ 'the login and password is pastebin/freeswitch',
+ 'pastebin' => 'freeswitch'
+ );
+my $response = $ua -> post($url,
+ {
+ paste => 'Send',
+ remember => "0",
+ poster => "$nick",
+ format => "$highlighting",
+ code2 => "$text",
+ expiry => "$keep"
+ }
+);
+
+if($debug) {
+ print $response -> content;
+ print "---- Dumper Start ----\n";
+ print Dumper $response;
+ print "---- Dumper Stop ----\n";
+}
+print "Your Post can be seen at: "
+. $response->{_previous}->{_headers}->{location} . "\n";
Copied: freeswitch/branches/seven/contrib/jmesquita (from rev 14471, freeswitch/trunk/contrib/jmesquita)
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/fsgui.pro
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/fsgui.pro (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/fsgui.pro) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/fsgui.pro (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/fsgui.pro 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+SUBDIRS = src/interfaces \
+ src/fsgui \
+ src/plugins/consoleplugin
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src)
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,197 @@
+#include <QtGui>
+#include <QDir>
+#include <QtPlugin>
+#include "servermanager.h"
+#include "settingsdialog.h"
+#include "appmanager.h"
+#include "interfaces.h"
+#include "ui_config_plugin_widget.h"
+
+AppManager::AppManager(QObject *parent)
+ : QObject(parent)
+{
+ reallyClose = NULL;
+ QObject::connect(qApp, SIGNAL(lastWindowClosed()),
+ this, SLOT(lastWindowClosed()));
+
+ QCoreApplication::setOrganizationName("FreeSWITCH");
+ QCoreApplication::setApplicationName("FsGui");
+ settings = new SettingsDialog();
+ QWidget *base = new QWidget;
+ pluginConfigPage = new Ui::pluginConfigPage();
+ pluginConfigPage->setupUi(base);
+ settings->addConfigItem("Plugins", base);
+ QObject::connect(pluginConfigPage->btnRun, SIGNAL(clicked()),
+ this, SLOT(runPlugin()));
+ QObject::connect(pluginConfigPage->listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(pluginSelected(QListWidgetItem*, QListWidgetItem*)));
+
+ serverManager = new ServerManager;
+
+ qApp->setWindowIcon(QIcon(":/icons/fsgui_logo.png"));
+
+ createActions();
+ loadPlugins();
+ settings->show();
+}
+
+
+void AppManager::createActions()
+{
+ action_exit = new QAction(tr("E&xit"), this);
+ action_exit->setShortcut(tr("Ctrl+Q"));
+ action_exit->setToolTip(tr("Exit FsGui"));
+ QObject::connect(action_exit, SIGNAL(triggered()),
+ qApp, SLOT(closeAllWindows()));
+
+ action_preferences = new QAction(tr("&Preferences"), this);
+ QObject::connect(action_preferences, SIGNAL(triggered()),
+ settings, SLOT(show()));
+
+ action_about = new QAction(tr("&About"), this);
+ action_about->setShortcut(QKeySequence::HelpContents);
+ QObject::connect(action_about, SIGNAL(triggered()),
+ this, SLOT(about()));
+}
+
+
+void AppManager::createMenus(QMenuBar * menu_bar)
+{
+ bool file_exists = false;
+ bool edit_exists = false;
+ bool help_exists = false;
+ QList<QAction *> list = menu_bar->actions();
+ for (int i = 0; i < list.size(); ++i) {
+ if (QString::compare(list.at(i)->text(), tr("&File"), Qt::CaseInsensitive) == 0)
+ {
+ list.at(i)->menu()->addAction(action_exit);
+ file_exists = true;
+ }
+ if (QString::compare(list.at(i)->text(), tr("&Edit"), Qt::CaseInsensitive) == 0)
+ {
+ list.at(i)->menu()->addAction(action_preferences);
+ edit_exists = true;
+ }
+ if (QString::compare(list.at(i)->text(), tr("&Help"), Qt::CaseInsensitive) == 0)
+ {
+ list.at(i)->menu()->addAction(action_about);
+ help_exists = true;
+ }
+ }
+ if (file_exists == false)
+ {
+ QMenu * menu_file = new QMenu(tr("&File"), menu_bar);
+ menu_file->addAction(action_exit);
+ menu_bar->insertMenu(list.at(0), menu_file);
+ }
+ if (edit_exists == false)
+ {
+ QMenu * menu_edit = new QMenu(tr("&Edit"), menu_bar);
+ menu_edit->addAction(action_preferences);
+ menu_bar->insertMenu(list.at(1), menu_edit);
+ }
+ if (help_exists == false)
+ {
+ QMenu *menu_help = menu_bar->addMenu(tr("&Help"));
+ menu_help->addAction(action_about);
+ }
+}
+
+void AppManager::loadPlugins()
+{
+ QDir pluginsDir = QDir(qApp->applicationDirPath());
+#if defined(Q_OS_WIN)
+ if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
+ pluginsDir.cdUp();
+#elif defined(Q_OS_MAC)
+ if (pluginsDir.dirName() == "MacOS") {
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ }
+#endif
+ pluginsDir.cd("plugins");
+ foreach (QString fileName, pluginsDir.entryList(QDir::Files))
+ {
+ QPluginLoader *loader = new QPluginLoader(pluginsDir.absoluteFilePath(fileName));
+ if (MonitorInterface *interface = qobject_cast<MonitorInterface *>(loader->instance()))
+ {
+ if(QMainWindow *interface_window = qobject_cast<QMainWindow *>(loader->instance()))
+ {
+ list_available_monitor_plugins.append(loader);
+ interface_window->setWindowTitle(QString("FsGui - ") + interface_window->windowTitle());
+ interface_window->setAttribute(Qt::WA_QuitOnClose);
+ interface->addConfigItems(settings);
+ interface->setServerManager(serverManager);
+ createMenus(interface_window->menuBar());
+ pluginConfigPage->listWidget->addItem(QString("%1\n %2").arg(interface->appName(),
+ interface->appDescription()));
+ }
+ else
+ {
+ QMessageBox::critical(0, tr("Error!"),
+ tr("Plugin %1 does not have the proper main Window"));
+ }
+ }
+ }
+ if (list_available_monitor_plugins.isEmpty())
+ {
+ QMessageBox::critical(0, tr("Error!"),
+ tr("No available plugins. Install compatible plugins before running FsGui."));
+ exit(1);
+ }
+}
+
+void AppManager::runPlugin()
+{
+ if (list_available_monitor_plugins.at(pluginConfigPage->listWidget->currentRow())->isLoaded())
+ {
+ MonitorInterface * interface = qobject_cast<MonitorInterface *>(list_available_monitor_plugins.at(pluginConfigPage->listWidget->currentRow())->instance());
+ interface->newInstance();
+ settings->hide();
+ }
+}
+
+void AppManager::lastWindowClosed()
+{
+ if (!reallyClose)
+ {
+ reallyClose = new QMessageBox();
+ reallyClose->setText("Do you really want to close FsGui?");
+ reallyClose->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ reallyClose->setDefaultButton(QMessageBox::Yes);
+ reallyClose->setIcon(QMessageBox::Warning);
+ int ret = reallyClose->exec();
+ if(ret == QMessageBox::Yes)
+ {
+ for (int i = 0; i < list_available_monitor_plugins.size(); ++i)
+ {
+ list_available_monitor_plugins.at(i)->unload();
+ }
+ exit(0);
+ }
+ else
+ {
+ delete reallyClose;
+ reallyClose = NULL;
+ settings->show();
+ settings->raise();
+ settings->activateWindow();
+ }
+ }
+}
+
+void AppManager::pluginSelected(QListWidgetItem *current, QListWidgetItem */*previous*/)
+{
+ if (current)
+ pluginConfigPage->btnRun->setEnabled(true);
+ else
+ pluginConfigPage->btnRun->setEnabled(false);
+}
+
+void AppManager::about()
+{
+ QMessageBox::about(qobject_cast<QMainWindow *>(list_available_monitor_plugins.first()),
+ tr("About FsGui"),
+ tr("Hey, this is FsGui!!!"));
+}
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/appmanager.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,76 @@
+#ifndef APPMANAGER_H
+#define APPMANAGER_H
+
+#include <QObject>
+#include <QtCore>
+
+namespace Ui {
+ class pluginConfigPage;
+}
+class QMainWindow;
+class QAction;
+class QMenu;
+class QMenuBar;
+class QListWidgetItem;
+class QMessageBox;
+class MonitorInterface;
+class SettingsDialog;
+class ServerManager;
+
+/*!
+ \brief This class will be the center of each installation
+ and will load some plugins.
+ */
+class AppManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ AppManager(QObject *parent = 0);
+
+private:
+ /*!
+ \brief Create all actions that belong to this specific window.
+ */
+ void createActions();
+ /*!
+ \brief Create menus and override offensing default menus.
+ */
+ void createMenus(QMenuBar *menu_bar);
+ /*!
+ \brief Load all plugins populating each corresponding list
+ */
+ void loadPlugins();
+
+ QList<QPluginLoader *> list_available_monitor_plugins; /*< List of available Monitor plugins */
+ QAction *action_exit; /*< Exit the application */
+ QAction *action_preferences; /*< Show the preferences dialog */
+ QAction *action_about; /*< Calls the about dialog */
+ QMenu *menu_file; /*< The file menu on menu bar */
+ QMenu *menu_edit; /*< The edit menu on menu bar */
+ QMenu *menu_help; /*< The help menu on menu bar */
+ ServerManager *serverManager; /*< The dialog that can fetch new esl connections from the config */
+ SettingsDialog *settings; /*< Settings dialog */
+ Ui::pluginConfigPage *pluginConfigPage; /*< The plugin config page being used */
+ QMessageBox *reallyClose;
+
+private slots:
+ /*!
+ \brief Run the selected plugin.
+ */
+ void runPlugin();
+ /*!
+ \brief Cleanup and give plugins a chance to clean for themselves.
+ */
+ void lastWindowClosed();
+ /*!
+ \brief Just enables or disables the run button when no plugins is selected.
+ */
+ void pluginSelected(QListWidgetItem*, QListWidgetItem*);
+ /*!
+ \brief Show the about dialog.
+ */
+ void about();
+};
+
+#endif // APPMANAGER_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>pluginConfigPage</class>
+ <widget class="QWidget" name="pluginConfigPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>374</width>
+ <height>210</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QListWidget" name="listWidget"/>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QPushButton" name="btnRun">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Run</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,19 @@
+# version check qt
+contains(QT_VERSION, ^4\.[0-4]\..*) {
+ message("Cannot build Qt Creator with Qt version $$QT_VERSION.")
+ error("Use at least Qt 4.5.")
+}
+QT += network
+TARGET = ../../bin/fsgui
+TEMPLATE = app
+INCLUDEPATH = ../interfaces \
+ ../../../../../libs/esl/src/include/
+SOURCES += main.cpp \
+ appmanager.cpp
+HEADERS += appmanager.h
+LIBS += -L../interfaces \
+ -linterfaces \
+ -L../../../../../libs/esl/ \
+ -lesl
+FORMS += config_plugin_widget.ui
+RESOURCES += ../resources/resources.qrc
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/main.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/main.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/main.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/main.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/fsgui/main.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "appmanager.h"
+
+int main(int argc, char *argv[])
+{
+ //Q_INIT_RESOURCE(sdi);
+ QApplication a(argc, argv);
+ AppManager w;
+ return a.exec();
+}
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2007, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita <jmesquita (at) gmail.com>
+ *
+ */
+
+#include <QtGui>
+#include <esl.h>
+#include "eslconnection.h"
+
+#define event_construct_common() event = NULL; serialized_string = NULL; mine = 0; hp = NULL
+
+void eslSetLogLevel(int level)
+{
+ esl_global_set_default_logger(level);
+}
+
+ESLconnection::ESLconnection(const char *host, const char *port, const char *password, const char *name)
+ : handle(NULL),_host(new QString(host)), _port(new QString(port)),
+ _pass(new QString(password)), _name(new QString(name)){}
+ESLconnection::~ESLconnection()
+{
+ if (isConnected()) {
+ esl_disconnect(handle);
+ }
+
+}
+
+QString ESLconnection::getName()
+{
+ return *_name;
+}
+
+int ESLconnection::disconnect()
+{
+ if (handle)
+ {
+ if (handle->connected)
+ {
+ return esl_disconnect(handle);
+ }
+ }
+ return 0;
+}
+
+bool ESLconnection::setConsoleLogLevel(int level)
+{
+ ESLevent *event = sendRecv(QString("log %1").arg(level).toAscii());
+ if (event)
+ {
+ return true;
+ }
+ return false;
+}
+
+void ESLconnection::connect()
+{
+ start();
+}
+
+int ESLconnection::isConnected()
+{
+ if (handle)
+ return handle->connected;
+ return 0;
+}
+
+void ESLconnection::send(QString cmd)
+{
+ esl_send(handle, cmd.toAscii());
+}
+
+ESLevent *ESLconnection::sendRecv(const char *cmd)
+{
+ if (esl_send_recv(handle, cmd) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle->last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+}
+
+void ESLconnection::api(QString cmd)
+{
+ if (cmd.isEmpty()) {
+ return;
+ }
+
+ if (esl_send_recv(handle, QString("api %1").arg(cmd).toAscii()) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle->last_sr_event);
+ emit gotEvent(new ESLevent(event, 1));
+ }
+}
+
+void ESLconnection::bgapi(QString cmd)
+{
+ if (cmd.isEmpty()) {
+ return;
+ }
+
+ if (esl_send_recv(handle, QString("bgapi %1").arg(cmd).toAscii()) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle->last_sr_event);
+ emit gotEvent(new ESLevent(event, 1));
+ }
+}
+
+ESLevent *ESLconnection::getInfo()
+{
+ if (handle->connected && handle->info_event) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle->info_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+}
+
+int ESLconnection::setAsyncExecute(const char *val)
+{
+ if (val) {
+ handle->async_execute = esl_true(val);
+ }
+ return handle->async_execute;
+}
+
+int ESLconnection::setEventLock(const char *val)
+{
+ if (val) {
+ handle->event_lock = esl_true(val);
+ }
+ return handle->event_lock;
+}
+
+int ESLconnection::execute(const char *app, const char *arg, const char *uuid)
+{
+ return esl_execute(handle, app, arg, uuid);
+}
+
+
+int ESLconnection::executeAsync(const char *app, const char *arg, const char *uuid)
+{
+ int async = handle->async_execute;
+ int r;
+
+ handle->async_execute = 1;
+ r = esl_execute(handle, app, arg, uuid);
+ handle->async_execute = async;
+
+ return r;
+}
+
+int ESLconnection::sendEvent(ESLevent *send_me)
+{
+ return esl_sendevent(handle, send_me->event);
+}
+
+ESLevent *ESLconnection::recvEvent()
+{
+ if (last_event_obj) {
+ delete last_event_obj;
+ }
+
+ if (esl_recv_event(handle, 1, NULL) == ESL_SUCCESS) {
+ esl_event_t *e = handle->last_ievent ? handle->last_ievent : handle->last_event;
+ if (e) {
+ esl_event_t *event;
+ esl_event_dup(&event, e);
+ last_event_obj = new ESLevent(event, 1);
+ return last_event_obj;
+ }
+ }
+
+ last_event_obj = new ESLevent("server_disconnected");
+
+ return last_event_obj;
+}
+
+ESLevent *ESLconnection::recvEventTimed(int ms)
+{
+ if (last_event_obj) {
+ delete last_event_obj;
+ last_event_obj = NULL;
+ }
+
+ if (esl_recv_event_timed(handle, ms, 1, NULL) == ESL_SUCCESS) {
+ esl_event_t *e = handle->last_ievent ? handle->last_ievent : handle->last_event;
+ if (e) {
+ esl_event_t *event;
+ esl_event_dup(&event, e);
+ last_event_obj = new ESLevent(event, 1);
+ return last_event_obj;
+ }
+ }
+
+ return NULL;
+}
+
+ESLevent *ESLconnection::filter(const char *header, const char *value)
+{
+ esl_status_t status = esl_filter(handle, header, value);
+
+ if (status == ESL_SUCCESS && handle->last_sr_event) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle->last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+
+}
+
+int ESLconnection::events(const char *etype, const char *value)
+{
+ esl_event_type_t type_id = ESL_EVENT_TYPE_PLAIN;
+
+ if (!strcmp(etype, "xml")) {
+ type_id = ESL_EVENT_TYPE_XML;
+ }
+
+ return esl_events(handle, type_id, value);
+}
+
+void ESLconnection::run(void)
+{
+
+ handle = new esl_handle_t;
+ memset(handle, 0, sizeof(esl_handle_t));
+ last_event_obj = NULL;
+ if (esl_connect(handle, _host->toAscii(), _port->toInt(), _pass->toAscii()) == ESL_SUCCESS)
+ {
+ send("event plain ALL");
+ send("log 7");
+ emit connected();
+ }
+ while(isConnected())
+ {
+ ESLevent * event = recvEventTimed(10);
+ if (event)
+ {
+ ESLevent * e = new ESLevent(event);
+ emit gotEvent(e);
+ }
+ }
+ if (!QString(handle->err).isEmpty())
+ {
+ emit connectionFailed(handle->err);
+ }
+ else
+ {
+ emit disconnected();
+ }
+}
+
+// ESLevent
+///////////////////////////////////////////////////////////////////////
+
+ESLevent::ESLevent(const char *type, const char *subclass_name)
+{
+ esl_event_types_t event_id;
+
+ event_construct_common();
+
+ if (esl_name_event(type, &event_id) != ESL_SUCCESS) {
+ event_id = ESL_EVENT_MESSAGE;
+ }
+
+ if (!esl_strlen_zero(subclass_name) && event_id != ESL_EVENT_CUSTOM) {
+ esl_log(ESL_LOG_WARNING, "Changing event type to custom because you specified a subclass name!\n");
+ event_id = ESL_EVENT_CUSTOM;
+ }
+
+ if (esl_event_create_subclass(&event, event_id, subclass_name) != ESL_SUCCESS) {
+ esl_log(ESL_LOG_ERROR, "Failed to create event!\n");
+ event = NULL;
+ }
+
+ serialized_string = NULL;
+ mine = 1;
+}
+
+ESLevent::ESLevent(esl_event_t *wrap_me, int free_me)
+{
+ event_construct_common();
+ event = wrap_me;
+ mine = free_me;
+ serialized_string = NULL;
+}
+
+
+ESLevent::ESLevent(ESLevent *me)
+{
+ /* workaround for silly php thing */
+ event = me->event;
+ mine = me->mine;
+ serialized_string = NULL;
+ me->event = NULL;
+ me->mine = 0;
+ esl_safe_free(me->serialized_string);
+}
+
+ESLevent::~ESLevent()
+{
+
+ if (serialized_string) {
+ free(serialized_string);
+ }
+
+ if (event && mine) {
+ esl_event_destroy(&event);
+ }
+}
+
+const char *ESLevent::nextHeader(void)
+{
+ const char *name = NULL;
+
+ if (hp) {
+ name = hp->name;
+ hp = hp->next;
+ }
+
+ return name;
+}
+
+const char *ESLevent::firstHeader(void)
+{
+ if (event) {
+ hp = event->headers;
+ }
+
+ return nextHeader();
+}
+
+const char *ESLevent::serialize()
+{
+ this_check("");
+
+ esl_safe_free(serialized_string);
+
+ if (!event) {
+ return "";
+ }
+
+ if (esl_event_serialize(event, &serialized_string, ESL_TRUE) == ESL_SUCCESS) {
+ return serialized_string;
+ }
+
+ return "";
+
+}
+
+bool ESLevent::setPriority(esl_priority_t priority)
+{
+ this_check(false);
+
+ if (event) {
+ esl_event_set_priority(event, priority);
+ return true;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to setPriority an event that does not exist!\n");
+ }
+ return false;
+}
+
+const char *ESLevent::getHeader(const char *header_name)
+{
+ this_check("");
+
+ if (event) {
+ return esl_event_get_header(event, header_name);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getHeader an event that does not exist!\n");
+ }
+ return NULL;
+}
+
+bool ESLevent::addHeader(const char *header_name, const char *value)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_add_header_string(event, ESL_STACK_BOTTOM, header_name, value) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to addHeader an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+bool ESLevent::delHeader(const char *header_name)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_del_header(event, header_name) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to delHeader an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+
+bool ESLevent::addBody(const char *value)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_add_body(event, "%s", value) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to addBody an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+char *ESLevent::getBody(void)
+{
+
+ this_check((char *)"");
+
+ if (event) {
+ return esl_event_get_body(event);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getBody an event that does not exist!\n");
+ }
+
+ return NULL;
+}
+
+const char *ESLevent::getType(void)
+{
+ this_check("");
+
+ if (event) {
+ return esl_event_name(event->event_id);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getType an event that does not exist!\n");
+ }
+
+ return (char *) "invalid";
+}
+
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2007, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita <jmesquita (at) gmail.com>
+ *
+ */
+
+#ifndef ESLCONNECTION_H
+#define ESLCONNECTION_H
+#include <QThread>
+#include <QtGui>
+#include <esl.h>
+
+#define this_check(x) do { if (!this) { esl_log(ESL_LOG_ERROR, "object is not initalized\n"); return x;}} while(0)
+#define this_check_void() do { if (!this) { esl_log(ESL_LOG_ERROR, "object is not initalized\n"); return;}} while(0)
+
+
+class ESLevent {
+ private:
+ esl_event_header_t *hp;
+ public:
+ esl_event_t *event;
+ char *serialized_string;
+ int mine;
+
+ ESLevent(const char *type, const char *subclass_name = NULL);
+ ESLevent(esl_event_t *wrap_me, int free_me = 0);
+ ESLevent(ESLevent *me);
+ virtual ~ESLevent();
+ const char *serialize();
+ bool setPriority(esl_priority_t priority = ESL_PRIORITY_NORMAL);
+ const char *getHeader(const char *header_name);
+ char *getBody(void);
+ const char *getType(void);
+ bool addBody(const char *value);
+ bool addHeader(const char *header_name, const char *value);
+ bool delHeader(const char *header_name);
+ const char *firstHeader(void);
+ const char *nextHeader(void);
+};
+
+class ESLconnection : public QThread
+{
+ Q_OBJECT
+ private:
+ esl_handle_t *handle;
+ ESLevent *last_event_obj;
+ QString *_host;
+ QString *_port;
+ QString *_pass;
+ QString *_name;
+ public:
+ ESLconnection(const char *host, const char *port, const char *password, const char *name);
+ virtual ~ESLconnection();
+ int isConnected();
+ void connect();
+ ESLevent *getInfo();
+ ESLevent *sendRecv(const char *cmd);
+ int sendEvent(ESLevent *send_me);
+ ESLevent *recvEvent();
+ ESLevent *recvEventTimed(int ms);
+ ESLevent *filter(const char *header, const char *value);
+ int events(const char *etype, const char *value);
+ int execute(const char *app, const char *arg = NULL, const char *uuid = NULL);
+ int executeAsync(const char *app, const char *arg = NULL, const char *uuid = NULL);
+ int setAsyncExecute(const char *val);
+ int setEventLock(const char *val);
+ int disconnect(void);
+ bool setConsoleLogLevel(int);
+ void api(QString cmd);
+ void bgapi(QString cmd);
+ void send(QString cmd);
+ QString getName();
+signals:
+ void connected(void);
+ void disconnected(void);
+ void connectionFailed(QString);
+ void gotEvent(ESLevent*);
+protected:
+ void run();
+};
+
+void eslSetLogLevel(int level);
+
+#endif // ESLCONNECTION_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,46 @@
+#ifndef INTERFACES_H
+#define INTERFACES_H
+
+#include <QtPlugin>
+
+class ESLevent;
+class SettingsDialog;
+class ServerManager;
+
+/*!
+ \brief This interface is provided to extend FsGui with applications that
+ could do any kind of monitoring of any kinda of data inside FreeSWITCH
+ or its components
+ */
+class MonitorInterface
+{
+public:
+ virtual ~MonitorInterface() { }
+ /*!
+ \brief This returns the plugin itself so we can connect signals/slots
+ */
+ virtual QObject* getMonitorInterfaceObject() = 0;
+ /*!
+ \brief This should return the name of the application
+ */
+ virtual QString appName() = 0;
+ /*!
+ \brief This should return the application description.
+ */
+ virtual QString appDescription() = 0;
+ /*!
+ \brief Add a new configuration item to the settings dialog
+ */
+ virtual void addConfigItems(SettingsDialog *settings) = 0;
+ /*!
+ \brief Sets a pointer to ServerManager object
+ */
+ virtual void setServerManager(ServerManager *serverManager) = 0;
+ /*!
+ \brief Run a new instance of this application.
+ */
+ virtual void newInstance() = 0;
+};
+
+Q_DECLARE_INTERFACE(MonitorInterface, "com.fsgui.fsgui.MonitorInterface/1.0")
+#endif // INTERFACES_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+TEMPLATE = lib
+CONFIG += staticlib
+INCLUDEPATH = ../fsgui/ \
+ ../../../../../libs/esl/src/include/
+HEADERS = interfaces.h \
+ settingsdialog.h \
+ servermanager.h \
+ eslconnection.h
+SOURCES = settingsdialog.cpp \
+ servermanager.cpp \
+ eslconnection.cpp
+FORMS += settingsdialog.ui \
+ servermanager.ui
+LIBS+=-L../../../../../libs/esl/ \
+ -lesl
+RESOURCES += ../resources/resources.qrc
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,155 @@
+#include <QtGui>
+#include "eslconnection.h"
+#include "servermanager.h"
+#include "ui_servermanager.h"
+
+ServerManager::ServerManager(QWidget *parent) :
+ QDialog(parent),
+ m_ui(new Ui::ServerManager)
+{
+ m_ui->setupUi(this);
+
+ m_ui->serverConfigTabs->removeTab(1);
+
+ readSettings();
+ QObject::connect(m_ui->listServers, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
+ this, SLOT(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
+ QObject::connect(m_ui->btnAddServer, SIGNAL(clicked()),
+ this, SLOT(addServer()));
+ QObject::connect(m_ui->btnDelServer, SIGNAL(clicked()),
+ this, SLOT(deleteServer()));
+ QObject::connect(m_ui->btnEdit, SIGNAL(clicked()),
+ this, SLOT(editServer()));
+ QObject::connect(m_ui->btnSave, SIGNAL(clicked()),
+ this, SLOT(saveServer()));
+}
+
+ServerManager::~ServerManager()
+{
+ delete m_ui;
+}
+
+ESLconnection * ServerManager::getESLconnection()
+{
+ QTreeWidgetItem * item = m_ui->listServers->selectedItems().first();
+ return new ESLconnection(item->data(0, ServerManager::Host).toByteArray(),
+ item->data(0, ServerManager::Port).toByteArray(),
+ item->data(0, ServerManager::Password).toByteArray(),
+ item->data(0, ServerManager::Name).toByteArray());
+}
+
+void ServerManager::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ m_ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void ServerManager::currentItemChanged (QTreeWidgetItem * current, QTreeWidgetItem * /*previous*/)
+{
+ if (current)
+ {
+ m_ui->lineHost->setText(current->data(0,ServerManager::Host).toString());
+ m_ui->linePassword->setText(current->data(0,ServerManager::Password).toString());
+ m_ui->linePort->setText(current->data(0,ServerManager::Port).toString());
+ m_ui->btnConnect->setEnabled(true);
+ m_ui->btnEdit->setEnabled(true);
+ m_ui->lineHost->setEnabled(false);
+ m_ui->linePassword->setEnabled(false);
+ m_ui->linePort->setEnabled(false);
+ m_ui->btnSave->setEnabled(false);
+ }
+ else
+ {
+ m_ui->btnEdit->setEnabled(false);
+ m_ui->btnConnect->setEnabled(false);
+ }
+}
+
+void ServerManager::addServer()
+{
+ bool ok;
+ QString text = QInputDialog::getText(this, tr("New Server Name"),
+ tr("Server Name:"), QLineEdit::Normal,
+ "", &ok);
+ if (ok && !text.isEmpty())
+ {
+ QSettings settings;
+ settings.beginGroup("Servers");
+ settings.beginGroup(text);
+ settings.setValue("name", text);
+ settings.setValue("port", 8021);
+ settings.endGroup();
+ settings.endGroup();
+ readSettings();
+ m_ui->listServers->setCurrentItem(m_ui->listServers->findItems(text, Qt::MatchExactly, 0).first());
+ }
+}
+
+void ServerManager::editServer()
+{
+ m_ui->lineHost->setEnabled(true);
+ m_ui->linePassword->setEnabled(true);
+ m_ui->linePort->setEnabled(true);
+ m_ui->btnSave->setEnabled(true);
+ m_ui->btnEdit->setEnabled(false);
+ m_ui->lineHost->setFocus();
+}
+
+void ServerManager::saveServer()
+{
+ QTreeWidgetItem * item = m_ui->listServers->selectedItems().first();
+ item->setData(0, ServerManager::Host, m_ui->lineHost->text());
+ item->setData(0, ServerManager::Password, m_ui->linePassword->text());
+ item->setData(0, ServerManager::Port, m_ui->linePort->text());
+
+ QSettings settings;
+ settings.beginGroup("Servers");
+ settings.beginGroup(item->data(0, ServerManager::Name).toString());
+ settings.setValue("host", m_ui->lineHost->text());
+ settings.setValue("password", m_ui->linePassword->text());
+ settings.setValue("port", m_ui->linePort->text());
+ settings.endGroup();
+ settings.endGroup();
+
+ m_ui->lineHost->setEnabled(false);
+ m_ui->linePassword->setEnabled(false);
+ m_ui->linePort->setEnabled(false);
+ m_ui->btnSave->setEnabled(false);
+ m_ui->btnEdit->setEnabled(true);
+}
+
+void ServerManager::deleteServer()
+{
+ QTreeWidgetItem *item = m_ui->listServers->selectedItems().first();
+ QSettings settings;
+ settings.beginGroup("Servers");
+ settings.remove(item->data(0, ServerManager::Name).toString());
+ delete item;
+}
+
+void ServerManager::readSettings()
+{
+ m_ui->listServers->clear();
+ QSettings settings;
+ settings.beginGroup("Servers");
+ foreach (QString server, settings.childGroups())
+ {
+ settings.beginGroup(server);
+ QTreeWidgetItem *serverItem = new QTreeWidgetItem(m_ui->listServers->invisibleRootItem());
+ serverItem->setIcon(0, QIcon(":/icons/server_icon.png"));
+ serverItem->setText(0, settings.value("name").toString());
+ serverItem->setData(0, ServerManager::Name, settings.value("name"));
+ serverItem->setData(0, ServerManager::Host, settings.value("host"));
+ serverItem->setData(0, ServerManager::Port, settings.value("port"));
+ serverItem->setData(0, ServerManager::Password, settings.value("password"));
+ settings.endGroup();
+ }
+ settings.endGroup();
+}
+
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,44 @@
+#ifndef SERVERMANAGER_H
+#define SERVERMANAGER_H
+
+#include <QtGui/QDialog>
+
+namespace Ui {
+ class ServerManager;
+}
+
+class ESLconnection;
+
+class QTreeWidgetItem;
+
+class ServerManager : public QDialog {
+ Q_OBJECT
+public:
+ ServerManager(QWidget *parent = 0);
+ ~ServerManager();
+ ESLconnection * getESLconnection();
+
+protected:
+ void changeEvent(QEvent *e);
+
+private slots:
+ void currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous );
+ void addServer();
+ void editServer();
+ void saveServer();
+ void deleteServer();
+
+private:
+ Ui::ServerManager *m_ui;
+
+ enum {
+ Host = Qt::UserRole,
+ Port,
+ Password,
+ Name
+ };
+
+ void readSettings();
+};
+
+#endif // SERVERMANAGER_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ServerManager</class>
+ <widget class="QDialog" name="ServerManager">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>534</width>
+ <height>292</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Server Manager</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QTreeWidget" name="listServers">
+ <column>
+ <property name="text">
+ <string>Servers</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="btnAddServer">
+ <property name="text">
+ <string>&Add server</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>:/icons/new_server_icon.png</normaloff>:/icons/new_server_icon.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnDelServer">
+ <property name="text">
+ <string>&Remove Server</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>:/icons/remove_server_icon.png</normaloff>:/icons/remove_server_icon.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTabWidget" name="serverConfigTabs">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="QWidget" name="tabBasic">
+ <attribute name="title">
+ <string>Basic</string>
+ </attribute>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Host</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="lineHost">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Password</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="linePassword">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Port</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="linePort">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tabAdvanced">
+ <attribute name="title">
+ <string>Advanced</string>
+ </attribute>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QPushButton" name="btnSave">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Save</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>:/icons/save.png</normaloff>:/icons/save.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnEdit">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Edit</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>:/icons/edit_icon.png</normaloff>:/icons/edit_icon.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton_5">
+ <property name="maximumSize">
+ <size>
+ <width>85</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnConnect">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>85</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&Connect</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>:/icons/connect_icon.png</normaloff>:/icons/connect_icon.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="shortcut">
+ <string>Return</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ <zorder></zorder>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>pushButton_5</sender>
+ <signal>clicked()</signal>
+ <receiver>ServerManager</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>438</x>
+ <y>346</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>171</x>
+ <y>257</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>btnConnect</sender>
+ <signal>clicked()</signal>
+ <receiver>ServerManager</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>564</x>
+ <y>365</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>617</x>
+ <y>351</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,51 @@
+#include <QtGui>
+#include "settingsdialog.h"
+#include "ui_settingsdialog.h"
+
+SettingsDialog::SettingsDialog(QWidget *parent) :
+ QDialog(parent),
+ m_ui(new Ui::SettingsDialog)
+{
+ m_ui->setupUi(this);
+ settings = new QSettings;
+ QObject::connect(m_ui->listConfig, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
+}
+
+SettingsDialog::~SettingsDialog()
+{
+ delete m_ui;
+}
+
+void SettingsDialog::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ m_ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void SettingsDialog::addConfigItem(QString item, QWidget *page)
+{
+ QListWidgetItem *item_widget = new QListWidgetItem(item);
+ addConfigItem(item_widget, page);
+}
+
+void SettingsDialog::addConfigItem(QListWidgetItem *item, QWidget *page)
+{
+ m_ui->listConfig->addItem(item);
+ m_ui->configPages->insertWidget(m_ui->listConfig->row(item),page);
+}
+
+void SettingsDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
+{
+ if (!current)
+ current = previous;
+
+ m_ui->configPages->setCurrentIndex(m_ui->listConfig->row(current));
+}
+
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include <QtGui/QDialog>
+
+namespace Ui {
+ class SettingsDialog;
+}
+class QListWidgetItem;
+class QSettings;
+
+class SettingsDialog : public QDialog {
+ Q_OBJECT
+public:
+ SettingsDialog(QWidget *parent = 0);
+ ~SettingsDialog();
+ void addConfigItem(QListWidgetItem *item, QWidget *page);
+ void addConfigItem(QString item, QWidget *page);
+
+protected:
+ void changeEvent(QEvent *e);
+
+private slots:
+ void changePage(QListWidgetItem*, QListWidgetItem*);
+
+private:
+ Ui::SettingsDialog *m_ui;
+ QSettings *settings;
+};
+
+#endif // SETTINGSDIALOG_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SettingsDialog</class>
+ <widget class="QDialog" name="SettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>661</width>
+ <height>269</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>General Settings</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../resources/resources.qrc">
+ <normaloff>:/icons/fsgui_logo.png</normaloff>:/icons/fsgui_logo.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QListWidget" name="listConfig">
+ <property name="maximumSize">
+ <size>
+ <width>128</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>96</width>
+ <height>84</height>
+ </size>
+ </property>
+ <property name="movement">
+ <enum>QListView::Static</enum>
+ </property>
+ <property name="spacing">
+ <number>12</number>
+ </property>
+ <property name="viewMode">
+ <enum>QListView::IconMode</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QStackedWidget" name="configPages">
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="QWidget" name="page"/>
+ <widget class="QWidget" name="page_2"/>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnApply">
+ <property name="text">
+ <string>&Apply</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnOk">
+ <property name="text">
+ <string>&OK</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnCancel">
+ <property name="text">
+ <string>&Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../resources/resources.qrc"/>
+ <include location="../resources/resources.qrc"/>
+ <include location="../resources/resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>btnCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>SettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>279</x>
+ <y>226</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>330</x>
+ <y>213</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,132 @@
+/********************************************************************************
+** Form generated from reading ui file 'settings.ui'
+**
+** Created: Thu Aug 6 02:01:13 2009
+** by: Qt User Interface Compiler version 4.5.0
+**
+** WARNING! All changes made in this file will be lost when recompiling ui file!
+********************************************************************************/
+
+#ifndef UI_SETTINGS_H
+#define UI_SETTINGS_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QDialog>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QHeaderView>
+#include <QtGui/QListWidget>
+#include <QtGui/QPushButton>
+#include <QtGui/QSpacerItem>
+#include <QtGui/QStackedWidget>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_SettingsDialog
+{
+public:
+ QVBoxLayout *verticalLayout;
+ QHBoxLayout *horizontalLayout;
+ QListWidget *listConfig;
+ QStackedWidget *configPages;
+ QWidget *page;
+ QWidget *page_2;
+ QHBoxLayout *horizontalLayout_2;
+ QSpacerItem *horizontalSpacer;
+ QPushButton *btnApply;
+ QPushButton *btnOk;
+ QPushButton *btnCancel;
+
+ void setupUi(QDialog *SettingsDialog)
+ {
+ if (SettingsDialog->objectName().isEmpty())
+ SettingsDialog->setObjectName(QString::fromUtf8("SettingsDialog"));
+ SettingsDialog->resize(400, 300);
+ QIcon icon;
+ icon.addPixmap(QPixmap(QString::fromUtf8(":/icons/fsgui_logo.png")), QIcon::Normal, QIcon::Off);
+ SettingsDialog->setWindowIcon(icon);
+ verticalLayout = new QVBoxLayout(SettingsDialog);
+ verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ horizontalLayout = new QHBoxLayout();
+ horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ listConfig = new QListWidget(SettingsDialog);
+ listConfig->setObjectName(QString::fromUtf8("listConfig"));
+ listConfig->setMaximumSize(QSize(128, 16777215));
+ listConfig->setIconSize(QSize(96, 84));
+ listConfig->setMovement(QListView::Static);
+ listConfig->setSpacing(12);
+ listConfig->setViewMode(QListView::IconMode);
+
+ horizontalLayout->addWidget(listConfig);
+
+ configPages = new QStackedWidget(SettingsDialog);
+ configPages->setObjectName(QString::fromUtf8("configPages"));
+ page = new QWidget();
+ page->setObjectName(QString::fromUtf8("page"));
+ configPages->addWidget(page);
+ page_2 = new QWidget();
+ page_2->setObjectName(QString::fromUtf8("page_2"));
+ configPages->addWidget(page_2);
+
+ horizontalLayout->addWidget(configPages);
+
+
+ verticalLayout->addLayout(horizontalLayout);
+
+ horizontalLayout_2 = new QHBoxLayout();
+ horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_2->addItem(horizontalSpacer);
+
+ btnApply = new QPushButton(SettingsDialog);
+ btnApply->setObjectName(QString::fromUtf8("btnApply"));
+
+ horizontalLayout_2->addWidget(btnApply);
+
+ btnOk = new QPushButton(SettingsDialog);
+ btnOk->setObjectName(QString::fromUtf8("btnOk"));
+
+ horizontalLayout_2->addWidget(btnOk);
+
+ btnCancel = new QPushButton(SettingsDialog);
+ btnCancel->setObjectName(QString::fromUtf8("btnCancel"));
+
+ horizontalLayout_2->addWidget(btnCancel);
+
+
+ verticalLayout->addLayout(horizontalLayout_2);
+
+
+ retranslateUi(SettingsDialog);
+ QObject::connect(btnOk, SIGNAL(clicked()), SettingsDialog, SLOT(accept()));
+ QObject::connect(btnCancel, SIGNAL(clicked()), SettingsDialog, SLOT(reject()));
+
+ configPages->setCurrentIndex(1);
+
+
+ QMetaObject::connectSlotsByName(SettingsDialog);
+ } // setupUi
+
+ void retranslateUi(QDialog *SettingsDialog)
+ {
+ SettingsDialog->setWindowTitle(QApplication::translate("SettingsDialog", "FsGui", 0, QApplication::UnicodeUTF8));
+ btnApply->setText(QApplication::translate("SettingsDialog", "&Apply", 0, QApplication::UnicodeUTF8));
+ btnOk->setText(QApplication::translate("SettingsDialog", "&OK", 0, QApplication::UnicodeUTF8));
+ btnCancel->setText(QApplication::translate("SettingsDialog", "&Cancel", 0, QApplication::UnicodeUTF8));
+ Q_UNUSED(SettingsDialog);
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class SettingsDialog: public Ui_SettingsDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_SETTINGS_H
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins)
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>consoleWindow</class>
+ <widget class="QMainWindow" name="consoleWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>673</width>
+ <height>536</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Console for human beings</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../../resources/resources.qrc">
+ <normaloff>:/icons/fsgui_logo.png</normaloff>:/icons/fsgui_logo.png</iconset>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QTabWidget" name="tabConsole">
+ <property name="tabsClosable">
+ <bool>true</bool>
+ </property>
+ <property name="movable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Tab 1</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
+ <string>Tab 2</string>
+ </attribute>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>673</width>
+ <height>25</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menu_Server">
+ <property name="title">
+ <string>&Server</string>
+ </property>
+ <addaction name="action_Server_Manager"/>
+ <addaction name="separator"/>
+ <addaction name="action_Connect"/>
+ <addaction name="action_Disconnect"/>
+ </widget>
+ <widget class="QMenu" name="menu_File">
+ <property name="title">
+ <string>&File</string>
+ </property>
+ <addaction name="action_Close"/>
+ </widget>
+ <widget class="QMenu" name="menu_Edit">
+ <property name="title">
+ <string>&Edit</string>
+ </property>
+ <addaction name="action_Clear"/>
+ </widget>
+ <addaction name="menu_File"/>
+ <addaction name="menu_Edit"/>
+ <addaction name="menu_Server"/>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ <action name="action_Connect">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Connect</string>
+ </property>
+ </action>
+ <action name="action_Disconnect">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Disconnect</string>
+ </property>
+ </action>
+ <action name="action_Close">
+ <property name="text">
+ <string>&Close</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+W</string>
+ </property>
+ </action>
+ <action name="action_Server_Manager">
+ <property name="text">
+ <string>&Server Manager</string>
+ </property>
+ </action>
+ <action name="action_Clear">
+ <property name="text">
+ <string>&Clear</string>
+ </property>
+ </action>
+ </widget>
+ <resources>
+ <include location="../../resources/resources.qrc"/>
+ <include location="../../resources/resources.qrc"/>
+ <include location="../../resources/resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>action_Close</sender>
+ <signal>triggered(bool)</signal>
+ <receiver>consoleWindow</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>-1</x>
+ <y>-1</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>197</x>
+ <y>169</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,656 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>configPage</class>
+ <widget class="QWidget" name="configPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>438</width>
+ <height>387</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="minimumSize">
+ <size>
+ <width>372</width>
+ <height>318</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>372</width>
+ <height>318</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Colors</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="lineConsole">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Console message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundConsole">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundConsole">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="lineAlert">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Alert message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundAlert">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundAlert">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLineEdit" name="lineCritical">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Critical message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundCritical">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundCritical">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QLineEdit" name="lineError">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Error message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundError">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundError">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <widget class="QLineEdit" name="lineWarning">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Warning message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundWarning">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundWarning">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <widget class="QLineEdit" name="lineNotice">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Notice message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundNotice">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundNotice">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <item>
+ <widget class="QLineEdit" name="lineInfo">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Info message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundInfo">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundInfo">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <item>
+ <widget class="QLineEdit" name="lineDebug">
+ <property name="minimumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>146</width>
+ <height>26</height>
+ </size>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Debug message</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnBackgroundDebug">
+ <property name="minimumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>95</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnForegroundDebug">
+ <property name="minimumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>91</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,424 @@
+#include <QtGui>
+#include <QtPlugin>
+#include "consoleplugin.h"
+#include "eslconnection.h"
+#include "settingsdialog.h"
+#include "servermanager.h"
+#include "consoletabwidget.h"
+#include "ui_console_settings.h"
+
+
+ConsolePlugin::ConsolePlugin(QWidget *parent)
+ : QMainWindow(parent),
+ consoleWindow(new Ui::consoleWindow),
+ serverManager(NULL)
+{
+ consoleWindow->setupUi(this);
+ consoleWindow->tabConsole->clear();
+
+ QObject::connect(consoleWindow->tabConsole, SIGNAL(tabCloseRequested(int)),
+ this, SLOT(tabClose(int)));
+ QObject::connect(consoleWindow->tabConsole, SIGNAL(currentChanged(int)),
+ this, SLOT(tabChanged(int)));
+
+ QObject::connect(consoleWindow->action_Connect, SIGNAL(triggered()),
+ this, SLOT(connect()));
+ QObject::connect(consoleWindow->action_Disconnect, SIGNAL(triggered()),
+ this, SLOT(disconnect()));
+ QObject::connect(consoleWindow->action_Clear, SIGNAL(triggered()),
+ this, SLOT(clearLogContents()));
+}
+
+ConsolePlugin::~ConsolePlugin(){}
+
+QObject * ConsolePlugin::getMonitorInterfaceObject()
+{
+ return this;
+}
+
+QString ConsolePlugin::appName()
+{
+ return "Console";
+}
+
+QString ConsolePlugin::appDescription()
+{
+ return tr("This application will do the same as fs_cli does.");
+}
+
+void ConsolePlugin::addConfigItems(SettingsDialog *settings)
+{
+ consoleConfigPage = new Ui::configPage();
+ QWidget *base = new QWidget(this);
+
+ consoleConfigPage->setupUi(base);
+ settings->addConfigItem("Console", base);
+
+ QObject::connect(consoleConfigPage->btnBackgroundConsole, SIGNAL(clicked()),
+ this, SLOT(changeConsoleBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundAlert, SIGNAL(clicked()),
+ this, SLOT(changeAlertBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundCritical, SIGNAL(clicked()),
+ this, SLOT(changeCriticalBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundError, SIGNAL(clicked()),
+ this, SLOT(changeErrorBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundWarning, SIGNAL(clicked()),
+ this, SLOT(changeWarningBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundNotice, SIGNAL(clicked()),
+ this, SLOT(changeNoticeBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundInfo, SIGNAL(clicked()),
+ this, SLOT(changeInfoBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnBackgroundDebug, SIGNAL(clicked()),
+ this, SLOT(changeDebugBackgroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundConsole, SIGNAL(clicked()),
+ this, SLOT(changeConsoleForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundAlert, SIGNAL(clicked()),
+ this, SLOT(changeAlertForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundCritical, SIGNAL(clicked()),
+ this, SLOT(changeCriticalForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundError, SIGNAL(clicked()),
+ this, SLOT(changeErrorForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundWarning, SIGNAL(clicked()),
+ this, SLOT(changeWarningForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundNotice, SIGNAL(clicked()),
+ this, SLOT(changeNoticeForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundInfo, SIGNAL(clicked()),
+ this, SLOT(changeInfoForegroundColor()));
+ QObject::connect(consoleConfigPage->btnForegroundDebug, SIGNAL(clicked()),
+ this, SLOT(changeDebugForegroundColor()));
+ readSettings();
+ QObject::connect(settings, SIGNAL(accepted()),
+ this, SLOT(writeSettings()));
+}
+
+void ConsolePlugin::newInstance()
+{
+ this->show();
+ newConnection();
+}
+
+void ConsolePlugin::setServerManager(ServerManager *manager)
+{
+ serverManager = manager;
+ QObject::connect(consoleWindow->action_Server_Manager, SIGNAL(triggered()),
+ this, SLOT(newConnection()));
+}
+
+void ConsolePlugin::newConnection()
+{
+ if (serverManager->exec())
+ {
+ ESLconnection *esl = serverManager->getESLconnection();
+
+ if (hashESL.contains(esl->getName()))
+ {
+ for (int i = 0; i < consoleWindow->tabConsole->count(); i++)
+ {
+ if (consoleWindow->tabConsole->tabText(i) == esl->getName())
+ {
+ consoleWindow->tabConsole->setCurrentIndex(i);
+ delete esl;
+ return;
+ }
+ }
+ }
+
+ ConsoleTabWidget *newTab = new ConsoleTabWidget(this, esl);
+ consoleWindow->tabConsole->addTab(newTab, esl->getName());
+ consoleWindow->tabConsole->setCurrentWidget(newTab);
+ hashESL.insert(esl->getName(), esl);
+ QObject::connect(esl, SIGNAL(connected()),
+ this, SLOT(connectionStateChanged()));
+ QObject::connect(esl, SIGNAL(disconnected()),
+ this, SLOT(connectionStateChanged()));
+ QObject::connect(esl, SIGNAL(connectionFailed(QString)),
+ this, SLOT(connectionStateChanged()));
+ }
+}
+
+void ConsolePlugin::clearLogContents()
+{
+ ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget*>(consoleWindow->tabConsole->currentWidget());
+ if (tab)
+ tab->clearConsoleContents();
+}
+
+void ConsolePlugin::connectionStateChanged()
+{
+ tabChanged(consoleWindow->tabConsole->currentIndex());
+}
+
+void ConsolePlugin::setPalette(QLineEdit *control, QString key)
+{
+ QSettings settings;
+ if (settings.contains(key)) {
+ control->setPalette(settings.value(key).value<QPalette>());
+ }
+}
+
+void ConsolePlugin::readSettings()
+{
+ QSettings settings;
+ settings.beginGroup("Console");
+
+ setPalette(consoleConfigPage->lineConsole, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_EMERG));
+ setPalette(consoleConfigPage->lineAlert, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_ALERT));
+ setPalette(consoleConfigPage->lineCritical, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_CRIT));
+ setPalette(consoleConfigPage->lineError, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_ERROR));
+ setPalette(consoleConfigPage->lineWarning, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_WARNING));
+ setPalette(consoleConfigPage->lineNotice, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_NOTICE));
+ setPalette(consoleConfigPage->lineInfo, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_INFO));
+ setPalette(consoleConfigPage->lineDebug, QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_DEBUG));
+
+ settings.endGroup();
+}
+
+void ConsolePlugin::writeSettings()
+{
+ QSettings settings;
+ settings.beginGroup("Console");
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_EMERG), consoleConfigPage->lineConsole->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_ALERT), consoleConfigPage->lineAlert->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_CRIT), consoleConfigPage->lineCritical->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_ERROR), consoleConfigPage->lineError->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_WARNING), consoleConfigPage->lineWarning->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_NOTICE), consoleConfigPage->lineNotice->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_INFO), consoleConfigPage->lineInfo->palette());
+ settings.setValue(QString("log-level-%1-palette").arg(ESL_LOG_LEVEL_DEBUG), consoleConfigPage->lineDebug->palette());
+ settings.endGroup();
+}
+
+void ConsolePlugin::changeConsoleBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineConsole->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineConsole->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineConsole->setPalette(palette);
+ consoleConfigPage->lineConsole->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeAlertBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineAlert->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineAlert->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineAlert->setPalette(palette);
+ consoleConfigPage->lineAlert->setAutoFillBackground(true);
+ }
+}
+
+
+void ConsolePlugin::changeCriticalBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineCritical->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineCritical->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineCritical->setPalette(palette);
+ consoleConfigPage->lineCritical->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeErrorBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineError->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineError->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineError->setPalette(palette);
+ consoleConfigPage->lineError->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeWarningBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineWarning->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineWarning->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineWarning->setPalette(palette);
+ consoleConfigPage->lineWarning->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeNoticeBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineNotice->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineNotice->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineNotice->setPalette(palette);
+ consoleConfigPage->lineNotice->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeInfoBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineInfo->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineInfo->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineInfo->setPalette(palette);
+ consoleConfigPage->lineInfo->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeDebugBackgroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineDebug->palette().color(QPalette::Base), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineDebug->palette();
+ palette.setColor(QPalette::Base, color);
+ consoleConfigPage->lineDebug->setPalette(palette);
+ consoleConfigPage->lineDebug->setAutoFillBackground(true);
+ }
+}
+
+void ConsolePlugin::changeConsoleForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineConsole->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineConsole->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineConsole->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeAlertForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineAlert->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineAlert->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineAlert->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeCriticalForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineCritical->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineCritical->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineCritical->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeErrorForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineError->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineError->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineError->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeWarningForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineWarning->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineWarning->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineWarning->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeNoticeForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineNotice->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineNotice->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineNotice->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeInfoForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineInfo->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineInfo->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineInfo->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::changeDebugForegroundColor()
+{
+ QColor color = QColorDialog::getColor(consoleConfigPage->lineDebug->palette().color(QPalette::Text), this);
+ if (color.isValid())
+ {
+ QPalette palette = consoleConfigPage->lineDebug->palette();
+ palette.setColor(QPalette::Text, color);
+ consoleConfigPage->lineDebug->setPalette(palette);
+ }
+}
+
+void ConsolePlugin::tabClose(int index)
+{
+ QWidget *tab = consoleWindow->tabConsole->widget(index);
+ ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(index), NULL);
+ if (esl)
+ {
+ hashESL.remove(consoleWindow->tabConsole->tabText(index));
+ esl->disconnect();
+ esl->wait();
+ delete esl;
+ }
+ consoleWindow->tabConsole->removeTab(index);
+ delete tab;
+ if (consoleWindow->tabConsole->count() == 0)
+ {
+ consoleWindow->action_Connect->setEnabled(false);
+ consoleWindow->action_Disconnect->setEnabled(false);
+ }
+}
+
+void ConsolePlugin::tabChanged(int index)
+{
+ ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(index), NULL);
+ if (esl)
+ {
+ consoleWindow->action_Connect->setDisabled(esl->isConnected());
+ consoleWindow->action_Disconnect->setEnabled(esl->isConnected());
+ }
+}
+
+void ConsolePlugin::connect()
+{
+ ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(consoleWindow->tabConsole->currentIndex()), NULL);
+ if (esl)
+ {
+ esl->connect();
+ }
+}
+
+void ConsolePlugin::disconnect()
+{
+ ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(consoleWindow->tabConsole->currentIndex()), NULL);
+ if (esl)
+ {
+ esl->disconnect();
+ }
+}
+
+Q_EXPORT_PLUGIN2(consoleplugin, ConsolePlugin)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,66 @@
+#ifndef CONSOLEPLUGIN_H
+#define CONSOLEPLUGIN_H
+
+#include <QtGui/QMainWindow>
+#include <QtPlugin>
+#include <QtCore/QHash>
+#include "interfaces.h"
+#include "ui_centralWidget.h"
+
+namespace Ui
+{
+ class configPage;
+}
+class ESLconnection;
+
+class ConsolePlugin : public QMainWindow, public MonitorInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(MonitorInterface)
+public:
+ ConsolePlugin(QWidget *parent = 0);
+ ~ConsolePlugin();
+ QObject *getMonitorInterfaceObject();
+ QString appName();
+ QString appDescription();
+ void addConfigItems(SettingsDialog *);
+ void newInstance();
+ void setServerManager(ServerManager *manager);
+
+private slots:
+ void connectionStateChanged();
+ void connect();
+ void disconnect();
+ void newConnection();
+ void clearLogContents();
+ void changeConsoleBackgroundColor();
+ void changeAlertBackgroundColor();
+ void changeCriticalBackgroundColor();
+ void changeErrorBackgroundColor();
+ void changeWarningBackgroundColor();
+ void changeNoticeBackgroundColor();
+ void changeInfoBackgroundColor();
+ void changeDebugBackgroundColor();
+ void changeConsoleForegroundColor();
+ void changeAlertForegroundColor();
+ void changeCriticalForegroundColor();
+ void changeErrorForegroundColor();
+ void changeWarningForegroundColor();
+ void changeNoticeForegroundColor();
+ void changeInfoForegroundColor();
+ void changeDebugForegroundColor();
+ void tabClose(int index);
+ void tabChanged(int index);
+ void readSettings();
+ void writeSettings();
+
+private:
+ Ui::consoleWindow *consoleWindow;
+ Ui::configPage *consoleConfigPage;
+ ServerManager *serverManager;
+ QHash<QString, ESLconnection *> hashESL;
+
+ void setPalette(QLineEdit *control, QString key);
+};
+
+#endif // CONSOLEPLUGIN_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+TEMPLATE = lib
+TARGET = ../../../bin/plugins/consoleplugin
+CONFIG += plugin
+INCLUDEPATH = ../../fsgui/ \
+ ../../interfaces \
+ ../../../../../../libs/esl/src/include/
+HEADERS = consoleplugin.h \
+ sortfilterproxymodel.h \
+ consoletabwidget.h
+SOURCES = consoleplugin.cpp \
+ sortfilterproxymodel.cpp \
+ consoletabwidget.cpp
+FORMS += centralWidget.ui \
+ console_settings.ui \
+ consoletabwidget.ui
+LIBS += -L../../interfaces \
+ -linterfaces \
+ -L../../../../../../libs/esl/ \
+ -lesl
+RESOURCES += ../../resources/resources.qrc
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,187 @@
+#include "consoletabwidget.h"
+#include "ui_consoletabwidget.h"
+#include "eslconnection.h"
+
+ConsoleTabWidget::ConsoleTabWidget(QWidget *parent, ESLconnection *eslconnection) :
+ QWidget(parent),
+ m_ui(new Ui::ConsoleTabWidget),
+ esl(eslconnection)
+{
+ m_ui->setupUi(this);
+ sourceModel = new QStandardItemModel(this);
+ model = new SortFilterProxyModel(this);
+ model->setSourceModel(sourceModel);
+ model->setFilterKeyColumn(0);
+ m_ui->consoleListView->setModel(model);
+
+ QObject::connect(m_ui->btnSend, SIGNAL(clicked()),
+ this, SLOT(cmdSendClicked()));
+ QObject::connect(m_ui->lineCmd, SIGNAL(textChanged(QString)),
+ this, SLOT(lineCmdChanged(QString)));
+ QObject::connect(m_ui->checkEmerg, SIGNAL(clicked(bool)),
+ this, SLOT(checkEmerg(bool)));
+ QObject::connect(m_ui->checkAlert, SIGNAL(clicked(bool)),
+ this, SLOT(checkAlert(bool)));
+ QObject::connect(m_ui->checkCrit, SIGNAL(clicked(bool)),
+ this, SLOT(checkCrit(bool)));
+ QObject::connect(m_ui->checkError, SIGNAL(clicked(bool)),
+ this, SLOT(checkError(bool)));
+ QObject::connect(m_ui->checkNotice, SIGNAL(clicked(bool)),
+ this, SLOT(checkNotice(bool)));
+ QObject::connect(m_ui->checkInfo, SIGNAL(clicked(bool)),
+ this, SLOT(checkInfo(bool)));
+ QObject::connect(m_ui->checkDebug, SIGNAL(clicked(bool)),
+ this, SLOT(checkDebug(bool)));
+
+ QObject::connect(esl, SIGNAL(connected()),
+ this, SLOT(connected()));
+ QObject::connect(esl, SIGNAL(connectionFailed(QString)),
+ this, SLOT(connectionFailed(QString)));
+ QObject::connect(esl, SIGNAL(disconnected()),
+ this, SLOT(disconnected()));
+ QObject::connect(esl, SIGNAL(gotEvent(ESLevent*)),
+ this, SLOT(gotEvent(ESLevent*)));
+
+ esl->connect();
+}
+
+ConsoleTabWidget::~ConsoleTabWidget()
+{
+ delete m_ui;
+}
+
+void ConsoleTabWidget::clearConsoleContents()
+{
+ sourceModel->clear();
+}
+
+void ConsoleTabWidget::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ m_ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void ConsoleTabWidget::connected()
+{
+ m_ui->btnSend->setEnabled(true);
+ m_ui->lineCmd->setEnabled(true);
+ QStandardItem *item = new QStandardItem(tr("Connected!"));
+ item->setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+ addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::disconnected()
+{
+ m_ui->btnSend->setEnabled(false);
+ m_ui->lineCmd->setEnabled(false);
+ QStandardItem *item = new QStandardItem(tr("Disconnected!"));
+ item->setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+ addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::connectionFailed(QString reason)
+{
+ m_ui->btnSend->setEnabled(false);
+ m_ui->lineCmd->setEnabled(false);
+ QStandardItem *item = new QStandardItem(tr("Connection Failed! Reason: %1").arg(reason));
+ item->setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+ addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::gotEvent(ESLevent * event)
+{
+ if (event->getBody())
+ {
+ QString text(event->getBody());
+
+ /* Remove \r\n */
+ QStringList textList = text.split(QRegExp("(\r+)"), QString::SkipEmptyParts);
+ QString final_str;
+ for (int line = 0; line<textList.size(); line++)
+ {
+ final_str += textList[line];
+ if (line == textList.size()-1)
+ {
+ final_str.chop(1);
+ }
+ }
+ QStringList lines = final_str.split('\n', QString::SkipEmptyParts);
+ for (int line = 0; line < lines.size(); ++line)
+ {
+ QStandardItem *item = new QStandardItem(lines[line]);
+ item->setData(QString(event->getHeader("Log-Level")).toInt(), Qt::UserRole);
+ addNewConsoleItem(item);
+ }
+ }
+ delete event;
+}
+
+void ConsoleTabWidget::addNewConsoleItem(QStandardItem *item)
+{
+ QSettings settings;
+ settings.beginGroup("Console");
+ QPalette palette = settings.value(QString("log-level-%1-palette").arg(item->data(Qt::UserRole).toInt())).value<QPalette>();
+ item->setBackground(palette.base());
+ item->setForeground(palette.text());
+ if (m_ui->consoleListView->verticalScrollBar()->value() == m_ui->consoleListView->verticalScrollBar()->maximum())
+ {
+ sourceModel->appendRow(item);
+ m_ui->consoleListView->scrollToBottom();
+ }
+ else
+ {
+ sourceModel->appendRow(item);
+ }
+}
+
+void ConsoleTabWidget::cmdSendClicked()
+{
+ esl->bgapi(m_ui->lineCmd->text());
+ m_ui->lineCmd->clear();
+}
+
+void ConsoleTabWidget::lineCmdChanged(QString text)
+{
+ m_ui->btnSend->setDisabled(text.isEmpty());
+}
+
+void ConsoleTabWidget::checkEmerg(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_EMERG, state);
+}
+
+void ConsoleTabWidget::checkAlert(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_ALERT, state);
+}
+
+void ConsoleTabWidget::checkCrit(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_CRIT, state);
+}
+
+void ConsoleTabWidget::checkError(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_ERROR, state);
+}
+
+void ConsoleTabWidget::checkNotice(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_NOTICE, state);
+}
+
+void ConsoleTabWidget::checkInfo(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_INFO, state);
+}
+
+void ConsoleTabWidget::checkDebug(bool state)
+{
+ model->setLogLevelFilter(ESL_LOG_LEVEL_DEBUG, state);
+}
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,51 @@
+#ifndef CONSOLETABWIDGET_H
+#define CONSOLETABWIDGET_H
+
+#include <QtGui/QWidget>
+#include "sortfilterproxymodel.h"
+
+namespace Ui {
+ class ConsoleTabWidget;
+}
+
+class QStandardItem;
+class QStandardItemModel;
+class ESLconnection;
+class ESLevent;
+
+class ConsoleTabWidget : public QWidget {
+ Q_OBJECT
+public:
+ ConsoleTabWidget(QWidget *parent, ESLconnection *eslconnection);
+ ~ConsoleTabWidget();
+
+public slots:
+ void clearConsoleContents();
+
+protected:
+ void changeEvent(QEvent *e);
+
+private slots:
+ void connected();
+ void disconnected();
+ void connectionFailed(QString);
+ void gotEvent(ESLevent *);
+ void addNewConsoleItem(QStandardItem *item);
+ void cmdSendClicked();
+ void lineCmdChanged(QString);
+ void checkEmerg(bool);
+ void checkAlert(bool);
+ void checkCrit(bool);
+ void checkError(bool);
+ void checkNotice(bool);
+ void checkInfo(bool);
+ void checkDebug(bool);
+
+private:
+ Ui::ConsoleTabWidget *m_ui;
+ QStandardItemModel *sourceModel;
+ SortFilterProxyModel *model;
+ ESLconnection *esl;
+};
+
+#endif // CONSOLETABWIDGET_H
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ConsoleTabWidget</class>
+ <widget class="QWidget" name="ConsoleTabWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>391</width>
+ <height>344</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QListView" name="consoleListView"/>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="maximumSize">
+ <size>
+ <width>120</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Log Level</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QCheckBox" name="checkEmerg">
+ <property name="text">
+ <string>Console</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkAlert">
+ <property name="text">
+ <string>Alert</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkCrit">
+ <property name="text">
+ <string>Critical</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkError">
+ <property name="text">
+ <string>Error</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkWarn">
+ <property name="text">
+ <string>Warning</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkNotice">
+ <property name="text">
+ <string>Notice</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkInfo">
+ <property name="text">
+ <string>Info</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkDebug">
+ <property name="text">
+ <string>Debug</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="lineCmd">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>26</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnSend">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>85</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Send</string>
+ </property>
+ <property name="shortcut">
+ <string>Return</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+#include <QtGui>
+#include "sortfilterproxymodel.h"
+
+SortFilterProxyModel::SortFilterProxyModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+{
+ // Get from config?
+ for(int i = 0; i < 8; i++)
+ loglevels.insert(i, true);
+}
+
+void SortFilterProxyModel::setLogLevelFilter(int level, bool state)
+{
+ loglevels.replace(level, state);
+ // Let us filter
+ invalidateFilter();
+}
+
+bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+{
+ QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);
+
+ return loglevels.value(sourceModel()->data(index0, Qt::UserRole).toInt()) == true;
+}
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+#ifndef SORTFILTERPROXYMODEL_H
+#define SORTFILTERPROXYMODEL_H
+
+#include <QSortFilterProxyModel>
+#include <QVector>
+
+class SortFilterProxyModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+
+public:
+ SortFilterProxyModel(QObject *parent = 0);
+ void setLogLevelFilter(int level, bool state);
+
+protected:
+ bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+
+private:
+ QVector<bool> loglevels;
+};
+
+#endif // SORTFILTERPROXYMODEL_H
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/connect_icon.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/connect_icon.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/connect_icon.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/edit_icon.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/edit_icon.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/edit_icon.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/new_server_icon.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/new_server_icon.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/new_server_icon.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/resources.qrc
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/resources.qrc (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/resources.qrc) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/resources.qrc (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/resources.qrc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,11 @@
+<RCC>
+ <qresource prefix="/icons" >
+ <file>fsgui_logo.png</file>
+ <file>new_server_icon.png</file>
+ <file>remove_server_icon.png</file>
+ <file>connect_icon.png</file>
+ <file>save.png</file>
+ <file>server_icon.png</file>
+ <file>edit_icon.png</file>
+ </qresource>
+</RCC>
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/save.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/save.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/save.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/server_icon.png
Copied: freeswitch/branches/seven/contrib/jmesquita/fsgui/src/resources/server_icon.png (from rev 14471, freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/server_icon.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/jmesquita/phrase_pt_br.xml
Copied: freeswitch/branches/seven/contrib/jmesquita/phrase_pt_br.xml (from rev 14471, freeswitch/trunk/contrib/jmesquita/phrase_pt_br.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/jmesquita/phrase_pt_br.xml (rev 0)
+++ freeswitch/branches/seven/contrib/jmesquita/phrase_pt_br.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,297 @@
+<language>
+ <en>
+ <ascii>
+ <prompt phrase="Espaço" filename="32.wav"/>
+ <prompt phrase="Cerquilha" filename="35.wav"/>
+ <prompt phrase="Asterisco" filename="42.wav"/>
+ <prompt phrase="Ponto" filename="46.wav"/>
+ <prompt phrase="A" filename="97.wav"/>
+ <prompt phrase="B" filename="98.wav"/>
+ <prompt phrase="C" filename="99.wav"/>
+ <prompt phrase="D" filename="100.wav"/>
+ <prompt phrase="E" filename="101.wav"/>
+ <prompt phrase="F" filename="102.wav"/>
+ <prompt phrase="G" filename="103.wav"/>
+ <prompt phrase="H" filename="104.wav"/>
+ <prompt phrase="I" filename="105.wav"/>
+ <prompt phrase="J" filename="106.wav"/>
+ <prompt phrase="K" filename="107.wav"/>
+ <prompt phrase="L" filename="108.wav"/>
+ <prompt phrase="M" filename="109.wav"/>
+ <prompt phrase="N" filename="110.wav"/>
+ <prompt phrase="O" filename="111.wav"/>
+ <prompt phrase="P" filename="112.wav"/>
+ <prompt phrase="Q" filename="113.wav"/>
+ <prompt phrase="R" filename="114.wav"/>
+ <prompt phrase="S" filename="115.wav"/>
+ <prompt phrase="T" filename="116.wav"/>
+ <prompt phrase="U" filename="117.wav"/>
+ <prompt phrase="V" filename="118.wav"/>
+ <prompt phrase="W" filename="119.wav"/>
+ <prompt phrase="X" filename="120.wav"/>
+ <prompt phrase="Y" filename="121.wav"/>
+ <prompt phrase="Z" filename="122.wav"/>
+ </ascii>
+ <phonetic-ascii>
+ <prompt phrase="Espaço" filename="32.wav"/>
+ <prompt phrase="Ponto" filename="46.wav"/>
+ <prompt phrase="Alpha" filename="97.wav"/>
+ <prompt phrase="Bravo" filename="98.wav"/>
+ <prompt phrase="Charlie" filename="99.wav"/>
+ <prompt phrase="Delta" filename="100.wav"/>
+ <prompt phrase="Echo" filename="101.wav"/>
+ <prompt phrase="Foxtrot" filename="102.wav"/>
+ <prompt phrase="Golf" filename="103.wav"/>
+ <prompt phrase="Hotel" filename="104.wav"/>
+ <prompt phrase="India" filename="105.wav"/>
+ <prompt phrase="Juliet" filename="106.wav"/>
+ <prompt phrase="Kilo" filename="107.wav"/>
+ <prompt phrase="Lima" filename="108.wav"/>
+ <prompt phrase="Mike" filename="109.wav"/>
+ <prompt phrase="November" filename="110.wav"/>
+ <prompt phrase="Oscar" filename="111.wav"/>
+ <prompt phrase="Papa" filename="112.wav"/>
+ <prompt phrase="Quebec" filename="113.wav"/>
+ <prompt phrase="Romeo" filename="114.wav"/>
+ <prompt phrase="Sierra" filename="115.wav"/>
+ <prompt phrase="Tango" filename="116.wav"/>
+ <prompt phrase="Unifor" filename="117.wav"/>
+ <prompt phrase="Victor" filename="118.wav"/>
+ <prompt phrase="Whiskey" filename="119.wav"/>
+ <prompt phrase="Xray" filename="120.wav"/>
+ <prompt phrase="Yankee" filename="121.wav"/>
+ <prompt phrase="Zulu" filename="122.wav"/>
+ </phonetic-ascii>
+ <digits>
+ <prompt phrase="Zero" filename="0.wav"/>
+ <prompt phrase="Um" filename="1.wav"/>
+ <prompt phrase="Dois" filename="2.wav"/>
+ <prompt phrase="Três" filename="3.wav"/>
+ <prompt phrase="Quatro" filename="4.wav"/>
+ <prompt phrase="Cinco" filename="5.wav"/>
+ <prompt phrase="Seis" filename="6.wav"/>
+ <prompt phrase="Sete" filename="7.wav"/>
+ <prompt phrase="Oito" filename="8.wav"/>
+ <prompt phrase="Nove" filename="9.wav"/>
+ <prompt phrase="Dez" filename="10.wav"/>
+ <prompt phrase="Onze" filename="11.wav"/>
+ <prompt phrase="Doze" filename="12.wav"/>
+ <prompt phrase="Treze" filename="13.wav"/>
+ <prompt phrase="Quatorze" filename="14.wav"/>
+ <prompt phrase="Quinze" filename="15.wav"/>
+ <prompt phrase="Dezesseis" filename="16.wav"/>
+ <prompt phrase="Dezessete" filename="17.wav"/>
+ <prompt phrase="Dezoito" filename="18.wav"/>
+ <prompt phrase="Dezenove" filename="19.wav"/>
+ <prompt phrase="Vinte" filename="20.wav"/>
+ <prompt phrase="Trinta" filename="30.wav"/>
+ <prompt phrase="Quarenta" filename="40.wav"/>
+ <prompt phrase="Cinquenta" filename="50.wav"/>
+ <prompt phrase="Sessenta" filename="60.wav"/>
+ <prompt phrase="Setenta" filename="70.wav"/>
+ <prompt phrase="Oitenta" filename="80.wav"/>
+ <prompt phrase="Noventa" filename="90.wav"/>
+ <prompt phrase="Ponto" filename="dot.wav"/>
+ <prompt phrase="Primeiro" filename="h-1.wav"/>
+ <prompt phrase="Segundo" filename="h-2.wav"/>
+ <prompt phrase="Terceiro" filename="h-3.wav"/>
+ <prompt phrase="Quarto" filename="h-4.wav"/>
+ <prompt phrase="Quinto" filename="h-5.wav"/>
+ <prompt phrase="Sexto" filename="h-6.wav"/>
+ <prompt phrase="Sétimo" filename="h-7.wav"/>
+ <prompt phrase="Oitavo" filename="h-8.wav"/>
+ <prompt phrase="Nono" filename="h-9.wav"/>
+ <prompt phrase="Décimo" filename="h-10.wav"/>
+ <prompt phrase="Décimo primeiro" filename="h-11.wav"/>
+ <prompt phrase="Décimo segundo" filename="h-12.wav"/>
+ <prompt phrase="Décimo terceiro" filename="h-13.wav"/>
+ <prompt phrase="Décimo quarto" filename="h-14.wav"/>
+ <prompt phrase="Décimo quinto" filename="h-15.wav"/>
+ <prompt phrase="Décimo sexto" filename="h-16.wav"/>
+ <prompt phrase="Décimo sétimo" filename="h-17.wav"/>
+ <prompt phrase="Décimo oitavo" filename="h-18.wav"/>
+ <prompt phrase="Décimo nono" filename="h-19.wav"/>
+ <prompt phrase="Vigésimo" filename="h-20.wav"/>
+ <prompt phrase="Trigésimo" filename="h-30.wav"/>
+ <prompt phrase="Centésimo" filename="hundred.wav"/>
+ <prompt phrase="Milionésimo" filename="million.wav"/>
+ <prompt phrase="Ponto" filename="period.wav"/>
+ <prompt phrase="Ponto" filename="point.wav"/>
+ <prompt phrase="Cerquilha" filename="pound.wav"/>
+ <prompt phrase="Asterisco" filename="star.wav"/>
+ <prompt phrase="Mil" filename="thousand.wav"/>
+ </digits>
+ <currency>
+ <prompt phrase="E" filename="and.wav"/>
+ <prompt phrase="Centavos" filename="cent.wav"/>
+ <prompt phrase="Central" filename="central.wav"/>
+ <prompt phrase="Centavos por minuto" filename="cents-per-minute.wav"/>
+ <prompt phrase="Centavos" filename="cents.wav"/>
+ <prompt phrase="Dollar" filename="dollar.wav"/>
+ <prompt phrase="Dollares" filename="dollars.wav"/>
+ <prompt phrase="Menos" filename="minus.wav"/>
+ <prompt phrase="Negativo" filename="negative.wav"/>
+ </currency>
+ <time>
+ <prompt phrase="A.M." filename="a-m.wav"/>
+ <prompt phrase="At" filename="at.wav"/>
+ <prompt phrase="Domingo" filename="day-0.wav"/>
+ <prompt phrase="Segunda-feira" filename="day-1.wav"/>
+ <prompt phrase="Terça-feira" filename="day-2.wav"/>
+ <prompt phrase="Quarta-feira" filename="day-3.wav"/>
+ <prompt phrase="Quinta-feira" filename="day-4.wav"/>
+ <prompt phrase="Sexta-feira" filename="day-5.wav"/>
+ <prompt phrase="Sábado" filename="day-6.wav"/>
+ <prompt phrase="Hora" filename="hour.wav"/>
+ <prompt phrase="Horas" filename="hours.wav"/>
+ <prompt phrase="Minuto" filename="minute.wav"/>
+ <prompt phrase="Minutos" filename="minutes.wav"/>
+ <prompt phrase="Janeiro" filename="mon-0.wav"/>
+ <prompt phrase="Fevereiro" filename="mon-1.wav"/>
+ <prompt phrase="Março" filename="mon-2.wav"/>
+ <prompt phrase="Abril" filename="mon-3.wav"/>
+ <prompt phrase="Maio" filename="mon-4.wav"/>
+ <prompt phrase="Junho" filename="mon-5.wav"/>
+ <prompt phrase="Julho" filename="mon-6.wav"/>
+ <prompt phrase="Agosto" filename="mon-7.wav"/>
+ <prompt phrase="Setembro" filename="mon-8.wav"/>
+ <prompt phrase="Outubro" filename="mon-9.wav"/>
+ <prompt phrase="Novembro" filename="mon-10.wav"/>
+ <prompt phrase="Dezembro" filename="mon-11.wav"/>
+ <prompt phrase="Em ponto" filename="oclock.wav"/>
+ <prompt phrase="oh" filename="oh.wav"/>
+ <prompt phrase="P.M." filename="p-m.wav"/>
+ <prompt phrase="Segundo" filename="second.wav"/>
+ <prompt phrase="Segundos" filename="seconds.wav"/>
+ <prompt phrase="Hoje" filename="today.wav"/>
+ <prompt phrase="Amanhã" filename="tomorrow.wav"/>
+ <prompt phrase="Ontem" filename="yesterday.wav"/>
+ </time>
+ <voicemail>
+ <prompt phrase="The person at extension" filename="vm-person.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"/>
+ <prompt phrase="please enter your password, followed by" filename="vm-enter_pass.wav"/>
+ <prompt phrase="login incorrect" filename="vm-fail_auth.wav"/>
+ <prompt phrase="welcome to your voicemail" filename="vm-hello.wav"/>
+ <prompt phrase="goodbye" filename="vm-goodbye.wav"/>
+ <prompt phrase="at the tone please record your name, press any key or stop talking to end the recording." filename="vm-record_name1.wav"/>
+ <prompt phrase="choose a greeting between 1 and 9" filename="vm-choose_greeting_choose.wav"/>
+ <prompt phrase="invalid value" filename="vm-choose_greeting_fail.wav"/>
+ <prompt phrase="too many failed attempts" filename="vm-abort.wav"/>
+ <prompt phrase="to change your password" filename="vm-change_password.wav"/>
+ <prompt phrase="record your greeting at the tone, press any key or stop talking to end the recording" filename="vm-record_greeting.wav"/>
+ <prompt phrase="record your message at the tone, press any key or stop talking to end the recording" filename="vm-record_message.wav"/>
+ <prompt phrase="is not available" filename="vm-play_greeting.wav"/>
+ <prompt phrase="urgent new" filename="vm-urgent-new.wav"/>
+ <prompt phrase="new" filename="vm-new.wav"/>
+ <prompt phrase="urgent saved" filename="vm-urgent-saved.wav"/>
+ <prompt phrase="saved" filename="vm-saved.wav"/>
+ <prompt phrase="message" filename="vm-message.wav"/>
+ <prompt phrase="messages" filename="vm-messages.wav"/>
+ <prompt phrase="press" filename="vm-press.wav"/>
+ <prompt phrase="to listen to new messages" filename="vm-listen_new.wav"/>
+ <prompt phrase="to listen to saved messages" filename="vm-listen_saved.wav"/>
+ <prompt phrase="for advanced options" filename="vm-advanced.wav"/>
+ <prompt phrase="to exit" filename="vm-to_exit.wav"/>
+ <prompt phrase="to record a greeting" filename="vm-record_greeting.wav"/>
+ <prompt phrase="to choose greeting" filename="vm-choose_greeting.wav"/>
+ <prompt phrase="to record your name" filename="vm-record_name2.wav"/>
+ <prompt phrase="for the main menu" filename="vm-main_menu.wav"/>
+ <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 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"/>
+ <prompt phrase="to forward the recording to your email" filename="vm-forward_to_email.wav"/>
+ <prompt phrase="greeting" filename="vm-greeting.wav"/>
+ <prompt phrase="selected" filename="vm-selected.wav"/>
+ <prompt phrase="is not available" filename="vm-not_available.wav"/>
+ <prompt phrase="message number" filename="vm-message_number.wav"/>
+ <prompt phrase="deleted" filename="vm-deleted.wav"/>
+ <prompt phrase="Your recording is below the minimum acceptable length, please try again" filename="vm-too-small.wav"/>
+ <prompt phrase="in folder inbox" filename="vm-in_folder.wav"/>
+ <prompt phrase="to return the call now" filename="vm-return_call.wav"/>
+ <prompt phrase="urgent" filename="vm-urgent.wav"/>
+ </voicemail>
+ <conference>
+ <prompt phrase="NULL" filename="conf-ack.wav" type="tone"/>
+ <prompt phrase="NULL" filename="conf-nack.wav" type="tone"/>
+ <prompt phrase="You are now muted." filename="conf-muted.wav"/>
+ <prompt phrase="You are now unmuted." filename="conf-unmuted.wav"/>
+ <prompt phrase="You are currently the only person in this conference." filename="conf-alone.wav"/>
+ <prompt phrase="NULL" filename="conf-perpetual.wav" type="music"/>
+ <prompt phrase="NULL" filename="conf-enter.wav" type="tone"/>
+ <prompt phrase="NULL" filename="conf-exit.wav" type="tone"/>
+ <prompt phrase="You have been kicked from this conference." filename="conf-kicked.wav"/>
+ <prompt phrase="This conference is locked." filename="conf-locked.wav"/>
+ <prompt phrase="The conference is now locked." filename="conf-is-locked.wav"/>
+ <prompt phrase="The conference is now unlocked." filename="conf-is-unlocked.wav"/>
+ <prompt phrase="Please enter the conference pin number." filename="conf-pin.wav"/>
+ <prompt phrase="Invalid pin number, try again." filename="conf-bad-pin.wav"/>
+ <prompt phrase="goodbye" filename="conf-goodbye.wav"/>
+ <prompt phrase="Welcome to the conference." filename="conf-welcome.wav"/>
+ </conference>
+ <ivr>
+ <prompt phrase="Account number" filename="ivr-account_number.wav"/>
+ <prompt phrase="Connect to caller" filename="ivr-connect_to_caller.wav"/>
+ <prompt phrase="If you know your party's extension, please enter it now" filename="ivr-enter_ext_pound.wav"/>
+ <prompt phrase="Please enter an extension followed by the pound sign" filename="ivr-enter_ext.wav"/>
+ <prompt phrase="For this person" filename="ivr-for_this_person.wav"/>
+ <prompt phrase="Please hold while I connect your call" filename="ivr-hold_connect_call.wav"/>
+ <prompt phrase="I'm sorry" filename="ivr-im_sorry.wav"/>
+ <prompt phrase="Please" filename="ivr-please.wav"/>
+ <prompt phrase="Please return our call at" filename="ivr-please_return_our_call_at.wav"/>
+ <prompt phrase="Regarding reference number" filename="ivr-regarding_reference_number.wav"/>
+ <prompt phrase="This is a sample IVR submenu..." filename="ivr-sample_submenu.wav"/>
+ <prompt phrase="Please say your name after the tone" filename="ivr-say_name.wav"/>
+ <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"/>
+ <prompt phrase="To call the FreeSWITCH conference" filename="ivr-to_call_the_freeswitch_conference.wav"/>
+ <prompt phrase="To do a FreeSWITCH echo test" filename="ivr-to_do_a_freeswitch_echo_test.wav"/>
+ <prompt phrase="To do a fwd echo test" filename="ivr-to_do_a_fwd_echo_test.wav"/>
+ <prompt phrase="To hear a sample IVR submenu" filename="ivr-to_hear_sample_submenu.wav"/>
+ <prompt phrase="To hear screaming monkeys" filename="ivr-to_hear_screaming_monkeys.wav"/>
+ <prompt phrase="To list to music on hold" filename="ivr-to_listen_to_moh.wav"/>
+ <prompt phrase="To repeat these options" filename="ivr-to_repeat_these_options.wav"/>
+ <prompt phrase="To return to the previous menu" filename="ivr-to_return_to_previous_menu.wav"/>
+ <prompt phrase="To speak with an operator" filename="ivr-to_speak_with_an_operator.wav"/>
+ <prompt phrase="Welcome to FreeSWITCH, the future of telephony" filename="ivr-welcome_to_freeswitch.wav"/>
+ <prompt phrase="You may exit at any time by simply hanging up" filename="ivr-you_may_exit_by_hanging_up.wav"/>
+ <prompt phrase="or" filename ="ivr-or.wav"/>
+ <prompt phrase="not" filename ="ivr-not.wav"/>
+ <prompt phrase="call" filename ="ivr-call.wav"/>
+ <prompt phrase="You may" filename ="ivr-you_may.wav"/>
+ <prompt phrase="hello" filename="ivr-hello.wav"/>
+ <prompt phrase="Using your telephone keypad..." filename="ivr-use_telephone_keypad.wav"/>
+ <prompt phrase="please spell the name of the person you are trying to reach." filename="ivr-spell_name.wav"/>
+ <prompt phrase="Last name first" filename="ivr-last_name_first.wav"/>
+ <prompt phrase="First name first" filename="ivr-first_name_first.wav"/>
+ <prompt phrase="Press 1 for Q or Z." filename="ivr-press_one_q_or_z.wav"/>
+ <prompt phrase="Sales" filename="ivr-sales.wav"/>
+ <prompt phrase="Customer service" filename="ivr-customer_service.wav"/>
+ <prompt phrase="Technical support" filename="ivr-technical_support.wav"/>
+ <prompt phrase="Operator" filename="ivr-operator.wav"/>
+ </ivr>
+ <misc>
+ <prompt phrase="This call has been secured" filename="call_secured.wav"/>
+ <prompt phrase="Followed by pound" filename="followed.wav"/>
+ <prompt phrase="If you are this person" filename="if_you_are_this_person.wav"/>
+ <prompt phrase="If you would like to" filename="if_you_would_like_to.wav"/>
+ <prompt phrase="Provide reference number" filename="provide_reference_number.wav"/>
+ <prompt phrase="Please enter extension you want to transfer to" filename="transfer1.wav"/>
+ <prompt phrase="Transfer" filename="transfer2.wav"/>
+ <prompt phrase="We are trying to reach" filename="we_are_trying_to_reach.wav"/>
+ <prompt phrase="An error has occurred please contact the administrator" filename="error.wav"/>
+ </misc>
+ </en>
+</language>
Copied: freeswitch/branches/seven/contrib/jpalley (from rev 14471, freeswitch/trunk/contrib/jpalley)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/README
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/README (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/README (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+Telegraph for FreeSWITCH
+Please see http://developer.idapted.com/plugins/telegraph for more information
+
+Telegraph allows you to write MVC voice application in Ruby on Rails that tightly integrate with the web. In our second release we go FreeSWITCH (the new OSS carrier grade switch) and Rails 2.1. Here's the details:
+
+For the FreeSWITCH fan:
+ - Complete implementation of Outbound Socket, Event (Inbound) Socket and XML-RPC
+ - ORM (ActiveRecord) like wrappings around the XML-RPC. Do things like VoiceChannel.find(uuid).destroy to hangup a channel or Conference.find(conf_id).members.first.mute? to see if the first member of a conference is muted.
+ - Event socket routing to different code modules. Allows events related to one set business logic go to one codebase and another set go to another. No more if..thens..
+ - Easy to read "voice view" syntax for outbound socket.
+ - Complete integration with Ruby on Rails and all of its database logic.
+ - Easy to deploy, log and maintain.
+
+For the Ruby/Rails fan:
+ - Voice code fits right into your usual MVC patterns.
+ - Originate/destroy/change calls, conferences and sip settings just like you'd manipulate database tables.
+ - Write voice_views like you write html/js/xml views. Use respond_to blocks to share application logic between web/voice interfaces.
+ - Write a callback application in only a few lines of code.
+ - Need to understand VoIP kept to a minimum.
+
+For The Sys Admin:
+ - Easy to deploy, daemonize
+ - Based on EventMachine - the super solid and fast networking library
+
+
+
+
+
+
+
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/Rakefile
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/Rakefile (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/Rakefile) ( => )
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_events_controller)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/routes.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/routes.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/routes.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/routes.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/routes.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,19 @@
+# Use this to route events to various voice events controller based on parameters sent in the event.
+# See example below
+class VoiceEventsRouter
+ def self.route(map)
+
+# Example of how to connect a route based on params sent my Voice Server
+# map.connect :dialer do |params|
+# MyModel.find_by_uuid(params[:caller_unique_id]) or params[:job_command_arg] =~ /dialers/
+# end
+
+ map.default :<%= file_name %>
+
+ end
+
+ def self.filter(params)
+ return true
+ end
+
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/voice_events.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/voice_events.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/voice_events.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/voice_events.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/templates/voice_events.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,28 @@
+class <%= class_name %>VoiceEvents < Telegraph::Core::VoiceEventsBase
+# Common events are commented below
+
+# Background job is called as a result of VoiceChannelModel.create and will have the uuid of the call
+# def background_job
+# end
+
+# Called on hangup
+# def channel_hangup
+# end
+
+# Called when two channels are bridged
+# def channel_bridge
+# end
+
+# When a sip user registers (watch out..every time the register is called this fires..not just the first time)
+# def custom_sofia_register
+# end
+
+# When a sip user unregisters
+# def custom_sofia_unregister
+# end
+
+# When a sip user is expired.
+# def custom_sofia_expire
+# end
+
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/voice_events_controller_generator.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/voice_events_controller_generator.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/voice_events_controller_generator.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/voice_events_controller_generator.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_events_controller/voice_events_controller_generator.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,11 @@
+class VoiceEventsControllerGenerator < Rails::Generator::NamedBase
+ def manifest
+ puts self.class_name
+ record do |m|
+ m.directory File.join('app/voice_events')
+ routes_path = File.join('app/voice_events', 'routes.rb')
+ m.template ("routes.rb", routes_path) unless File.exists?(routes_path)
+ m.template "voice_events.rb", File.join('app/voice_events', "#{file_name}_voice_events.rb")
+ end
+ end
+end
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_model)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/templates (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_model/templates)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/templates/model.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/templates/model.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_model/templates/model.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/templates/model.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/templates/model.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+class <%= model_name.camelize %> < Telegraph::FreeSWITCH::Voice<%= model_type.camelize %>Model
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/voice_model_generator.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/voice_model_generator.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/generators/voice_model/voice_model_generator.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/voice_model_generator.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/generators/voice_model/voice_model_generator.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+class VoiceModelGenerator < Rails::Generator::NamedBase
+ def initialize(runtime_args, runtime_options = {})
+ super
+ @model_type = runtime_args.shift.downcase
+ @model_name = runtime_args.shift
+ end
+ def manifest
+ raise "Invalid Voice Model Name" unless %w{channel sip conference}.include?(@model_type)
+
+ record do |m|
+ m.directory File.join('app/models')
+ m.template "model.rb", File.join('app/models', "#{@model_name.tableize.singularize}.rb"), :assigns=>{:model_type=>@model_type, :model_name=>@model_name}
+ end
+ end
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/init.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/init.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/init.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/init.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/init.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+#Core modules
+require 'core/telegraph'
+
+#Load the voice model
+require 'freeswitch/voice_model/voice_connector'
+require 'freeswitch/voice_model/voice_channel_model'
+require 'freeswitch/voice_model/voice_sip_model'
+require 'freeswitch/voice_model/voice_conference_model'
+
+#Connect to server...
+Telegraph::FreeSWITCH::VoiceConnector.load_configuration_and_connect!
+
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/install.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/install.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/install.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/install.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/install.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+# Copy server files into script/server
+require 'ftools'
+
+dir = File.dirname(__FILE__)
+
+#Copy script files
+%w{voice_view voice_events}.each do |f|
+ dest = "#{dir}/../../../script/#{f}"
+ File.copy "#{dir}/lib/#{f}", dest
+ File.chmod 0755, dest
+end
+
+#Copy configuration
+File.copy "#{dir}/lib/telegraph.yml", "#{dir}/../../../config/telegraph.yml"
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/logger_overide.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/logger_overide.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/logger_overide.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/logger_overide.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/logger_overide.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,9 @@
+module Rails
+ class Configuration
+
+ private
+ def default_log_path
+ ENV['LOG_FILE_PATH']
+ end
+ end
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/script_base.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/script_base.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/script_base.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/script_base.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/script_base.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,181 @@
+require 'optparse'
+require 'ostruct'
+require 'pp'
+require 'rubygems'
+
+module Telegraph
+ class ScriptOptions
+ def self.parse(args, process)
+ options=OpenStruct.new
+ options.daemonize = false
+ options.pid_file = "log/#{process}_server.pid"
+ options.environment = "development"
+ options.cwd = Dir.pwd
+ options.action = 'start'
+ options.debug = false
+ options.verbose = false
+ opts = OptionParser.new do |opts|
+ opts.banner = "Usage: #{process} [options]"
+ opts.separator ""
+ opts.separator "Specific options:"
+
+ opts.on('-d', '--daemon', 'Run as daemon', 'runs in shell by default') do |ext|
+ options.daemonize=true
+ end
+ opts.on('-p','--pid FILE', 'PID File', 'Defaults to log directory') do |ext|
+ options.pid_file = ext
+ end
+ opts.on('-e','--environment ENV', "Rails environment to run as") do |ext|
+ options.environment = ext
+ end
+ opts.on('-a', '--action [TYPE]', [:start, :stop], "Action To Do") do |action|
+ options.action = action
+ end
+ opts.on('-C PATH', 'Change dir before starting') do |path|
+ options.cwd = path
+ end
+ opts.on('-v', '--verbose', 'Log Voice Server Lines') do |verbose|
+ options.verbose = true
+ end
+ opts.on('-l', '--list', 'Answer to All Events') do |debug|
+ options.debug = true
+ end
+ end
+
+ opts.parse!(args)
+ options
+ end
+ end
+
+ class ScriptHandler
+ def initialize(process, &block)
+ @process_name = process
+ @options=ScriptOptions.parse(ARGV, process)
+ @pid_file =File.join(@options.cwd, @options.pid_file)
+ if @options.action == 'start'
+ self.start &block
+ else
+ self.stop
+ end
+ end
+
+ def start
+
+ log "Starting Server"
+ ENV["RAILS_ENV"]=@options.environment
+
+
+ @log_file = File.expand_path(File.join(File.dirname(__FILE__), "/../../../../../log/#{@process_name}_#{@options.environment}.log"))
+
+ log "Logging at #{@log_file}"
+
+ if @options.daemonize
+ if File.exists?(@pid_file)
+ log "PID File Already Exists! Exiting..."
+ exit
+ else
+ daemonize
+ write_pid_file
+ end
+ end
+ setup_signals
+
+
+ require File.dirname(__FILE__) + '/../../../../../config/boot'
+
+ #Surely a better way to do this...
+ ENV['LOG_FILE_PATH'] = @log_file
+ require File.dirname(__FILE__) + '/../../../../../vendor/plugins/telegraph/lib/core/logger_overide'
+
+ require RAILS_ROOT + "/config/environment"
+
+ require 'commands/servers/base'
+
+ ActiveRecord::Base.allow_concurrency = true #Prevents connection from dieing...
+ require 'eventmachine'
+
+ tail_thread = tail(Pathname.new(@log_file).cleanpath) unless @options.daemonize
+
+
+ begin
+ yield @options.verbose, @options.debug
+ ensure
+ tail_thread.kill if tail_thread
+ log 'Exiting'
+ end
+
+
+ end
+ def stop
+ send_signal("INT", @pid_file)
+ end
+
+ def kill
+ log "Exiting..."
+ File.unlink(@pid_file) if @pid_file and File.exists?(@pid_file)
+ #Need to do this twice as voice_events catches it...
+ exit!
+ end
+
+ def setup_signals
+ # forced shutdown, even if previously restarted (actually just like TERM but for CTRL-C)
+ # clean up the pid file always
+ at_exit {
+ log "Exiting..."
+ File.unlink(@pid_file) if @pid_file and File.exists?(@pid_file)
+ }
+
+ trap("INT") { log "INT signal received."; kill}
+ if RUBY_PLATFORM !~ /mswin/
+ # graceful shutdown
+ trap("TERM") { log "TERM signal received."; kill }
+ log "Signals ready. TERM => stop. INT => stop (no restart)."
+ end
+
+
+ end
+ def send_signal(signal, pid_file)
+ begin
+ pid = open(pid_file).read.to_i
+ print "Sending #{signal} to #{@options.process} at PID #{pid}..."
+ Process.kill(signal, pid)
+ rescue Errno::ESRCH
+ print "Process does not exist. Not running."
+ rescue Errno::ENOENT
+ print "No .pid file. Not shutting down"
+ end
+
+ puts "Done."
+ end
+ def log(msg)
+ # STDERR.print "** ", msg, " **\n"
+ puts "** #{msg} **"
+ end
+
+ # Writes the PID file but only if we're on windows.
+ def write_pid_file
+ log "Write pid"
+ log @pid_file
+
+ if RUBY_PLATFORM !~ /mswin/
+ open(@pid_file,"w") {|f| f.write(Process.pid) }
+ end
+ end
+ def daemonize(options={})
+ #ops = resolve_defaults(options)
+ # save this for later since daemonize will hose it
+ if RUBY_PLATFORM !~ /mswin/
+ require 'daemons/daemonize'
+ log 'daemonizing!'
+ Daemonize.daemonize(@log_file)
+
+ #log File.join(@options.cwd, @options.pid_file)
+ # change back to the original starting directory
+ Dir.chdir(@options.cwd)
+ else
+ log "WARNING: Win32 does not support daemon mode."
+ end
+ end
+
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/telegraph.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/telegraph.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/telegraph.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/telegraph.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/telegraph.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+Mime::Type.register "telegraph/voice", :voice
+module Telegraph
+ def self.config
+ rails_config = File.join(RAILS_ROOT, 'config/telegraph.yml')
+ if File.exist?(rails_config)
+ yml = YAML.load(File.open(rails_config))
+ else
+ yml = YAML.load(File.open(File.join(RAILS_ROOT, 'vendor/plugins/telegraph/lib/telegraph.yml')))
+ end
+
+ config = yml[RAILS_ENV].nil? || yml[RAILS_ENV].empty? ? yml['development'] : yml[RAILS_ENV]
+ return config
+ end
+
+ def self.logger
+ RAILS_DEFAULT_LOGGER
+ end
+
+ def self.log(txt)
+ puts "#{Time.now.utc.to_s(:long)}: #{txt}\n"
+ end
+end
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_events)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/router.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/router.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_events/router.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/router.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/router.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,37 @@
+module Telegraph
+ module Core
+ class Router
+ def initialize
+ @routes = []
+ end
+
+ def connect(name, &block)
+ @routes << {:controller=>name, :block=>block}
+ end
+
+ def default(name)
+ @routes << {:controller=>name, :block=>nil}
+ end
+
+
+ def dispatch!(event_name, params)
+ controller_name = @routes.detect{|r|
+ r[:block].nil? || r[:block].call(params)}
+ raise("No Route For Event: #{event_name}\n\nPARAMS:\n#{params.inspect}") if controller_name.nil?
+ controller_name=controller_name[:controller]
+ controller = controller_from_name(controller_name)
+ controller.params = params
+ controller.send(event_name.to_sym)
+ end
+
+ def used_events
+ @routes.map{|r| controller_from_name(r[:controller]).methods}.flatten - Telegraph::Core::VoiceEventsBase.new.methods
+ end
+
+ private
+ def controller_from_name(name)
+ "#{name}_voice_events".camelize.constantize.new
+ end
+ end
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/voice_events_base.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/voice_events_base.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_events/voice_events_base.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/voice_events_base.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_events/voice_events_base.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+module Telegraph
+ module Core
+ class VoiceEventsBase
+ attr_accessor :params
+
+ def initialize
+ @params = nil
+ end
+
+ end
+ end
+end
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/action_controller_extensions.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/action_controller_extensions.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/action_controller_extensions.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/action_controller_extensions.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/action_controller_extensions.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+module ActionController
+ class Base
+ def render_voice(&block)
+ response.interface.controller = self
+ begin
+ yield response.interface
+ end
+ @performed_render = true
+ end
+
+ #generic action that can be used to detect hangups
+ def call_hung_up
+ if respond_to?(:hung_up)
+ hung_up
+ end
+ end
+
+ #used to update session before action completes
+ def update_session(key,val)
+ session[key]=val
+ session.update
+ end
+ end
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/dispatcher.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/dispatcher.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/dispatcher.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/dispatcher.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/dispatcher.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,59 @@
+module Telegraph
+ module VoiceView
+ class StdOutEmulator
+ def write(str)
+ end
+ end
+ class Dispatcher
+ attr_accessor :request
+ attr_accessor :response
+ attr_accessor :params
+
+ require 'action_controller/dispatcher'
+
+ def dispatch(interface)
+ ENV['REQUEST_METHOD'] = "post"
+
+ @cgi=CGI.new
+ @request = Telegraph::VoiceView::Request.new(interface,@cgi,nil,nil,ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS)
+
+ @response = Telegraph::VoiceView::Response.new(interface)
+
+ prepare_application
+
+ ActionController::Routing::Routes.recognize(@request)
+
+ # bit of a hack. Need to setup next_action/next_controller
+
+ @request.next_action = @request.parameters['action']
+ @request.next_controller = @request.parameters['controller'].camelize + 'Controller'
+
+
+ #Loops until we are done executing all the actions for this call
+ while @request.next_action !=nil do
+ path_params={:action=>@request.next_action, :controller=>@request.next_controller}
+ @request.path_parameters = path_params
+ @request.next_action=nil
+ ActionController::Dispatcher.new(StdOutEmulator.new, @request, @response).dispatch
+ #Check for errors
+
+ if @response.headers['Status'] == "500 Internal Server Error" or @response.headers['Status'] == "406 Not Acceptable"
+ @request.interface.hangup
+ break
+ end
+
+ end
+
+ return @response.commands
+
+ end
+
+ def prepare_application
+ ActionController::Routing::Routes.reload if Dependencies.load?
+ require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
+ ActiveRecord::Base.verify_active_connections!
+ end
+ end
+ end
+end
+
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/interface.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/interface.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/interface.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/interface.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/interface.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,166 @@
+module Telegraph
+ module VoiceView
+ class Form
+ attr_accessor :elements
+ def initialize
+ @elements = Array.new
+ end
+
+ def numeric_input(param, pars={})
+ @elements << {:type=>:get_dtmf, :sound=>pars[:sound], :param=>param, :timeout=>pars[:timeout] || 5000, :max_digits=>pars[:max_digits] || 7, :terminators=>pars[:terminators]}
+ end
+
+ def submit(args)
+ @elements << {:type=>'submit', :args=>args}
+ end
+
+ def record_input(label, filename, param, max_time=10, beep=true, silence_detect=10)
+ @elements << {:type=>'record_input',:label=>label, :filename=>filename,:param=>param, :max_time=>max_time, :beep=>beep, :silence_detect=>silence_detect}
+ end
+ end
+ class Interface
+ attr_accessor :controller
+
+ def redirect_to(args)
+ create_redirect @controller.url_for(args.merge(:only_path=>true))
+ end
+
+
+ # The following has not been updated/tested with FreeSWITCH.
+ # It should work with minor modifications for someone who needs the features
+
+
+ # def play(str)
+ # str.split(' ').each {|e| say_element(e)}
+ # end
+ #
+ def form (opts={})
+ form = Telegraph::VoiceView::Form.new
+ @params = {}
+ yield form
+
+ for element in form.elements
+ build_form_element(element)
+ end
+
+ url = opts[:url] || opts
+ url = @controller.url_for(args.merge(:only_path=>true)) unless url.is_a?(String)
+ method = opts[:method].to_s.upcase || "POST"
+ create_redirect url, method
+ end
+ #
+ # def extract_hash(key, value)
+ # split_key=key.split('[')
+ # if split_key.size == 1 then
+ # {key.to_sym => value}
+ # else
+ # {split_key[0].to_sym => {split_key[1].slice!(0..(split_key[1].size-2)).to_sym => value}}
+ # end
+ # end
+ #
+ # def nested_merge(original, added)
+ # added.each{|key,value|
+ # if value.is_a?(Hash) && original[key] && original[key].is_a?(Hash)
+ # original[key] = nested_merge original[key], value
+ # else
+ # original[key] = value
+ # end
+ # }
+ # original
+ # end
+ #
+ # def link_to_dtmf(sound, args={}, &block)
+ # @links = Array.new
+ #
+ # instance_eval &block
+ #
+ # return if @links.empty?
+ #
+ # max_digits = @links.max{|a, b| a[:link].to_s.to_i.to_s.length <=> b[:link].to_s.to_i.to_s.length}[:link].to_s.length
+ # args[:timeout] ||= max_digits * 1500
+ #
+ # n= get_data full_sound_path(sound), args[:timeout], max_digits
+ #
+ # input = n.length == 0 ? 'no_response' : n.to_s
+ #
+ # #find the matching link
+ # @links.each do |link|
+ # if link[:link].to_s == input
+ # @request.create_redirect link
+ # return
+ # end
+ # end
+ #
+ # #we got nothing
+ # default = @links.detect{|l| l[:link] == :default}
+ # @request.create_redirect default if @request.next_action.nil? and default
+ # end
+ #
+ # def link(link, url)
+ # url[:link] = link
+ # @links << url
+ # end
+ #
+ #
+ # def redirect_to(opts={})
+ # @request.create_redirect opts
+ # end
+ #
+ # def say_datetime(time,escapeDigits=ALL_SPECIAL_DIGITS)
+ # #calc the number of seconds elapsed since epoch (00:00:00 on January 1, 1970)
+ # diff = time.to_i
+ # msg = "SAY DATETIME #{diff} #{escape_digit_string(escapeDigits)}"
+ # send(msg)
+ # return get_int_result()
+ # end
+ #
+ # def say_element(item)
+ # if item.match(/^Datetime:/) then
+ # item.delete!('Datetime:')
+ # say_datetime(item)
+ # elsif item.to_i > 0 || item=='00'
+ # say_number(item.to_i.to_s)
+ # elsif item.to_f < 0 then
+ # play_sound 'negative'
+ # say_number(item.to_f.abs)
+ # else
+ # play_sound(full_sound_path(item))
+ # end
+ # end
+ #
+ # def build_form_element(element)
+ # return get_data_element(element) if element[:type] == 'get_data'
+ # return record_input_element(element) if element[:type] == 'record_input'
+ # end
+ #
+ # def get_data_element(element)
+ # num = get_data full_sound_path(element[:sound]), element[:timeout], element[:max_digits]
+ # @params.merge!(extract_hash(element[:param], num))
+ # end
+ #
+ #
+ # def record_input_element(element)
+ # play element[:label]
+ # ret = record_file(Telegraph::Config::Globals["RECORDINGPATH"] + '/' + element[:filename], element[:max_time], element[:beep], element[:silence_detect])
+ #
+ # @params = nested_merge(@params, extract_hash(element[:param],element[:filename]))
+ # #params.update(extract_hash(element[:param],element[:filename]))
+ # end
+ #
+ # def output(filename)
+ # play_sound full_sound_path(filename)
+ # end
+ #
+ # def full_sound_path(filename)
+ #
+ # name =Telegraph::Config::Globals["SOUNDPATH"] + '/' + filename
+ # if File.exists?(name + '.gsm') || File.exists?(name + '.sln')
+ # name
+ # else
+ # filename
+ # end
+ # end
+
+ end
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/request.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/request.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/request.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/request.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/request.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,159 @@
+# Copyright (c) 2007 Jonathan Palley, Idapted Inc.
+# All rights reserved
+
+module Telegraph
+ module VoiceView
+ class Request < ActionController::AbstractRequest
+ attr_accessor :session_options, :path, :session, :env
+ attr_accessor :host, :interface, :next_action, :next_controller, :path
+
+ #
+ def initialize(interface, cgi, query_parameters ={}, request_parameters = {}, session_opts = ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS)
+ @interface = interface
+ @query_parameters = query_parameters
+ @session_options = session_opts
+ @redirect = false
+ @env = {}
+
+ #these allow us to do redirects (or psuedo form submits)to other actions since we can't do a HTTP 302
+ @next_action = nil
+ @next_controller = nil
+ @redirect_parameters = nil
+
+
+ @cgi = cgi
+ @host = "voice_view"
+ @request_uri = "/"
+ @env['REQUEST_METHOD'] = @interface.params['http_method'] || "GET"
+
+ @path= @interface.url
+ @session_options['session_id'] = @interface.params['session_id']
+
+
+ super()
+ end
+ def sound?
+ true
+ end
+ def accepts
+ [Mime::Type.lookup_by_extension('voice')]
+ end
+
+
+
+ #copies parameters from the agi request (in the call_connection object)
+ #if this is a redirect we add in the redict parameters
+ def request_parameters
+ @interface.params.dup
+ end
+
+ def query_parameters
+ @redirect_parameters || {}
+ end
+
+ def remote_ip
+ return '123.123.123.123'
+ end
+
+
+
+ def create_redirect(args)
+
+ @next_action=args.delete(:action).to_s
+ @next_controller = args.delete(:controller).to_s.camelize + 'Controller' unless args[:controller].nil?
+
+ @redirect_parameters = args
+ parameters
+ end
+
+ def remote_addr=(addr)
+ @env['REMOTE_ADDR'] = addr
+ end
+
+ def remote_addr
+ @env['REMOTE_ADDR']
+ end
+
+ def request_uri
+ @request_uri || super()
+ end
+
+ def path
+ @path || super()
+ end
+
+
+ def session=(session)
+ @session = session
+ @session.update
+ end
+
+ def session
+ unless @session
+ if @session_options == false
+ @session = Hash.new
+ else
+ stale_session_check! do
+
+ if session_options_with_string_keys['new_session'] == true
+ @session = new_session
+ else
+ @session = CGI::Session.new(@cgi, session_options_with_string_keys)
+ end
+ session['__valid_session']
+ end
+ end
+ end
+ @session
+ end
+
+ def reset_session
+ @session.delete if CGI::Session === @session
+ @session = new_session
+ end
+
+ def method_missing(method_id, *arguments)
+ @cgi.send(method_id, *arguments) rescue super
+ end
+
+ def logger=(logger)
+ @logger=logger
+ end
+
+ def logger
+ @logger
+ end
+
+ private
+ # Delete an old session if it exists then create a new one.
+ def new_session
+ if @session_options == false
+ Hash.new
+ else
+ CGI::Session.new(@cgi, session_options_with_string_keys.merge("new_session" => false)).delete rescue nil
+ CGI::Session.new(@cgi, session_options_with_string_keys.merge("new_session" => true))
+ end
+ end
+ def stale_session_check!
+ yield
+ rescue ArgumentError => argument_error
+ if argument_error.message =~ %r{undefined class/module (\w+)}
+ begin
+ Module.const_missing($1)
+ rescue LoadError, NameError => const_error
+ raise ActionController::SessionRestoreError, "Session contains objects whose class definition isn\'t available. Remember to require the classes for all objects kept in the session. (Original exception: #{const_error.message} [#{const_error.class}])"
+ end
+
+ retry
+ else
+ raise
+ end
+ end
+
+ def session_options_with_string_keys
+ @session_options_with_string_keys ||= ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge(@session_options).inject({}) { |options, (k,v)| options[k.to_s] = v; options }
+ end
+ end
+
+end
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/response.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/response.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/response.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/response.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/response.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+module Telegraph
+ module VoiceView
+ class Response < ActionController::AbstractResponse
+ attr_accessor :interface
+
+ def initialize(interface)
+ @interface = interface
+ @commands = []
+ super()
+ end
+
+ def out(output)
+ end
+
+ def commands
+ @interface.commands
+ end
+ end
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/template.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/template.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/core/voice_view/template.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/template.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/core/voice_view/template.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,43 @@
+# :stopdoc:
+# This file makes Haml work with Rails
+# using the > 2.0.1 template handler API.
+
+module Telegraph
+ module VoiceView
+
+ class Template
+ include ActionView::TemplateHandlers::Compilable if defined?(ActionView::TemplateHandlers::Compilable)
+
+ def self.line_offset
+ 1
+ end
+
+ def compilable?
+ true
+ end
+
+ def line_offset
+ self.class.line_offset
+ end
+
+ def initialize(view)
+ @view = view
+ end
+
+ def compile(template)
+ #options = Haml::Template.options.dup
+ puts "COMPILE"
+ puts template
+
+ "controller.render_voice do |voice|\n #{template.source}\n end"
+# Haml::Engine.new(template, options).send(:precompiled_with_ambles, [])
+ end
+
+ def read_template_file(template_path, extension)
+ File.read(template_path)
+ end
+ end
+end
+end
+
+ActionView::Template.register_template_handler(:freeswitch, Telegraph::VoiceView::Template)
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_events_server.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_events_server.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_events_server.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_events_server.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_events_server.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,166 @@
+Dir[File.join(RAILS_ROOT, "app/voice_events/**")].each do |f|
+ require f
+end
+
+module Telegraph
+ module FreeSWITCH
+ class VoiceEventsServer < EventMachine::Connection
+
+ def initialize *args
+
+ @received_buffer = ''
+ @last_command = nil
+ @closing = false
+ @routes = Telegraph::Core::Router.new
+ VoiceEventsRouter.route(@routes)
+ super
+ end
+
+ def set_modes(verbose, debug)
+ Telegraph.log "Turning on Debug Mode" if @debug = debug
+ Telegraph.log "Turning on Verbose Mode" if @verbose = verbose
+ end
+
+
+ def receive_data(data)
+ # IMPORTANT: There is no gauruntee where data starts/ends
+ # We must make sure we buffer correctly
+ @received_buffer << data
+
+ Telegraph.log "Recieved:\n#{data}" if @verbose
+ #Return unless we have a complete event
+ process_event
+
+
+
+ while @received_buffer =~ /Content-Type:\s([\w\/]+)/
+ content_type = $1
+ after_buffer = $'
+
+ #Is this an authorizatin reqest?
+ if content_type == 'auth/request'
+ @received_buffer = after_buffer
+ send_command "auth ClueCon"
+
+ #Reply to Authorization request?
+ elsif content_type == 'command/reply'
+ @received_buffer = ''
+ if after_buffer.include?('Reply-Text: +OK accepted')
+ send_command "event plain #{subscribed_events}"
+ end
+
+ #Everything else
+ else
+ #Search for content-length/content-type tags and extra the values
+ while @received_buffer =~ /Content-Length:\s(\d+)\nContent-Type:\s([\w\/\-]+)/
+ content_type = $2
+ @next_event_size = $1.to_i
+
+ @received_buffer = $'.gsub(/\A\s+/, '') #Remove leading whitespaces.
+
+ process_event
+ end
+ end
+ end
+
+ end
+
+ def process_event
+ if @next_event_size and @received_buffer and @received_buffer.size >= @next_event_size
+ @event_data = @received_buffer[0..(@next_event_size-1)]
+ @recieved_buffer = @received_buffer[@next_event_size..(@received_buffer.size-1)]
+ @next_event_size = nil
+
+ #Split at content length
+ data = @event_data.split(/Content-Length:\s(\d+)\n\n/)
+
+ headers = Hash.new
+ data[0].split("\n").each do |line|
+ unless line.empty?
+ k, v = line.split(': ')
+ headers[k.gsub('-', '_').downcase.to_sym] = URI.decode(v) if k and v
+ end
+ end
+
+ headers[:content] = data[2] if data[2]
+
+ event_name = headers[:event_name].downcase
+ event_name = "custom_" + headers[:event_subclass].gsub('::', '_') if headers[:event_name] == "CUSTOM"
+ begin
+ return unless VoiceEventsRouter.filter(headers)
+ Telegraph.log "CALLING: #{event_name}"
+ @routes.dispatch!(event_name.to_sym, headers)
+ # @voice_events.params = headers
+ # @voice_events.send(event_name.to_sym)
+ rescue ActiveRecord::StatementInvalid => e
+ #If not used for a while we will lose AR Connection
+ Telegraph.log "Lost AR Connection .... "
+ ActiveRecord::Base.connection.reconnect!
+ unless @ar_reconnect_retried
+ Telegraph.log "Reconnecting to AR..."
+ @ar_reconnected_retried = true
+ retry
+ end
+ raise
+ rescue Exception => e
+ Telegraph.log "Error in sending event: #{headers[:event_name]}"
+ Telegraph.log e.inspect
+ Telegraph.log e.backtrace
+ else
+ @ar_reconnected_retried = false
+
+ end
+
+ end
+ end
+ def unbind
+ return if @closing
+
+ Telegraph.log "UNBIND!"
+
+ begin
+ sleep 10
+ Telegraph.log "Attempting to reconnect..."
+ config = Telegraph.config
+ reconnect config['server'], config['events']['port']
+ rescue SystemExit => e
+ Telegraph.log "system exit"
+ exit
+ rescue Exception => e
+ Telegraph.log "Error in reconnecting..."
+ Telegraph.log e.inspect
+
+ retry
+ end
+
+ end
+
+ protected
+ def subscribed_events
+ return "all" if @debug
+
+ custom_events = []
+ normal_events = []
+
+ @routes.used_events.each do |e|
+ e = e.downcase
+ if e =~ /custom\_/ then
+ custom_events << $'.gsub('_', '::')
+ else
+ normal_events << e.upcase
+ end
+ end
+
+ meths = normal_events.join(' ')
+ meths << " CUSTOM #{custom_events.join(' ')}"
+ Telegraph.log "Subscribe to: #{meths}"
+ return meths
+ end
+
+ def send_command(str)
+ @last_command = str
+ send_data(str + "\n\n")
+ end
+ end
+ end
+end
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_channel_model.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_channel_model.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_channel_model.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_channel_model.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_channel_model.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,154 @@
+module Telegraph
+ module FreeSWITCH
+ class VoiceChannelModel
+ attr_accessor :exists
+ attr_accessor :last_error
+ attr_accessor :job_uuid
+ attr_accessor :uuid
+
+ @uuid = nil
+ @params = nil
+ @@connector = nil
+ @exists = nil
+ @last_error = nil
+ def initialize(params={})
+ @params = params.with_indifferent_access
+ @uuid = params[:uuid]
+ @job_uuid = params[:job_uuid]
+ @@connector ||= params[:connector] || VoiceConnector.new
+ @valid=true
+ end
+
+ %w{park hold}.each do |command|
+ class_eval <<-END
+ def #{command}()
+ puts @@connector.send_command("uuid_#{command}",@uuid)
+ end
+ END
+ end
+
+ def destroy
+ puts @@connector.send_command("uuid_kill", @uuid)
+ end
+
+ def invalidate
+ @valid = false
+ end
+
+ def valid?
+ @valid
+ end
+
+ def start_recording(filename)
+ @@connector.send_command('uuid_record', "#{@uuid} start #{filename}")
+
+ end
+ def stop_recording(filename)
+ @@connector.send_command('uuid_record', "#{@uuid} stop #{filename}")
+ end
+
+ def inline_transfer(apps)
+ @@connector.send_command('uuid_transfer', "#{uuid} #{apps} inline")
+ end
+
+ def dump
+ begin
+
+ dump=@@connector.send_command('uuid_dump', @uuid)
+
+ result = {}
+ dump.split("\n").each do |line|
+ l = line.split(': ')
+ result[l[0].gsub('-', '_').downcase] = result[l[1]]
+ end
+ return result
+ rescue Exception => e
+ return nil
+ end
+ end
+
+ def method_missing(method, *args)
+ if @params[method]
+ return @params[method]
+ else
+ properties = self.dump
+ properties[method] ? properties[method] : properties["channel_#{method}"]
+ end
+ end
+
+
+ def self.humanize_error_code(status)
+ case status
+ when /NO_ROUTE_DESTINATION|CHAN_NOT_IMPLEMENTED/
+ "Invalid Number. Perhaps the user is not logged in?"
+ when /NO_USER_RESPONSE|ORIGINATOR_CANCEL/
+ "The phone was not answered."
+ when /USER_BUSY/
+ "The number is busy now. Please try again later."
+ when /INVALID_NUMBER_FORMAT/
+ "The number is not a valid format. Please enter another number and try again."
+ else
+ status
+ end
+ end
+
+ def self.find(meth, *args)
+ voice_connector = @@connector || VoiceConnector.new
+ if meth == :all
+ channels_csv = voice_connector.show(:channels)
+ if args.empty?
+
+ return channels_csv.map{|c| VoiceChannelModel.new(c)}
+ end
+ else
+ klass = self.new(:uuid=>meth)
+ if klass.dump
+ return klass
+ else
+ return nil
+ end
+ end
+ end
+
+ def self.create(opts={})
+ voice_connector = @@connector || VoiceConnector.new
+
+ destination = opts[:destination]
+ cid_name = opts[:cid_name] || 'idapted'
+ cid_number = opts[:cid_number] || '000'
+ variables = opts[:vars] || {}
+ variables[:origination_caller_id_name] = cid_name
+ variables[:origination_caller_id_number] = cid_number
+ variables[:ignore_early_media] = "true"
+# variables[:system_domain] = SiteConfig['global']['domain']
+ variables = variables.map{|k,v| "#{k}=#{v}"}.join(',')
+
+ if callback = opts[:callback]
+ #port = opts[:port] || '8084'
+ #Remove http://blah/ if it exists
+ callback.gsub!(/http:\/\/[\d\w\.:]+\//, '')
+ callback.gsub!(/^\//, '')
+# name_prefix = SiteConfig ? "#{SiteConfig['global']['domain']}_" : ''
+ name_prefix = ''
+ params = "&socket(${rails_#{name_prefix}server}/#{callback} async full)"
+ else
+ params = opts[:params]
+ end
+
+ begin
+ command = "originate {#{variables}}#{destination} #{params}"
+ job = voice_connector.send_command('bgapi', command)
+ job_uuid = job.gsub('Job-UUID: ', '').gsub("\n", '')
+ return self.new :job_uuid=>job_uuid, :connector=>voice_connector
+ rescue Exception => e
+
+ mdl = self.new
+ mdl.last_error = e.message
+ mdl.invalidate
+ return mdl
+ end
+ end
+ end
+
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_conference_model.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_conference_model.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_conference_model.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_conference_model.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_conference_model.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,101 @@
+module Telegraph
+ module FreeSWITCH
+ class VoiceConferenceModel
+ attr_accessor :name
+ attr_accessor :members
+ @name = nil
+ @members = nil
+ @@connector = nil
+ def initialize(name, members_data)
+ return nil if members_data =~ /not found/
+ @name = name
+ @@connector ||= VoiceConnector.new
+ @members = VoiceConferenceMemberCollection.new
+ members_data.split("\n").each do |member_data|
+ @members << VoiceConferenceMember.new(member_data, name, @@connector)
+ end
+ end
+
+ def start_recording(filename)
+ @@connector.send_command('conference', "#{@name} record #{filename}")
+ end
+
+ def stop_recording(filename)
+ @@connector.send_command('conference', "#{@name} norecord #{filename}")
+ end
+
+ def self.find(id)
+ @@connector ||= VoiceConnector.new
+
+ if id == :all
+ data = @@connector.send_command('conference', 'list')
+ #TODO: Deal with no conference
+ conferences_data = data.split(/Conference\s([\d\w]+)\s[\w\s\d\(]+\)\n/)
+ conferences_data = conferences_data[1..conferences_data.size-1] #Pop off first one..its useless
+ conferences = []
+ while not conferences_data.empty?
+ members = conferences_data.pop
+ name = conferences_data.pop
+ conferences << self.new(name, members)
+ end
+ return conferences
+ else
+ data = @@connector.send_command('conference', "#{id} list")
+ return nil if data =~ /not found/
+ return self.new(id, data)
+ end
+ end
+ end
+
+ class VoiceConferenceMemberCollection < Array
+ def find(id)
+ self.detect{|o| o.id.to_s == id.to_s}
+ end
+ end
+ class VoiceConferenceMember
+ attr_accessor :id, :channel, :uuid, :deaf, :mute, :volume_in, :volume_out, :energy, :conf_name
+
+ def initialize(data, conf_name, voice_connector)
+ data = data.split(';')
+ @id = data[0]
+ @channel = data[1]
+ @uuid = data[2]
+ @mute = !(data[5] =~ /speak/) and true
+ @deaf = !(data[5] =~ /hear/) and true
+ @volume_in = data[6]
+ @volume_out = data[7]
+ @energy = data[8]
+ @conf_name = conf_name
+ @connector = voice_connector
+ end
+
+ def mute?
+ @mute
+ end
+
+ def deaf?
+ @deaf
+ end
+
+ def update_attributes(params)
+
+ params.each do |k,v|
+ if [:mute, :deaf].include?(k.to_sym)
+ tru = (v and not v == "0")
+ prefix = tru ? '' : 'un'
+ unless tru == self.send(k.to_sym)
+ if @connector.send_command('conference', "#{conf_name} #{prefix}#{k.to_s} #{id}")
+ self.send("#{k.to_s}=".to_sym, v)
+ end
+ end
+ elsif [:volume_in, :volume_out, :energy].include?(k.to_sym)
+ if @connector.send_command('conference', "#{conf_name} #{k.to_s} #{id} #{v}")
+ self.send("#{k}=", v)
+ end
+ end
+ end
+ end
+
+ end
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_connector.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_connector.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_connector.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_connector.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_connector.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,98 @@
+require 'xmlrpc/client'
+require 'xmlrpc/marshal'
+require 'pp'
+
+
+module Telegraph
+ module FreeSWITCH
+ class VoiceModelFunctionError < StandardError; end
+ class VoiceModelResponseError < StandardError; end
+
+
+
+
+ class VoiceConnector
+ SHOW_COMMANDS = %w{codec application api dialplan file timer calls channels}
+ @@connection = nil
+ @@connection_options = nil
+
+ def self.connect!(opts)
+ Telegraph::FreeSWITCH::VoiceModel.new.connect(opts)
+ end
+
+ def self.load_configuration_and_connect!
+ config = Telegraph.config
+ Telegraph::FreeSWITCH::VoiceConnector.new.connect!(:server=>config['server'], :port=>config['model']['port'], :username=>config['model']['username'], :password=>config['model']['password'], :timeout=>10)
+ end
+
+ def connect!(opts={})
+ # opts[:timeout] =|| 10
+ @@connection_options = opts
+
+ @@connection = XMLRPC::Client.new(@@connection_options[:server], '/RPC2', @@connection_options[:port], nil, nil, @@connection_options[:username], @@connection_options[:password], nil, @@connection_options[:timeout])
+ end
+
+ def show(command, options='')
+ return parse_csv_result(send_command('show', "#{command} #{options}"))
+ end
+
+ def method_missing(meth, *args)
+ send_command(meth.to_s, args.join(' '))
+ end
+
+ def self.find(command, options='')
+ voice_model = Telegraph::FreeSWITCH::VoiceModel.new
+ if SHOW_COMMANDS.include?(command.to_s)
+ result = voice_model.send_command('show', "#{command} #{options}")
+ return voice_model.parse_csv_result(result)
+ end
+
+ end
+
+
+
+
+ def parse_csv_result(result)
+ name_array = []
+ return_array = []
+ result.split("\n").each do |line|
+ if line =~ /Content-Type/ or line.empty? or line =~ /\d+ total\./
+ #Do nothing
+ elsif name_array.empty?
+ name_array = line.split(',')
+ else
+ item = Hash.new
+ line.split(',').each_with_index{|v,i| item[name_array[i].to_sym]=v}
+ return_array << item
+ end
+ end
+
+ return return_array
+ end
+
+ def send_command(command, options='')
+ result = @@connection.call("freeswitch.api", command, options)
+ #Parse results
+ if result =~ /ERROR/
+ raise VoiceModelFunctionError, "Invalid Command"
+ elsif result =~ /^-ERR/
+ raise VoiceModelResponseError, result.gsub('-ERR', '')
+ else
+ return (result.gsub('+OK ', '') || true)
+ end
+ end
+ end
+end
+end
+
+# puts 'start'
+# v = Telegraph::FreeSWITCH::VoiceConnector.new
+# puts 'v'
+# v.connect!(:server=>'192.168.1.10', :port=>8080, :username=>'freeswitch', :password=>"works")
+# puts '2'
+# channels = Telegraph::FreeSWITCH::VoiceChannelModel.find(:all)
+# pp channels
+#
+# channels.first.destroy
+#
+# puts '4'
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_sip_model.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_sip_model.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_sip_model.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_sip_model.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_model/voice_sip_model.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,80 @@
+module Telegraph
+ module FreeSWITCH
+ class VoiceSipModel
+ attr_accessor :profile
+ attr_accessor :gateway
+ attr_accessor :params
+ def initialize(connector = nil)
+ @@connector = @@connector || connector || VoiceConnector.new
+ @params = {}
+ end
+
+ def self.find_by_gateway(gateway)
+ klass = self.new
+ klass.gateway = gateway
+ klass.profile = nil
+ klass
+ end
+
+ def self.find_by_profile(profile)
+ klass = self.new
+ klass.profile = profile
+ klass.gateway = nil
+ klass
+ end
+
+ def self.find_by_username(username, profile="default")
+ registrations = self.find_all
+ registrations.detect{|r| r.params[:user] =~ /^#{username}\@/}
+ end
+
+ def self.find_all(profile="default")
+ @@connector ||=VoiceConnector.new
+ @@data_cache ||= Hash.new
+ if @@data_cache[:set_at].nil? or @@data_cache[:set_at] < 3.second.ago.utc
+ data = @@connector.send_command("sofia", "status profile #{profile}")
+ @@data_cache[:data] = data
+ @@data_cache[:set_at] = Time.now.utc
+ else
+ data = @@data_cache[:data]
+ end
+
+ registrations = data.split("Registrations:\n")[1]
+ registrations = registrations.split("\n\n")
+ registrations = registrations.find_all{|r| r.split("\n").size > 2}
+ registrations = registrations.map do |r|
+ klass = self.new
+ klass.profile = profile
+ regs = r.split("\n")
+ regs.each do |p|
+ p = p.split(" \t")
+ klass.params[p[0].gsub(' ', '').downcase.gsub('-', '_').to_sym] = p[1] if p.size > 1
+ end
+ klass
+ end
+ return registrations
+ end
+
+ def flush
+ re= @@connector.send_command("sofia", "profile #{profile} flush_inbound_reg #{@params[:call_id]}")
+ @params = {} if re=~ /OK/
+ end
+
+ def restart_and_reload
+ @@connector.send_command("sofia", "profile #{profile} restart all reloadxml")
+ end
+
+ def status
+ if @gateway
+ @@connector.send_command("sofia", "status gateway #{@gateway}")
+ else
+ @@connector.send_command("sofia", "status profile #{profile}")
+ end
+ end
+ end
+ end
+end
+
+
+
+
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_interface.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_interface.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_interface.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_interface.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_interface.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,127 @@
+module Telegraph
+ module FreeSWITCH
+ class VoiceViewInterface < Telegraph::VoiceView::Interface
+ #The following is the interface to the freeswitch voice view functions...
+ attr_accessor :params, :commands
+
+ def initialize(params)
+ ENV['REQUEST_METHOD'] = "post"
+ puts "INITIALIZE VOICE"
+ @params = params
+ @commands = Array.new
+ @cgi=CGI.new
+ end
+
+ def url
+ '/' + (@params['variable_socket_path'] || '')
+ end
+
+ #spell macro
+ def spell(words)
+ phrase "spell", words
+ end
+
+ #spell phonetic macro
+ def spell_phonetic(words)
+ phrase "spell-phonetic", words
+ end
+
+ #say time macro
+ def say_time(time = Time.now.utc)
+ phrase "saydate", time.to_i
+ end
+
+ #say time difference
+ def say_timespec(time)
+ phrase "timespec", time
+ end
+
+ #answer channel
+ def answer
+ msg "answer"
+ end
+
+ def play_sound(file)
+ msg "playback", file
+ end
+
+ def record(filename, length, silence_threshold=500, silence_time=5)
+ msg "record", "#{filename} #{length} #{silence_threshold} #{silence_time}"
+ end
+
+ def phrase(macro, data)
+ msg "phrase", "#{macro},#{data}"
+ end
+
+ def bridge(data)
+ msg "bridge", data
+ end
+
+ def set(data)
+ msg "set", data
+ end
+
+ def conference(data)
+ msg "conference", data
+ end
+
+ def hangup
+ @commands << "SendMsg #{params['unique-id']}\ncall-command: hangup\nhangup-cause: SERVICE_NOT_IMPLEMENTED"
+ end
+
+ def hold
+ @commands << "SendMsg #{params['unique-id']}\ncall-command: hold"
+ end
+
+ def ring_ready
+ msg "ring_ready"
+ end
+
+ def socket(url)
+ msg "socket", "#{params['variable_socket_host']}:8084#{url} async full"
+ end
+
+ def fifo_in(queue_name, announce = "undef", music="undef")
+ msg "fifo", "#{queue_name} in #{announce} #{music}"
+ end
+
+ def fifo_out(queue_name, announce="undef", music="undef")
+ msg "fifo", "#{queue_name} out nowait #{announce} #{music}"
+ end
+
+ def export(val)
+ msg "export", val
+ end
+
+ def speak(txt, engine="flite", voice="kal")
+ msg "set", "tts_engine=#{engine}"
+ msg "set", "tts_voice=#{voice}"
+ msg "speak", txt
+ end
+
+ def transfer(extension, dialplan='', context='')
+ msg "transfer", "#{extension} #{dialplan} #{context}"
+ end
+ def dtmf_read(max = 10, sound = nil, fs_var_name = "dtmf_inputs", timeout = 10000, terminators = '#,*')
+ sound ||= 'misc/8000/silence.wav'
+ msg "read", "1 #{max} #{sound} #{fs_var_name} #{timeout} #{terminators}"
+ end
+
+ ##############
+ # For FORMS
+ ##################
+ def build_form_element(element)
+ dtmf_read(element[:max_digits], element[:sound], element[:param], element[:timeout], element[:terminators]) if element[:type]==:get_dtmf
+ end
+
+ def create_redirect(url, method="GET")
+ set("http_method=#{method}")
+ transfer "'socket:${rails_server}#{url} async full'", "inline"
+ end
+ private
+ def msg(app, params='')
+ @commands << {:type=>:msg, :app=>app, :params=>params}
+ end
+ end
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_server.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_server.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_server.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_server.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/freeswitch/voice_view_server.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,87 @@
+require 'eventmachine'
+
+ module VoiceViewServer
+ def post_init
+ Telegraph.log "New Connection"
+ @receive_buffer = ''
+ @connection_params = []
+ @command_queue = []
+ @command_queue << "log DEBUG\n\n"
+ @command_queue << "myevents\n\n"
+
+ send "connect"
+ end
+
+ def set_modes(verbose, debug)
+ Telegraph.log "Turning on Debug Mode" if @debug = debug
+ Telegraph.log "Turning on Verbose Mode" if @verbose = verbose
+ end
+
+ def receive_data data
+ @receive_buffer << data
+
+ Telegraph.log "Received:\n#{data}" if @verbose
+
+ #If we've recieved the last line of the response
+ if @receive_buffer =~ /\n\n/
+ #Hashify params and clear buffer
+ @params = hashify @receive_buffer
+ @receive_buffer = ''
+
+ #Set connection params if this is the first response
+ unless @command_queue.empty?
+ command = @command_queue.shift
+ if command.is_a?(Hash)
+ send_application command[:app], command[:params]
+ else
+ send command
+ end
+ else
+ #close_connection
+ end
+
+ if @connection_params.empty?
+ @connection_params = @params
+
+ make_commands
+ end
+
+ end
+ end
+
+ def make_commands
+ interface = Telegraph::FreeSWITCH::VoiceViewInterface.new(@connection_params)
+ @command_queue = @command_queue + Telegraph::VoiceView::Dispatcher.new.dispatch(interface)
+ end
+
+ def unbind
+ puts "UNBIND"
+ end
+
+ def hashify data
+ hsh = Hash.new
+ data.split("\n").each do |line|
+ unless line.empty?
+ key,value = line.split(': ')
+ key = key.gsub('-', '_').downcase
+
+ hsh[key] = value
+ non_variable_key = key.gsub(/^variable\_/, '') #remove variable_ from keys
+ hsh[non_variable_key] = value
+ end
+ end
+ return hsh.with_indifferent_access
+ end
+
+ def send_application app, params=nil
+ msg = "SendMsg #{@connection_params['unique-id']}\ncall-command: execute\nexecute-app-name: #{app}"
+ msg << "\nexecute-app-arg: #{params}" #if params
+ msg << "\nevent-lock: true"
+ send msg
+ end
+
+ def send data
+ Telegraph.log "Sending:\n#{data}" if @verbose
+ send_data data + "\n\n"
+ end
+ end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/telegraph.yml
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/telegraph.yml (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/telegraph.yml) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/telegraph.yml (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/telegraph.yml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+development:
+ server: 192.168.1.27
+ model:
+ port: 8080
+ username: freeswitch
+ password: works
+ events:
+ port: 8021
+
+
+production:
+ server: voip1.lan
+ model:
+ port: 8080
+ username: freeswitch
+ password: works
+ events:
+ port: 8021
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_events
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_events (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/voice_events) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_events (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_events 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,21 @@
+#!/usr/bin/env ruby
+require File.dirname(__FILE__) + '/../vendor/plugins/telegraph/lib/core/script_base'
+
+Telegraph::ScriptHandler.new('voice_events') do |v, d|
+
+ telegraph_path = 'vendor/plugins/telegraph/lib'
+ require File.join(RAILS_ROOT, telegraph_path, 'core/voice_events/voice_events_base')
+ require File.join(RAILS_ROOT, telegraph_path, 'core/voice_events/router')
+
+ require File.join(RAILS_ROOT, telegraph_path, 'freeswitch/voice_events_server')
+
+
+ config = Telegraph.config
+
+ EventMachine::run {
+ EventMachine::connect config['server'], config['events']['port'], Telegraph::FreeSWITCH::VoiceEventsServer do |conn|
+ conn.set_modes v, d
+ end
+ }
+
+end
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_view
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_view (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/lib/voice_view) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_view (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/lib/voice_view 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../vendor/plugins/telegraph/lib/core/script_base'
+
+Telegraph::ScriptHandler.new('voice_view') do |v, d|
+ files = ['core/voice_view/dispatcher','core/voice_view/request', 'core/voice_view/template', 'core/voice_view/response',
+ 'core/voice_view/interface', 'core/voice_view/action_controller_extensions', 'freeswitch/voice_view_interface', 'freeswitch/voice_view_server']
+
+ plugin_path = File.join(RAILS_ROOT, 'vendor/plugins/telegraph/lib')
+
+ files.each do |file|
+ require File.join(plugin_path, file)
+ end
+
+
+ EventMachine::run {
+ EventMachine::start_server "0.0.0.0", 8084, VoiceViewServer do |server|
+ server.set_modes v, d
+ end
+ puts "Now Accept Connections on Port 8084"
+
+ }
+ end
+
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/license.txt
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/license.txt (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/license.txt) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/license.txt (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/license.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,25 @@
+COPYRIGHT:
+Copyright (c) 2008 Idapted Ltd.
+
+AUTHORS:
+Jonathan Palley (Primary)
+
+LICENSE:
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/test)
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/ami_test.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/ami_test.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/test/ami_test.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/ami_test.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/ami_test.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,120 @@
+
+require 'test/unit'
+
+require File.expand_path(File.join(File.dirname(__FILE__), '../../../../config/environment.rb'))
+class RAI::TelegraphTCP
+ @@recieved_buffer = Array.new
+ @@write_buffer = Array.new
+ def set_recieved(data, add_crlf = true)
+ if data.kind_of?(Array)
+ data.reverse_each do |r|
+ add_to_recieved_buffer(r, add_crlf)
+ end
+ elsif data =~ /\n/
+ data.split("\n").reverse_each do |r|
+ add_to_recieved_buffer(r.gsub(/^\s+/, ""), true)
+ end
+ else
+ add_to_recieved_buffer(data, add_crlf)
+ end
+ end
+
+ def add_to_recieved_buffer(line, add_crlf)
+ line = line + "\n\r" if add_crlf
+ @@recieved_buffer << line
+ end
+
+ def clear_recieved_buffer
+ @@recieved_buffer.clear
+ end
+
+ def gets
+ puts "gets"
+ s =@@recieved_buffer.pop
+ puts "Sending: " + s
+ return s
+ end
+
+ def initialize(host=nil, port=nil)
+ puts "initialize"
+ end
+
+ def write(w)
+ @@write_buffer << w
+ end
+
+ def written
+ @@write_buffer
+ end
+
+ def clear_write_buffer
+ @@write_buffer.clear
+ end
+
+end
+
+
+class AMIServerTest < Test::Unit::TestCase
+ def setup
+ @blah = Test::Unit::MockObject(TCPSocket).new
+ @tcp = RAI::TelegraphTCP.new
+ @srv = RAI::AMIServer.new
+ end
+
+ def test_mock_tcp
+ @tcp.set_recieved('Hi There')
+ assert_equal "Hi There\n\r", @tcp.gets
+
+ @tcp.set_recieved(['Hi There', 'Long time no talk'], false)
+ assert_equal 'Hi There', @tcp.gets
+ assert_equal 'Long time no talk', @tcp.gets
+
+ s = <<-EOL
+ line_1
+ line_2
+ line_3
+ EOL
+ puts s
+
+ @tcp.set_recieved(s)
+ assert_equal "line_1\n\r", @tcp.gets
+
+ @tcp.write("You there?")
+ assert @tcp.written.include?('You there?')
+
+
+ end
+
+ def test_connects
+ puts "test_connect"
+
+ s = <<-EOM
+ Asterisk Call Manager/1.0
+ Response: Success
+ ActionID: 1177582847.67069
+ Challenge: 18535068
+
+ Response: Success
+ ActionID: 1177582847.84917
+ Message: Authentication accepted
+
+ EOM
+
+ @tcp.set_recieved(s)
+ tcp2 = RAI::TelegraphTCP.new
+ assert_equal tcp2.gets, "Asterisk Call Manager/1.0\n\r"
+ puts "recieved"
+
+ @srv.connect
+
+# puts "connect"
+# assert_written 'Action: challenge'
+# assert_written 'Action: login'
+ end
+
+
+ private
+ def assert_written(line)
+ assert @tcp.written.include?(line)
+ end
+end
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/rai_test.rb
Copied: freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/rai_test.rb (from rev 14471, freeswitch/trunk/contrib/jpalley/telegraph/trunk/test/rai_test.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/rai_test.rb (rev 0)
+++ freeswitch/branches/seven/contrib/jpalley/telegraph/trunk/test/rai_test.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+require 'test/unit'
+
+class RaiTest < Test::Unit::TestCase
+ # Replace this with your real tests.
+ def test_this_plugin
+ flunk
+ end
+end
Copied: freeswitch/branches/seven/contrib/jtregunna (from rev 14471, freeswitch/trunk/contrib/jtregunna)
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms)
Deleted: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/COPYING
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/COPYING (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms/COPYING) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/COPYING (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/COPYING 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+Copyright (c) 2006-2008 Hampton Catlin
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/Makefile
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/Makefile (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+BASE=../../../..
+WANT_CURL=yes
+include $(BASE)/build/modmake.rules
Deleted: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/README
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/README (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/README (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+mod_fastsms
+Copyright (c) 2009, Jeremy Tregunna, All Rights Reserved.
+
+What is it?
+
+mod_fastsms is a FreeSWITCH module that can be used to send Short Message Service (SMS)
+text messages via the FastSMS web service.
+
+Configuration
+
+A template fastsms.conf.xml is included, you will need to edit the auth tag to put in
+the information you get from the FastSMS service.
+
+As far as your dialplan goes, you can add something like this:
+
+<extension name="fastsms">
+ <condition field="destination_number" expression="^1200$">
+ <action application="fastsms" data="15145551212 Limit this bit of text to 160 characters. It's your message."/>
+ </condition>
+</extension>
+
+You can optionally define an originator (who the message appears to come from), in your
+directory, add this line:
+ <variable name="fastsms_originator" value="Mr. Bob's Server"/>
+
+and reloadxml.
+
+That's about it! Just copy the fastsms.conf.xml to your conf/autoload_configs and make
+the changes appropriately, copy this directory to freeswitch/src/mod/applications/mod_fastsms
+edit freeswitch/modules.conf and add a line "applications/mod_fastsms" then rebuild
+FreeSWITCH.
+
+Should you encounter problems, either drop me a line at jeremy.tregunna@me.com.
Deleted: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/fastsms.conf.xml
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/fastsms.conf.xml (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms/fastsms.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/fastsms.conf.xml (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/fastsms.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,5 @@
+<configuration name="fastsms.conf" description="fastsms">
+ <settings>
+ <auth companyid="XXX" userid="YYY" password="ZZZ"/>
+ </settings>
+</configuration>
Deleted: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/mod_fastsms.c
Copied: freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/mod_fastsms.c (from rev 14471, freeswitch/trunk/contrib/jtregunna/mod_fastsms/mod_fastsms.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/mod_fastsms.c (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/mod_fastsms/mod_fastsms.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,147 @@
+/*
+ * Interface to the FastSMS message service.
+ * Copyright (c) 2009, Jeremy Tregunna, All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ */
+#include <switch.h>
+#include <curl/curl.h>
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fastsms_shutdown);
+SWITCH_MODULE_RUNTIME_FUNCTION(mod_fastsms_runtime);
+SWITCH_MODULE_LOAD_FUNCTION(mod_fastsms_load);
+SWITCH_MODULE_DEFINITION(mod_fastsms, mod_fastsms_load, mod_fastsms_shutdown, NULL);
+
+static char* companyid;
+static char* userid;
+static char* password;
+static CURL* curl;
+
+static switch_status_t do_config(switch_bool_t reload)
+{
+ switch_xml_t cfg, xml, settings, auth;
+
+ if (!(xml = switch_xml_open_cfg("fastsms.conf", &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Could not open fastsms.conf\n");
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if ((settings = switch_xml_child(cfg, "settings"))) {
+ auth = switch_xml_child(settings, "auth");
+ companyid = strdup(switch_xml_attr_soft(auth, "companyid"));
+ userid = strdup(switch_xml_attr_soft(auth, "userid"));
+ password = strdup(switch_xml_attr_soft(auth, "password"));
+ }
+
+ if (xml)
+ switch_xml_free(xml);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t fastsms_send_msg(switch_core_session_t* session, const char* msisdn, const char* text, const char* originator)
+{
+ char* params;
+ int error;
+ long response = 0;
+
+ if (originator) {
+ asprintf(¶ms, "CompanyId=%s&UserId=%s&Password=%s&Msisdn=%s&MessageText=%s&OasText=%s", companyid,
+ userid, password, msisdn, text, originator);
+ } else {
+ asprintf(¶ms, "CompanyId=%s&UserId=%s&Password=%s&Msisdn=%s&MessageText=%s", companyid, userid,
+ password, msisdn, text);
+ }
+
+ curl_easy_setopt(curl, CURLOPT_URL, "https://secure.bayhamsystems.com/mfi/sendMessage");
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, params);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
+ if ((error = curl_easy_perform(curl)) != CURLE_OK)
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "FastSMS Error: %s\n", curl_easy_strerror(error));
+ curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &response);
+ free(params);
+
+ switch (response) {
+ case 200:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "SMS message sent.\n");
+ return SWITCH_STATUS_SUCCESS;
+ break;
+ case 403:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error: Forbidden.\n");
+ break;
+ default:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "FastSMS Error: Response code %ld\n", response);
+ break;
+ }
+
+ return SWITCH_STATUS_FALSE;
+}
+
+#define FASTSMS_DESC "FastSMS SMS Message Service"
+#define FASTSMS_USAGE "<number> <text message>"
+
+SWITCH_STANDARD_APP(fastsms_function)
+{
+ switch_channel_t* channel = switch_core_session_get_channel(session);
+ char* msisdn = NULL;
+ char* text = NULL;
+ const char* originator = switch_channel_get_variable(channel, "fastsms_originator");
+
+ if (!switch_strlen_zero(data)) {
+ msisdn = switch_core_session_strdup(session, data);
+ text = strchr(msisdn, ' ');
+ if (text)
+ *text++ = '\0';
+ fastsms_send_msg(session, msisdn, text, originator);
+ }
+}
+
+SWITCH_STANDARD_API(fastsms_api_function)
+{
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Reloading FastSMS configuration file.\n");
+ do_config(SWITCH_TRUE);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_fastsms_load)
+{
+ switch_status_t status;
+ switch_application_interface_t *app_interface;
+ switch_api_interface_t *api_interface;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "FastSMS module loaded.\n");
+
+ if ((status = do_config(SWITCH_FALSE)) != SWITCH_STATUS_SUCCESS) {
+ return status;
+ }
+
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+ curl = curl_easy_init();
+
+ SWITCH_ADD_API(api_interface, "fastsms_api", "fastsms_api", fastsms_api_function, "syntax");
+ SWITCH_ADD_APP(app_interface, "fastsms", "fastsms", FASTSMS_DESC, fastsms_function, FASTSMS_USAGE, SAF_NONE);
+
+ /* indicate that the module should continue to be loaded */
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fastsms_shutdown)
+{
+ curl_easy_cleanup(curl);
+ free(companyid);
+ free(userid);
+ free(password);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4
+ */
Deleted: freeswitch/branches/seven/contrib/jtregunna/weather.js
Copied: freeswitch/branches/seven/contrib/jtregunna/weather.js (from rev 14471, freeswitch/trunk/contrib/jtregunna/weather.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/jtregunna/weather.js (rev 0)
+++ freeswitch/branches/seven/contrib/jtregunna/weather.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,123 @@
+/*
+ * Weather application
+ * Copyright (c) 2009, Jeremy Tregunna, All Rights Reserved.
+ * Redistributable under any terms you like!
+ *
+ * Uses the Yahoo! Weather forecasting engine. http://weather.yahoo.com/
+ *
+ * Makes use of mod_flite, should be easy to adapt to any other TTS engine.
+ */
+var yweather = new Namespace("http://xml.weather.yahoo.com/ns/rss/1.0");
+
+var rssFile = "/usr/local/freeswitch/rss/weather.rss";
+var currentConditions = "Unknown";
+var highTemperature = lowTemperature = currentTemperature = "0";
+var doc = null;
+
+// XXX: Big and nasty, but the values Yahoo! Weather's RSS feed gives out for "text" attributes on yweather:condition
+// really don't fit in well with any method of saying things. That is, "You can expect <foo> conditions" works for
+// most cases, but falls down or reads weird, when things like "tornado conditions" are inserted into <foo>. If you
+// don't mind that awkwardness, you can get rid of the conditions object, and just change the code in sayWeather()
+// replacing occurences of @code with @text, of course, first removing the conditions[...] that surround fc.@code.
+var conditions = new Object();
+conditions[0] = "a tornado";
+conditions[1] = "tropical storm conditions";
+conditions[2] = "hurricane conditions";
+conditions[3] = "severe thunderstorms";
+conditions[4] = "thunderstorms";
+conditions[5] = "mixture of rain and snow";
+conditions[6] = "mixture of rain and sleet";
+conditions[7] = "mixture of snow and sleet";
+conditions[8] = "freezing drizzle";
+conditions[9] = "some drizzle";
+conditions[10] = "freezing rain";
+conditions[11] = "rain showers";
+conditions[12] = "light rain showers";
+conditions[13] = "snow flurries";
+conditions[14] = "light snow";
+conditions[15] = "blowing snow";
+conditions[16] = "snow";
+conditions[17] = "periods of hail";
+conditions[18] = "sleet";
+conditions[19] = "dusty conditions";
+conditions[20] = "foggy conditions";
+conditions[21] = "hazy conditions";
+conditions[22] = "smokey conditions";
+conditions[23] = "high winds";
+conditions[24] = "windy";
+conditions[25] = "cold conditions";
+conditions[26] = "overcast conditions";
+conditions[27] = "mostly cloudy conditions"; // Night time
+conditions[28] = "mostly cloudy conditions"; // Day time
+conditions[29] = "partly cloudy conditions"; // Night time
+conditions[30] = "partly cloudy conditions"; // Day time
+conditions[31] = "clear conditions"; // Night time
+conditions[32] = "sunny conditions"; // Day time
+conditions[33] = "fair conditions"; // Night time
+conditions[34] = "fair conditions"; // Day time
+conditions[35] = "periods of mixed rain and hail";
+conditions[36] = "hot conditions";
+conditions[37] = "isolated thunderstorms";
+conditions[38] = "scattered thunderstorms";
+conditions[39] = "scattered thunderstorms";
+conditions[40] = "scattered showers";
+conditions[41] = "heavy snow";
+conditions[42] = "scattered snow flurries";
+conditions[43] = "heavy snow";
+conditions[44] = "partly cloudy conditions";
+conditions[45] = "thundershowers";
+conditions[46] = "snow flurries";
+conditions[47] = "isolated thunderstorms";
+conditions[3200] = "conditions are not available at this time";
+
+/********** Say something **********/
+say = function(something) {
+ session.speak("flite", "rms", something);
+}
+
+/********** Load the XML **********/
+loadXML = function(url) {
+ fetchURLFile(url, rssFile);
+ var fd = new FileIO(rssFile, "r");
+ fd.read(3072);
+ // Need to strip out the <?xml ...?> tag otherwise we get a syntax error, silly E4X
+ doc = new XML(fd.data().replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""));
+}
+
+/********** Say the weather **********/
+sayWeather = function() {
+ var currentCondition = doc.channel.item.yweather::condition.@text;
+ var currentTemperature = doc.channel.item.yweather::condition.@temp;
+ var firstLoop = true;
+ var forecast = "The current conditions are: ";
+ forecast += conditions[doc.channel.item.yweather::condition.@code];
+ forecast += " and it is " + currentTemperature + " degree" + ((currentTemperature != 1) ? "s" : "") + " out.\n";
+ for each(var fc in doc.channel.item.yweather::forecast) {
+ // XXX: Figure out why day.replace("Sun", "Sunday") et. al., doesn't actually replace the date when used here
+ // but when using the "js" spidermonkey executable, it does.
+ var day = fc.@day;
+ if (day == "Sun")
+ day = "Sunday";
+ else if (day == "Mon")
+ day = "Monday";
+ else if (day == "Tue")
+ day = "Tuesday";
+ else if (day == "Wed")
+ day = "Wednesday";
+ else if (day == "Thu")
+ day = "Thursday";
+ else if (day == "Fri")
+ day = "Friday";
+ else if (day == "Sat")
+ day = "Saturday";
+ forecast += day + "'s forecast calls for " + conditions[fc.@code] + ", with a daytime high of ";
+ forecast += fc.@high + " degree" + ((fc.@high != 1) ? "s" : "") + " and a low of " + fc.@low + " degree" + ((fc.@low != 1) ? "s" : "") + ".\n";
+ }
+ say(forecast);
+}
+
+if (session.ready()) {
+ session.answer();
+ loadXML("http://weather.yahooapis.com/forecastrss?p=CAXX0531&u=c");
+ sayWeather();
+}
Copied: freeswitch/branches/seven/contrib/jwehle (from rev 14471, freeswitch/trunk/contrib/jwehle)
Copied: freeswitch/branches/seven/contrib/jwehle/gs_phonebook (from rev 14471, freeswitch/trunk/contrib/jwehle/gs_phonebook)
Deleted: freeswitch/branches/seven/contrib/jwehle/gs_phonebook/README
Copied: freeswitch/branches/seven/contrib/jwehle/gs_phonebook/README (from rev 14471, freeswitch/trunk/contrib/jwehle/gs_phonebook/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/gs_phonebook/README (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/gs_phonebook/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+This directory contains software for outputting a phonebook
+suitable for download to a Grandstream phone. It is generated
+at startup and updated whenever a reloadxml occurs.
+
+gs_phonebook.lua goes into the FreeSWITCH scripts directory.
+
+Configuration fragments look something like:
+
+ conf/autoload_configs/lua.conf.xml
+
+ <param name="startup-script" value="gs_phonebook.lua"/>
+
+ Grandstream
+
+ Phonebook XML Download: YES, TFTP
+ Phonebook XML Server Path: <IP address of freeswitch server>
+ Phonebook Download Interval: <desired interval ... e.g. 240>
+
+and assumes that a tftp server has been configured. Obviously
+other arrangements can be used (e.g. http).
+
+The script uses LuaXml which is available from:
+
+ http://www.viremo.de/LuaXML/
+
+typical installation has:
+
+ /usr/local/lib/lua/5.1/LuaXML_lib.so
+ /usr/local/share/lua/5.1/LuaXml.lua
+
+Tested using FreeSWITCH SVN 13988 running on FreeBSD 6.4.
Deleted: freeswitch/branches/seven/contrib/jwehle/gs_phonebook/gs_phonebook.lua
Copied: freeswitch/branches/seven/contrib/jwehle/gs_phonebook/gs_phonebook.lua (from rev 14471, freeswitch/trunk/contrib/jwehle/gs_phonebook/gs_phonebook.lua) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/gs_phonebook/gs_phonebook.lua (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/gs_phonebook/gs_phonebook.lua 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,132 @@
+--[[
+ * File: gs_phonebook.lua
+ * Purpose: Generate a downloadable phonebook for Grandstream phones.
+ * Machine: OS:
+ * Author: John Wehle Date: June 25, 2009
+ ]]--
+
+--[[
+ * Copyright (c) 2009 Feith Systems and Software, Inc.
+ * All Rights Reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ]]--
+
+
+require('LuaXml')
+
+
+-- RE to control which extensions are published
+local extRE = "^10[0-9][0-9]$"
+
+local gs_phonebook = "/tftpboot/gs_phonebook.xml"
+local maxEntries = 100
+
+
+function generate_phonebook ()
+
+ local api = freeswitch.API ()
+
+ local domain = api:execute ("global_getvar", "domain")
+
+ local dir = api:execute ("xml_locate", "directory domain name " .. domain)
+ local tdir = xml.eval (dir)
+
+ local tuser = xml.find (xml.find (xml.find (tdir,
+ "groups"), "group"), "users")
+
+ local i
+ local k1
+ local v1
+ local name
+ local fname
+ local lname
+ local number
+
+ local fd = io.open (gs_phonebook .. ".new", "w+")
+
+ io.output (fd)
+
+ io.write ("<?xml version=\"1.0\"?>\n<AddressBook>\n")
+
+ i = 0
+
+ for k1, v1 in pairs (tuser) do
+ if type (v1) == "table" and v1[xml.TAG] == "user" then
+ name = xml.find (v1, "variable", "name", "effective_caller_id_name")
+ number = xml.find (v1, "variable", "name", "effective_caller_id_number")
+ if name ~= nil and number ~= nil
+ and string.find (number["value"], extRE) ~= nil then
+
+ string.gsub (name["value"], "^[A-Za-z0-9]+",
+ function (w) fname = w end, 1)
+
+ string.gsub (name["value"], "[A-Za-z0-9]+$",
+ function (w) lname = w end, 1)
+
+ io.write (" <Contact>\n")
+ io.write (string.format (" <LastName>%s</LastName>\n", lname))
+ io.write (string.format (" <FirstName>%s</FirstName>\n", fname))
+ io.write (" <Phone>\n")
+ io.write (string.format (" <phonenumber>%s</phonenumber>\n",
+ number["value"]))
+ io.write (" <accountindex>0</accountindex>\n")
+ io.write (" </Phone>\n")
+ io.write (" </Contact>\n")
+
+ i = i + 1
+
+ if i >= maxEntries then
+ break
+ end
+ end
+ end
+ end
+
+ io.write ("</AddressBook>\n")
+
+ io.close (fd)
+
+ os.execute ("/bin/chmod 444 " .. gs_phonebook .. ".new")
+
+ os.rename (gs_phonebook .. ".new", gs_phonebook)
+end
+
+
+-- Refresh the phonebook on startup
+generate_phonebook ()
+
+-- and whenever the configuration changes
+local con = freeswitch.EventConsumer ("reloadxml")
+
+while con:pop(1) do
+ generate_phonebook ()
+end
+
+return
Copied: freeswitch/branches/seven/contrib/jwehle/system25 (from rev 14471, freeswitch/trunk/contrib/jwehle/system25)
Copied: freeswitch/branches/seven/contrib/jwehle/system25/park (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/park)
Deleted: freeswitch/branches/seven/contrib/jwehle/system25/park/README
Copied: freeswitch/branches/seven/contrib/jwehle/system25/park/README (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/park/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/system25/park/README (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/system25/park/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,72 @@
+This directory contains software for configuring FreeSWITCH
+to provide AT&T (aka Lucent aka Avaya) System 25 PBX compatible
+park and pickup park functions. Specifically:
+
+ a) Putting a call on hold and then dialing *5 will park the
+ call on your phone.
+
+ b) Dialing *8 followed by an extension will pickup a call parked
+ on that extension.
+
+as a bonus:
+
+ c) Doing a blind transfer of a call to *5 will park the call
+ on your phone.
+
+ d) Doing a blind transfer of a call to *5 followed by an extension
+ will park the call on that extension.
+
+ e) Dialing *8 without an extension will prompt for an extension.
+
+s25park.js goes into the FreeSWITCH scripts directory.
+
+Configuration fragments look something like:
+
+ conf/dialplan/default.xml
+
+ <extension name="system25_park">
+ <condition field="source" expression="mod_sofia"/>
+ <condition field="destination_number" expression="^\*5$"/>
+ <condition field="${sip_h_Referred-By}" expression="^<sip:([0-9]{4})@.*$">
+ <action application="transfer" data="*5$1"/>
+ <anti-action application="javascript" data="s25park.js"/>
+ </condition>
+ </extension>
+
+ <extension name="system25_park_on_extension">
+ <condition field="destination_number" expression="^\*5([0-9]{4})$">
+ <action application="set" data="fifo_music=$${hold_music}"/>
+ <action application="set" data="fifo_orbit_exten=$1:120"/>
+ <action application="fifo" data="$1@$${domain} in"/>
+ </condition>
+ </extension>
+
+ <extension name="system25_pickup">
+ <condition field="destination_number" expression="^\*8$">
+ <action application="answer"/>
+ <action application="sleep" data="1"/>
+ <action application="read" data="3 5 $${base_dir}/sounds/en/us/callie/ivr/8000/ivr-enter_ext.wav ext 1000 #"/>
+ <action application="transfer" data="*8${ext}"/>
+ </condition>
+ </extension>
+
+ <extension name="system25_pickup_from_extension">
+ <condition field="destination_number" expression="^\*8[0-9]{3,4}$"/>
+ <condition field="destination_number" expression="^\*8([0-9]{4})$">
+ <action application="fifo" data="$1@$${domain} out nowait"/>
+ <anti-action application="bridge" data="openzap/5/a/${destination_number}"/>
+ </condition>
+ </extension>
+
+The system25 park and pickup dialplan patterns are designed
+to only consider four digit extensions for local parking.
+"system25_pickup_from_extension" recognizes three digit
+extensions as being parked on a foreign PBX ... modify
+as appropriate for your installation.
+
+Be aware that the default dialplan contains an extension
+called "group-intercept" which needs to be commented out
+in order for "system25_pickup" to work since they both
+match *8.
+
+Tested using FreeSWITCH SVN 13769 running on FreeBSD 6.4.
Deleted: freeswitch/branches/seven/contrib/jwehle/system25/park/s25park.js
Copied: freeswitch/branches/seven/contrib/jwehle/system25/park/s25park.js (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/park/s25park.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/system25/park/s25park.js (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/system25/park/s25park.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,178 @@
+/*
+ * File: s25park.js
+ * Purpose: Implement AT&T System 25 PBX style parking.
+ * Machine: OS:
+ * Author: John Wehle Date: June 9, 2009
+ */
+
+/*
+ * Copyright (c) 2009 Feith Systems and Software, Inc.
+ * All Rights Reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/* RE to sanity check that the caller id is a valid extension */
+var extRE = /^[0-9]{3,4}$/g;
+
+
+var dtmf_digits;
+
+function on_dtmf (session, type, obj, arg)
+ {
+
+ if (type == "dtmf") {
+ dtmf_digits += obj.digit;
+ return false;
+ }
+
+ return true;
+ }
+
+
+function normalize_channel_name (name, direction, ip_addr)
+ {
+ var re = /^sofia\//g;
+ var length = name.search (re);
+ var new_name = name;
+
+ if (length == -1)
+ return new_name;
+
+ if (direction == "inbound") {
+ re = /@.*$/g;
+
+ new_name = name.replace (re, "@" + ip_addr);
+ }
+ else if (direction == "outbound") {
+ re = /\/sip:(.*@[^:]*):.*$/g;
+
+ new_name = name.replace (re, "/$1");
+ }
+
+ return new_name;
+ }
+
+
+session.answer ();
+
+session.execute ("sleep", "1000");
+
+/*
+ * Figure out the normalized form of the requester's channel name.
+ */
+
+var requester_channel_name = normalize_channel_name (
+ session.getVariable ("channel_name"), "inbound",
+ session.getVariable ("network_addr"));
+
+/*
+ * Find the uuid for a call on the requester's phone.
+ */
+
+var channels = apiExecute ("show", "channels as xml");
+var re = /\s+$/g;
+var length = channels.search (re);
+
+if (length == -1)
+ length = channels.length;
+
+channels = channels.substring (0, length);
+
+var xchannels = new XML (channels);
+var our_uuid = session.getVariable ("uuid");
+var requester_uuid = "";
+
+for each (var channel in xchannels.row) {
+ if (channel.uuid.toString () == our_uuid)
+ continue;
+
+ var channel_name = normalize_channel_name (channel.name.toString (),
+ channel.direction.toString (), channel.ip_addr.toString ());
+
+ if (channel_name == requester_channel_name) {
+ requester_uuid = channel.uuid.toString ();
+ break;
+ }
+ }
+
+if (requester_uuid == "") {
+ session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, "");
+ session.hangup ();
+ exit ();
+ }
+
+/*
+ * Find the peer uuid.
+ */
+
+var udump = apiExecute ("uuid_dump", requester_uuid + " xml");
+var re = /\s+$/g;
+var length = udump.search (re);
+
+if (length == -1)
+ length = udump.length;
+
+udump = udump.substring (0, length);
+
+var xudump = new XML (udump);
+var uuid = xudump.headers['Other-Leg-Unique-ID'].toString ();
+
+if (uuid == "") {
+ session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, "");
+ session.hangup ();
+ exit ();
+ }
+
+var requester_id_number = session.getVariable ("caller_id_number");
+
+if (requester_id_number.search (extRE) == -1) {
+ session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, "");
+ session.hangup ();
+ exit ();
+ }
+
+apiExecute ("uuid_setvar", uuid + " hangup_after_bridge false");
+apiExecute ("uuid_transfer", uuid + " *5" + requester_id_number + " XML default");
+
+/*
+ * Provide confirmation beeps followed by some silence.
+ */
+
+var confirmation = "tone_stream://L=3;%(100,100,350,440)";
+
+session.execute ("playback", confirmation);
+
+var i;
+
+for (i = 0; session.ready () && i < 100; i++)
+ session.execute("sleep", "100");
+
+exit ();
Copied: freeswitch/branches/seven/contrib/jwehle/system25/vmail (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/vmail)
Deleted: freeswitch/branches/seven/contrib/jwehle/system25/vmail/README
Copied: freeswitch/branches/seven/contrib/jwehle/system25/vmail/README (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/vmail/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/system25/vmail/README (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/system25/vmail/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+This directory contains software used for interfacing the
+FreeSWITCH voicemail application with the AT&T (aka Lucent
+aka Avaya) System 25 PBX. It's possible that System 75
+and Definity PBXs may also work.
+
+s25vmail.js goes into the FreeSWITCH scripts directory.
+s25vmail_mwi.c should be compiled and the resulting binary
+put into the FreeSWITCH bin directory. Modify the FreeSWITCH
+rc.d script to also start / stop s25vmail_mwi.
+
+Configuration fragments look something like:
+
+ conf/openzap.conf:
+
+ [span zt]
+ ; A204DX
+ name => OpenZAP
+ dtmf_hangup = ##99
+
+ number => 551
+ fxo-channel => 49
+
+ number => 552
+ fxo-channel => 50
+
+ number => 553
+ fxo-channel => 51
+
+ number => 554
+ fxo-channel => 52
+
+ conf/dialplan/default.xml
+
+ <extension name="system25_vmail">
+ <condition field="destination_number" expression="^(55[1-4])$">
+ <action application="javascript" data="s25vmail.js"/>
+ </condition>
+ </extension>
+
+Tested using FreeSWITCH SVN 10428 running on FreeBSD 6.3
+with a Sangoma A200DX Analog Series w/ Echo Cancellation
+ports card containing 2 FXO modules.
+
+Note that the PBX is * very * sensitive to how long it takes
+for the line to be hung up after it sends the DTMF hangup
+command. Failure to apply the following patch will cause
+the PBX to occasionally believe that some vmail lines were
+off hook for too long and are therfore out of service.
+
+Index: src/zap_io.c
+===================================================================
+--- src/zap_io.c (revision 745)
++++ src/zap_io.c (working copy)
+@@ -1728,7 +1728,8 @@
+ zchan->dtmf_hangup_buf[zchan->span->dtmf_hangup_len - 1] = *p;
+ if (!strcmp(zchan->dtmf_hangup_buf, zchan->span->dtmf_hangup)) {
+ zap_log(ZAP_LOG_DEBUG, "DTMF hangup detected.\n");
+- zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_HANGUP);
++ zchan->caller_data.hangup_cause = ZAP_CAUSE_NORMAL_CLEARING;
++ zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_DOWN);
+ break;
+ }
+ }
Deleted: freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail.js
Copied: freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail.js (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/vmail/s25vmail.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail.js (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,236 @@
+/*
+ * File: s25vmail.js
+ * Purpose: Invoke voicemail based on AT&T System 25 PBX voicemail mode codes
+ * Machine: OS:
+ * Author: John Wehle Date: June 24, 2008
+ *
+ * The message waiting indicator is handled by a separate program.
+ */
+
+/*
+ * Copyright (c) 2008 Feith Systems and Software, Inc.
+ * All Rights Reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+var id_digits_required = 3;
+
+var digitTimeOut = 3000;
+var interDigitTimeOut = 1000;
+var absoluteTimeOut = 10000;
+
+
+var dtmf_digits = "";
+
+function on_dtmf (session, type, obj, arg)
+ {
+
+ if (type == "dtmf") {
+ dtmf_digits += obj.digit;
+ }
+
+ return true;
+ }
+
+
+function prompt_for_id ()
+ {
+ var dto;
+ var id;
+ var index;
+ var repeat;
+
+ dtmf_digits = "";
+ id = "";
+ repeat = 0;
+
+ while (session.ready () && repeat < 3) {
+ session.flushDigits ();
+
+ /* play phrase - if digit keyed while playing callback will catch them*/
+ session.sayPhrase ("voicemail_enter_id", "#", "", on_dtmf, "");
+
+ if (! session.ready ())
+ return "";
+
+ id = dtmf_digits;
+
+ if (id.indexOf ('#') == -1) {
+ dto = digitTimeOut;
+ if (dtmf_digits.length != 0)
+ dto = interDigitTimeOut;
+ dtmf_digits = session.getDigits (5, '#', dto,
+ interDigitTimeOut, absoluteTimeOut);
+ id += dtmf_digits;
+ id += '#';
+ }
+
+ /* a valid id must meet the minimum length requirements */
+ if ((index = id.indexOf ('#')) >= id_digits_required) {
+ id = id.substring (0,index);
+ break;
+ }
+
+ dtmf_digits = "";
+ id = "";
+ repeat++;
+ }
+
+ return id;
+ }
+
+
+var start = "";
+var mode = "";
+var from = "";
+var to = "";
+
+var domain = session.getVariable ("domain");
+
+session.answer ();
+
+start = session.getDigits (1, '', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+
+if (start != "#") {
+ var destination_number = session.getVariable ("destination_number");
+
+ console_log ("err", destination_number + " received an invalid VMAIL start code from PBX\n");
+ if (session.ready ())
+ session.sayPhrase ("voicemail_goodbye", "#", "", on_dtmf, "");
+ else
+ console_log ("err", "Possibly due to early hangup from PBX\n");
+ session.hangup ();
+ exit();
+ }
+
+mode = session.getDigits (5, '#', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+
+from = session.getDigits (5, '#', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+
+to = session.getDigits (5, '#', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+
+session.execute("sleep", "1000");
+
+// Verify that the proper parameters are present
+switch (mode) {
+
+ // Direct Inside Access
+ case "00":
+ if (isNaN (parseInt (from, 10))) {
+ console_log ("err", "Invalid VMAIL calling PDC from PBX\n");
+ break;
+ }
+
+ session.setVariable ("voicemail_authorized", "false");
+ session.execute ("voicemail", "check default " + domain + " " + from);
+ break;
+
+ // Direct Dial Access
+ case "01":
+ from = prompt_for_id ();
+
+ if (! session.ready ()) {
+ session.hangup ();
+ exit();
+ }
+
+ if (isNaN (parseInt (from, 10))) {
+ console_log ("err", "Invalid VMAIL mailbox from caller\n");
+ break;
+ }
+
+ session.setVariable ("voicemail_authorized", "false");
+ session.execute ("voicemail", "check default " + domain + " " + from);
+ break;
+
+ // Coverage - caller is inside
+ case "02":
+ if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) {
+ console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n");
+ break;
+ }
+
+ session.setVariable ("effective_caller_id_name", "inside caller");
+ session.setVariable ("effective_caller_id_number", from);
+
+ session.execute ("voicemail", "default " + domain + " " + to);
+ break;
+
+ // Coverage - caller is dial
+ case "03":
+ if (isNaN (parseInt (to, 10))) {
+ console_log ("err", "Invalid VMAIL called PDC from PBX\n");
+ break;
+ }
+
+ session.setVariable ("effective_caller_id_name", "outside caller");
+ session.setVariable ("effective_caller_id_number", "Unknown");
+
+ session.execute ("voicemail", "default " + domain + " " + to);
+ break;
+
+ // Coverage - not yet defined
+ case "04":
+ break;
+
+ // Leave Word Calling
+ case "05":
+ if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) {
+ console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n");
+ break;
+ }
+ break;
+
+ // Refresh MW lamps
+ case "06":
+ break;
+
+ // Voice Port failed to answer
+ case "08":
+ if (isNaN (parseInt (to, 10))) {
+ console_log ("err", "Invalid VMAIL PDC from PBX\n");
+ break;
+ }
+
+ console_log ("err", "PBX reports problem with VMAIL PDC " + to + "\n");
+ break;
+
+ // Unknown
+ default:
+ console_log ("err", "Invalid VMAIL mode code from PBX\n");
+ break;
+ }
+
+exit();
Deleted: freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail_mwi.c
Copied: freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail_mwi.c (from rev 14471, freeswitch/trunk/contrib/jwehle/system25/vmail/s25vmail_mwi.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail_mwi.c (rev 0)
+++ freeswitch/branches/seven/contrib/jwehle/system25/vmail/s25vmail_mwi.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,983 @@
+/*
+ * File: s25vmail_mwi.c
+ * Purpose: Send AT&T System 25 PBX MWI DTMF based on MWI events
+ * Machine: OS:
+ * Author: John Wehle Date: July 24, 2008
+ *
+ * Tested using a Zyxel U90e configured using:
+ *
+ * at OK at&f OK at&d3&y2q2 OK ats0=0s2=255s15.7=0s18=4s35.1=0 OK
+ * ats38.3=1s42.3=1s42.6=1 OK atl0 OK at&w OK at&v
+ *
+ * though just about any modem should work. Preferred settings are
+ *
+ * DTR OFF causes hangup and reset from profile 0
+ * RTS / CTS flow control
+ * allow abort during modem handshake
+ * auto answer off
+ * ring message off
+ */
+
+/*
+ * Copyright (c) 2008 Feith Systems and Software, Inc.
+ * All Rights Reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <memory.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <termios.h>
+
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <sys/param.h>
+#include <unistd.h>
+
+
+#define LOGFILE "/var/log/s25vmail_mwi.log"
+
+
+static const char *MyName = "s25vmail_mwi";
+
+static int daimon = 0;
+static int error_msg_throttle = 0;
+static volatile int shutdown_server = 0;
+
+
+static void
+debugmsg (const char *fmt, ...)
+ {
+ char message[256];
+ va_list args;
+
+ if (daimon)
+ return;
+
+ va_start (args, fmt);
+ vsprintf (message, fmt, args);
+ va_end (args);
+
+ fprintf (stderr, "%s: %s", MyName, message);
+ if ( !strchr (message, '\n'))
+ fprintf (stderr, "\n");
+ fflush (stderr);
+ }
+
+
+static void
+errmsg (const char *fmt, ...)
+ {
+ char time_stamp[256];
+ struct tm *tmp;
+ time_t now;
+ va_list args;
+
+ if (! daimon) {
+ fprintf (stderr, "%s: ", MyName);
+
+ va_start (args, fmt);
+ vfprintf (stderr, fmt, args);
+ va_end (args);
+
+ if (! strchr (fmt, '\n'))
+ fputc ('\n', stderr);
+
+ fflush (stderr);
+ return;
+ }
+
+ if (error_msg_throttle)
+ return;
+
+ time (&now);
+
+ if ( !(tmp = localtime (&now)) ) {
+ fprintf (stderr, "%s: errmsg -- localtime failed.\n", MyName);
+ perror (MyName);
+ fflush (stderr);
+ return;
+ }
+
+ strftime (time_stamp, sizeof (time_stamp), "%b %d %H:%M:%S", tmp);
+ fprintf (stderr, "%s %s[%d]: ", time_stamp, MyName, (int)getpid ());
+
+ va_start (args, fmt);
+ vfprintf (stderr, fmt, args);
+ va_end (args);
+
+ if (! strchr (fmt, '\n'))
+ fputc ('\n', stderr);
+
+ fflush (stderr);
+ }
+
+
+static void
+catch_signal ()
+ {
+
+ shutdown_server = 1;
+ }
+
+
+static void
+daemonize()
+ {
+
+#ifdef SIGTSTP
+ (void)signal(SIGTSTP, SIG_IGN);
+#endif
+#ifdef SIGTTIN
+ (void)signal(SIGTTIN, SIG_IGN);
+#endif
+#ifdef SIGTTOU
+ (void)signal(SIGTTOU, SIG_IGN);
+#endif
+
+ switch (fork ()) {
+ case 0:
+ break;
+
+ case -1:
+ fprintf (stderr, "%s: daemonize -- fork failed.", MyName);
+ perror (MyName);
+ exit (1);
+ /* NOTREACHED */
+ break;
+
+ default:
+ exit (0);
+ /* NOTREACHED */
+ break;
+ }
+
+ setsid();
+
+ close (0);
+ close (1);
+ close (2);
+
+ (void)open ("/dev/null", O_RDWR);
+ (void)open ("/dev/null", O_RDWR);
+ (void)open (LOGFILE, O_WRONLY | O_APPEND | O_CREAT, 0644);
+
+ daimon = 1;
+ }
+
+
+static void
+install_signal_handlers ()
+ {
+ struct sigaction act;
+
+ memset (&act, '\0', sizeof (act));
+
+ act.sa_handler = catch_signal;
+ sigemptyset (&act.sa_mask);
+ act.sa_flags = 0;
+
+ if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
+ sigaction (SIGHUP, &act, NULL);
+ if (signal (SIGINT, SIG_IGN) != SIG_IGN)
+ sigaction (SIGINT, &act, NULL);
+ (void)sigaction (SIGTERM, &act, NULL);
+ }
+
+
+static int
+connect_to_service (const char *hostname, const char *port)
+ {
+ int sock;
+ struct hostent *hp;
+ struct in_addr address;
+ struct servent *servp;
+ struct sockaddr_in sin;
+
+ if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
+ char *errstr = strerror (errno);
+
+ errmsg ("socket failed\n");
+ errmsg (errstr);
+ return -1;
+ }
+
+ memset (&sin, 0, sizeof (sin));
+
+ if (isalpha (hostname[0])) {
+ if ( !(hp = gethostbyname (hostname))) {
+ char *errstr = strerror (errno);
+
+ errmsg ("gethostbyname failed\n");
+ errmsg (errstr);
+ close (sock);
+ return -1;
+ }
+ if (hp->h_addrtype != AF_INET) {
+ errmsg ("gethostbyname returned unsupported family\n");
+ close (sock);
+ return -1;
+ }
+ memcpy (&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
+ }
+ else {
+ address.s_addr = inet_addr (hostname);
+
+ if ((long)address.s_addr == -1) {
+ char *errstr = strerror (errno);
+
+ errmsg ("inet_addr failed\n");
+ errmsg (errstr);
+ close (sock);
+ return -1;
+ }
+ sin.sin_addr.s_addr = address.s_addr;
+ }
+
+ if (isalpha (*port)) {
+ if ( !(servp = getservbyname(port, "tcp"))) {
+ char *errstr = strerror (errno);
+
+ errmsg ("getservbyname failed\n");
+ errmsg (errstr);
+ close (sock);
+ return -1;
+ }
+ sin.sin_port = servp->s_port;
+ }
+ else
+ sin.sin_port = htons ((unsigned short)atoi (port));
+
+ sin.sin_family = AF_INET;
+
+ if (connect (sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
+ char *errstr = strerror (errno);
+
+ errmsg ("connect failed\n");
+ errmsg (errstr);
+ close (sock);
+ return -1;
+ }
+
+ debugmsg ("Connected to service\n");
+
+ return sock;
+ }
+
+
+static ssize_t
+read_line (int fd, char *buf, size_t buf_len)
+ {
+ size_t l;
+ ssize_t nbytes_read;
+
+ l = 0;
+
+ for ( ; ; ) {
+ nbytes_read = read (fd, &buf[l], 1);
+
+ if (nbytes_read < 0) {
+ char *errstr = strerror (errno);
+
+ errmsg ("read failed in middle of line\n");
+ errmsg (errstr);
+ return -1;
+ }
+
+ if (nbytes_read == 0) {
+ if (l)
+ errmsg ("EOF in middle of line\n");
+ return l ? -1 : 0;
+ }
+
+ if (buf[l] == '\n') {
+ while (l && buf[l - 1] == '\r')
+ l--;
+ buf[l++] = '\0';
+ break;
+ }
+
+ l++;
+
+ if (l == buf_len) {
+ errmsg ("line too long\n");
+ return -1;
+ }
+ }
+
+ return l;
+ }
+
+
+static int
+read_trailing_newline(int fd)
+ {
+ char c;
+ ssize_t nbytes_read;
+
+ nbytes_read = read (fd, &c, 1);
+
+ if (nbytes_read < 0) {
+ char *errstr = strerror (errno);
+
+ errmsg ("read failed in trailing newline\n");
+ errmsg (errstr);
+ return -1;
+ }
+
+ if (nbytes_read == 0) {
+ errmsg ("EOF in trailing newline\n");
+ return -1;
+ }
+
+ if (c != '\n') {
+ errmsg ("missing trailing newline\n");
+ return -1;
+ }
+
+ return 0;
+ }
+
+
+static char *
+retrieve_message (int fd)
+ {
+ char cl_buf[64];
+ char ct_buf[64];
+ char *h;
+ char *m;
+ ssize_t cl;
+ ssize_t nbytes_read;
+ size_t l;
+ size_t nbytes_to_read;
+
+ if (shutdown_server)
+ return NULL;
+
+ /*
+ * Read / parse Content-Length and Content-Type.
+ */
+
+ nbytes_read = read_line (fd, cl_buf, sizeof (cl_buf));
+
+ if (nbytes_read < 0) {
+ errmsg ("read_line failed\n");
+ return NULL;
+ }
+
+ if (nbytes_read == 0) {
+
+ /*
+ * EOF
+ */
+
+ return NULL;
+ }
+
+ nbytes_read = read_line (fd, ct_buf, sizeof (ct_buf));
+
+ if (nbytes_read < 0) {
+ errmsg ("read_line failed\n");
+ return NULL;
+ }
+
+ if (nbytes_read == 0) {
+ errmsg ("EOF in middle of headers\n");
+ return NULL;
+ }
+
+ h = "Content-Length: ";
+ l = strlen (h);
+
+ if (strncmp (cl_buf, h, l) != 0) {
+
+ /*
+ * If the message header doesn't being with Content-Length,
+ * then it needs to be a Content-Type we understand.
+ */
+
+ h = "Content-Type: ";
+ l = strlen (h);
+
+ if (strncmp (cl_buf, h, l) != 0) {
+ errmsg ("missing Content-Type\n");
+ return NULL;
+ }
+
+ if (strcmp (&cl_buf[l], "auth/request") != 0
+ && strcmp (&cl_buf[l], "command/reply") != 0) {
+ errmsg ("Unsupported Content-Type\n");
+ return NULL;
+ }
+
+ if (ct_buf[0])
+ if (read_trailing_newline (fd) < 0) {
+ return NULL;
+ }
+
+ m = malloc (strlen (cl_buf) + 1 + strlen (ct_buf) + 1 + 1);
+
+ if (! m) {
+ char *errstr = strerror (errno);
+
+ errmsg ("malloc failed\n");
+ errmsg (errstr);
+ return NULL;
+ }
+
+ sprintf (m, "%s\n%s\n", cl_buf, ct_buf);
+
+ return m;
+ }
+
+ cl = atoi (&cl_buf[l]);
+
+ if (cl <= 0) {
+ errmsg ("Content-Length must be greater than zero\n");
+ return NULL;
+ }
+
+ h = "Content-Type: ";
+ l = strlen (h);
+
+ if (strncmp (ct_buf, h, l) != 0) {
+ errmsg ("missing Content-Type\n");
+ return NULL;
+ }
+
+ if (strcmp (&ct_buf[l], "text/event-plain") != 0) {
+ errmsg ("Unsupported Content-Type\n");
+ return NULL;
+ }
+
+ if (read_trailing_newline (fd) < 0) {
+ return NULL;
+ }
+
+ /*
+ * Read the event.
+ */
+
+ m = malloc (cl);
+
+ if (! m) {
+ char *errstr = strerror (errno);
+
+ errmsg ("malloc failed\n");
+ errmsg (errstr);
+ return NULL;
+ }
+
+ for (nbytes_to_read = cl; nbytes_to_read; nbytes_to_read -= nbytes_read) {
+ nbytes_read = read (fd, m + (cl - nbytes_to_read), nbytes_to_read);
+
+ if (nbytes_read < 0) {
+ char *errstr = strerror (errno);
+
+ errmsg ("read failed in middle of message\n");
+ errmsg (errstr);
+ free (m);
+ return NULL;
+ }
+
+ if (nbytes_read == 0) {
+ errmsg ("EOF in middle of message\n");
+ free (m);
+ return NULL;
+ }
+ }
+
+ if (m[cl - 2] != '\n' || m[cl - 1] != '\n') {
+ errmsg ("Message is missing trailing newlines\n");
+ free (m);
+ return NULL;
+ }
+
+ return m;
+ }
+
+
+static int
+send_password (int fd, const char *passwd)
+ {
+ char *h;
+ char *last;
+ char *m;
+ char *p;
+ int l;
+ size_t ml;
+
+ m = retrieve_message (fd);
+ if (! m)
+ return -1;
+
+ p = strtok_r (m, "\n", &last);
+
+ h = "Content-Type: auth/request";
+
+ if (strcmp (p, h) != 0) {
+ errmsg ("Content-Type wasn't auth/request\n");
+ free (m);
+ return -1;
+ }
+
+ free (m);
+
+ l = snprintf (NULL, 0, "auth %s\n\n", passwd);
+ if (l <= 0) {
+ errmsg ("snprintf failed\n");
+ return -1;
+ }
+ l++;
+
+ m = malloc (l);
+ if (! m) {
+ char *errstr = strerror (errno);
+
+ errmsg ("malloc failed\n");
+ errmsg (errstr);
+ return -1;
+ }
+
+ ml = snprintf (m, l, "auth %s\n\n", passwd);
+ if ((ml + 1) != l) {
+ errmsg ("snprintf failed\n");
+ free (m);
+ return -1;
+ }
+
+ if (write (fd, m, ml) != ml) {
+ char *errstr = strerror (errno);
+
+ errmsg ("write failed\n");
+ errmsg (errstr);
+ free (m);
+ return -1;
+ }
+
+ m = retrieve_message (fd);
+ if (! m )
+ return -1;
+
+ p = strtok_r (m, "\n", &last);
+
+ h = "Content-Type: command/reply";
+
+ if (! p || strcmp (p, h) != 0) {
+ errmsg ("Content-Type wasn't command/reply\n");
+ free (m);
+ return -1;
+ }
+
+ p = strtok_r (NULL, "\n", &last);
+
+ h = "Reply-Text: +OK accepted";
+
+ if (! p || strcmp (p, h) != 0) {
+ errmsg ("auth wasn't accepted\n");
+ free (m);
+ return -1;
+ }
+
+ free (m);
+
+ debugmsg ("Logged into service\n");
+
+ return 0;
+ }
+
+
+static int
+enable_mwi_event (int fd)
+ {
+ char *h;
+ char *last;
+ char *m;
+ char *p;
+ size_t ml;
+
+ m = "event plain MESSAGE_WAITING\n\n";
+ ml = strlen (m);
+
+ if (write (fd, m, ml) != ml) {
+ char *errstr = strerror (errno);
+
+ errmsg ("write failed\n");
+ errmsg (errstr);
+ return -1;
+ }
+
+ m = retrieve_message (fd);
+ if (! m )
+ return -1;
+
+ p = strtok_r (m, "\n", &last);
+
+ h = "Content-Type: command/reply";
+
+ if (! p || strcmp (p, h) != 0) {
+ errmsg ("Content-Type wasn't command/reply\n");
+ free (m);
+ return -1;
+ }
+
+ p = strtok_r (NULL, "\n", &last);
+
+ h = "Reply-Text: +OK event listener enabled plain";
+
+ if (! p || strcmp (p, h) != 0) {
+ errmsg ("event wasn't enabled\n");
+ free (m);
+ return -1;
+ }
+
+ free (m);
+
+ debugmsg ("Enabled message waiting event\n");
+
+ return 0;
+ }
+
+
+static int
+process_mwi_event (char *m, const char *device)
+ {
+ char cbuf[64];
+ char rbuf[64];
+ char *h;
+ char *last;
+ char *ma;
+ char *mw;
+ char *p;
+ int fd;
+ int mwi_off;
+ int mwi_on;
+ int r;
+ int w;
+ size_t l;
+ ssize_t ml;
+ ssize_t nbytes_read;
+ struct termios tio;
+
+ debugmsg ("Processing MWI event\n");
+
+ ma = NULL;
+ mw = NULL;
+
+ p = m;
+
+ while ( (p = strtok_r (p, "\n", &last)) ) {
+ h = "MWI-Messages-Waiting: ";
+ l = strlen (h);
+
+ if (strncmp (p, h, l) == 0)
+ mw = p + l;
+
+ h = "MWI-Message-Account: ";
+ l = strlen (h);
+
+ if (strncmp (p, h, l) == 0)
+ ma = p + l;
+
+ p = NULL;
+ }
+
+ if (! (ma && mw) ) {
+ errmsg ("message account or message waiting missing\n");
+ return -1;
+ }
+
+ p = strchr (ma, '\n');
+ if (p)
+ *p = '\n';
+
+ p = strchr (mw, '\n');
+ if (p)
+ *p = '\n';
+
+ /*
+ * The account is considered to be a System 25 extension if
+ * it's of the form:
+ *
+ * numeric_string@host
+ */
+
+ p = strchr (ma, '%');
+ if (! p)
+ p = strchr (ma, '@');
+
+ if (! p || (strncmp (p, "%40", 3) != 0 && strncmp (p, "@", 1) != 0)) {
+ debugmsg (" %s is not a System 25 extension\n", ma);
+ return 0;
+ }
+
+ *p = '\0';
+
+ for (p = ma; *p; p++)
+ if (! isdigit (*p)) {
+ debugmsg (" %s is not a System 25 extension\n", ma);
+ return 0;
+ }
+
+ mwi_off = strcasecmp (mw, "no") == 0;
+ mwi_on = strcasecmp (mw, "yes") == 0;
+
+ if (mwi_off == mwi_on) {
+ errmsg ("Unsupported Messages-Waiting\n");
+ return 0;
+ }
+
+ for (r = 0; r < 3; r++) {
+ if ((fd = open (device, O_RDWR)) < 0) {
+ char *errstr = strerror (errno);
+
+ errmsg ("open failed for device node <%s>.\n", device);
+ errmsg (errstr);
+ return -1;
+ }
+
+ cfmakeraw (&tio);
+
+ tio.c_cflag = CS8 | CREAD | HUPCL | CCTS_OFLOW | CRTS_IFLOW;
+
+ tio.c_cc[VMIN] = 0;
+ tio.c_cc[VTIME] = 50;
+
+ cfsetispeed (&tio, B9600);
+ cfsetospeed (&tio, B9600);
+
+ if (tcsetattr (fd, TCSAFLUSH, &tio) < 0) {
+ char *errstr = strerror (errno);
+
+ errmsg ("tcsetattr failed\n");
+ errmsg (errstr);
+ close (fd);
+ return -1;
+ }
+
+ m = "AT";
+ ml = strlen (m);
+
+ if (write (fd, m, ml) != ml
+ || write (fd, "\r\n", 2) != 2) {
+ char *errstr = strerror (errno);
+
+ errmsg ("write failed\n");
+ errmsg (errstr);
+ close (fd);
+ return -1;
+ }
+
+ for (w = 0; w < 2; w++) {
+ nbytes_read = read_line (fd, rbuf, sizeof (rbuf));
+ if (nbytes_read > 0 && (rbuf[0] == '\0' || strcmp (rbuf, m) == 0))
+ continue;
+ break;
+ }
+
+ if (nbytes_read < 0) {
+ errmsg ("read_line failed\n");
+ close (fd);
+ return -1;
+ }
+
+ if (nbytes_read == 0
+ || strcmp (rbuf, "OK") != 0) {
+ errmsg ("modem failed to wake up\n");
+ close (fd);
+ continue;
+ }
+
+ m = cbuf;
+ ml = snprintf (cbuf, sizeof (cbuf),
+ "ATDT%s%s", (mwi_on ? "#90" : "#91"), ma);
+ if (ml <= 0 || ml >= sizeof (cbuf)) {
+ errmsg ("snprintf failed.\n");
+ close (fd);
+ return -1;
+ }
+
+ if (write (fd, m, ml) != ml
+ || write (fd, "\r\n", 2) != 2) {
+ char *errstr = strerror (errno);
+
+ errmsg ("write failed\n");
+ errmsg (errstr);
+ close (fd);
+ return -1;
+ }
+
+ sleep (5);
+
+ if (write (fd, "\r\n", 2) != 2) {
+ char *errstr = strerror (errno);
+
+ errmsg ("write failed\n");
+ errmsg (errstr);
+ close (fd);
+ return -1;
+ }
+
+ for (w = 0; w < 2; w++) {
+ nbytes_read = read_line (fd, rbuf, sizeof (rbuf));
+ if (nbytes_read > 0 && (rbuf[0] == '\0' || strcmp (rbuf, m) == 0))
+ continue;
+ break;
+ }
+
+ if (nbytes_read < 0) {
+ errmsg ("read_line failed\n");
+ close (fd);
+ return -1;
+ }
+
+ if (nbytes_read > 0 && strcmp (rbuf, "NO DIALTONE") == 0) {
+ errmsg ("modem failed to detect dialtone\n");
+ close (fd);
+ return -1;
+ }
+
+ if (nbytes_read == 0
+ || strcmp (rbuf, "NO CARRIER") != 0) {
+ errmsg ("modem failed to update MWI\n");
+ close (fd);
+ continue;
+ }
+
+ close (fd);
+
+ debugmsg (" message waiting indicator updated for %s\n", ma);
+ return 0;
+ }
+
+ errmsg (" failed to update message waiting indicator for %s\n", ma);
+
+ return -1;
+ }
+
+
+int
+main (int argc, char **argv)
+ {
+ const char *device = "/dev/cuad0";
+ const char *machine = "localhost";
+ const char *port = "8021";
+ const char *passwd = "ClueCon";
+ char *m;
+ int c;
+ int debug;
+ int fd;
+ struct stat statbuf;
+
+ debug = 0;
+
+ while ((c = getopt (argc, argv, "dm:p:w:")) != -1)
+ switch (c) {
+ case 'd':
+ debug = 1;
+ break;
+
+ case 'm':
+ machine = optarg;
+ break;
+
+ case 'p':
+ port = optarg;
+ break;
+
+ case 'w':
+ passwd = optarg;
+ break;
+
+ case 'l':
+ device = optarg;
+ break;
+
+ default:
+ fprintf (stderr,
+ "Usage: %s [-d] [-m machine] [-p port] [-w passwd] [-l device]\n",
+ MyName);
+ exit(1);
+ /* NOTREACHED */
+ break;
+ }
+
+ if (stat (device, &statbuf) < 0 || ! S_ISCHR (statbuf.st_mode)) {
+ fprintf (stderr, "%s: stat failed for path <%s>\n", MyName, device);
+ fprintf (stderr, "%s: or the path isn't a character special file.\n",
+ MyName);
+ perror (MyName);
+ exit (1);
+ }
+
+ install_signal_handlers ();
+
+ if (! debug)
+ daemonize ();
+
+ while (! shutdown_server) {
+ sleep (5);
+
+ fd = connect_to_service (machine, port);
+ if (fd < 0) {
+ error_msg_throttle = 1;
+ continue;
+ }
+
+ if (send_password (fd, passwd) < 0
+ || enable_mwi_event (fd) < 0) {
+ error_msg_throttle = 1;
+ close (fd);
+ continue;
+ }
+
+ error_msg_throttle = 0;
+
+ while (m = retrieve_message (fd)) {
+ process_mwi_event (m, device);
+ free (m);
+ }
+
+ close (fd);
+ }
+
+ exit (0);
+ }
Copied: freeswitch/branches/seven/contrib/ledr (from rev 14471, freeswitch/trunk/contrib/ledr)
Copied: freeswitch/branches/seven/contrib/mcollins (from rev 14471, freeswitch/trunk/contrib/mcollins)
Deleted: freeswitch/branches/seven/contrib/mcollins/create-chanvars-html-page.pl
Copied: freeswitch/branches/seven/contrib/mcollins/create-chanvars-html-page.pl (from rev 14471, freeswitch/trunk/contrib/mcollins/create-chanvars-html-page.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/mcollins/create-chanvars-html-page.pl (rev 0)
+++ freeswitch/branches/seven/contrib/mcollins/create-chanvars-html-page.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,242 @@
+#!/usr/bin/perl
+#
+# create-chanvars-html-page.pl
+#
+# Part of the janitorial process. :)
+#
+# NOTE: This script is used in conjunction with the extract-vars-from-source-tree.sh script
+# Do not run this script manually; use the shell script
+# Specify the source and temp directories in that script
+#
+# Goes through a bunch of source files to snag all lines with
+# switch_channel_(s|g)et_variable in *.c files
+# _VARIABLE is *.h files
+#
+# Creates a table of vars aliased in *.h (hash, actually)
+# Then cycles through each line and creates a data struct:
+# key = chan var, val = hashes of source file names
+# sub hashes are:
+# key = src file name, val = Array of Arrays
+# Each sub array has two elements:
+# 0 = line number
+# 1 = 'get' or 'set'
+#
+# example:
+#
+# remote_media_ip => {
+# "mod_esf.c" => [[114, "set"]],
+# "mod_sofia.c" => [[1050, "get"], [1078, "get"]],
+# "sofia_glue.c" => [[2812, "set"]],
+# }
+#
+# Also creates an index based on filename like so in a hash:
+# key = source file name, val = hash of chanvar names
+# sub hashes are:
+# key = chan var name, val = Array of arrays
+# Each sub array has two elements:
+# 0 = line number
+# 1 = 'get' or 'set'
+#
+# example:
+#
+# "mod_nibblebill.c" => {
+# nibble_account => [[334, "get"], [632, "get"]],
+# nibble_rate => [[333, "get"], [540, "get"]],
+# nibble_total_billed => [[411, "set"]],
+# }
+#
+# Finally we create a simple HTML file that lets the user easily click around to Fisheye source
+#
+
+use strict;
+use warnings;
+use Data::Dump qw(dump);
+use File::Basename;
+use Getopt::Long;
+use HTML::Tiny;
+
+$|++;
+
+# Get the cmd line options
+my $srcdir = '/usr/src/freeswitch.trunk';
+my $tmpdir = '/tmp';
+my $htmldir = '/usr/local/freeswitch/htdocs';
+
+## Use these as defaults unless command line args are supplied
+GetOptions( 'srcdir=s' => \$srcdir,
+ 'tmpdir=s' => \$tmpdir,
+ 'htmldir=s' => \$htmldir,
+);
+
+my $srcdirlen = length $srcdir; # calculate this once since it doesn't change
+
+my $headerfile = $tmpdir . "/header-defs.txt";
+my $datafile = $tmpdir . "/get-set-vars.txt";
+my $htmlfile = $htmldir . "/chanvars.html";
+
+my $site = 'http://fisheye.freeswitch.org/browse/FreeSWITCH';
+
+my $obvious_exceptions; # regex match for channel variable names we don't care about
+$obvious_exceptions = '^(|argv|v?var|var_?name|v?buf|char.*|inner_var_array.*|arg.*|string|tmp_name|[^_]*_var|\(char \*\) vvar)$';
+
+my %switch_types; # key = switch type def, val = chan var name
+my %channel_vars; # key = chan var name, val = HoA
+ # HoA: key = filename, val = [line number, set|get]
+my %source_idx; # key = src file name, val = HoA
+ # HoA: key = var name, val = [line number, set|get]
+my %source_files; # key = source filename, val = fisheye url where link is found
+
+open(FILEIN,"<",$headerfile) or die "$headerfile - $!\n";
+while(<FILEIN>) {
+ chomp;
+ my @RECIN = split /#define /,$_;
+ # debug
+ #print "$RECIN[1] \n";
+ $RECIN[1] =~ s/"//g; # strip quote chars
+ my ($key, $val) = split /\s/,$RECIN[1];
+ $switch_types{$key} = $val;
+}
+close(FILEIN);
+
+# debug
+#print dump(\%switch_types);
+
+open(FILEIN,"<",$datafile) or die "$datafile - $!\n";
+while(<FILEIN>) {
+ chomp;
+ next if m/switch_channel_get_variables/; # get variables != what we want
+ next unless m/switch_channel_(s|g)et_variable\s?\(/;
+ next if m/#define|SWITCH_DECLARE/;
+ next unless m/\.c(pp)?:/; # only c and cpp files for now
+ ## Extract source file name
+ my @RECIN = split /(\.c(pp)?)/,$_; # split on file name.c or name.cpp
+ my ($filename,$dir,$ext) = fileparse($RECIN[0]);
+ $filename .= $RECIN[1]; # append .c or .cpp
+ # debug
+ #print "$filename\n";
+ # trim off the srcdir from beginning of string
+ my $reldir = substr $dir, $srcdirlen;
+ #print "$filename $dir $ext ($reldir)\n";
+ if ( ! exists( $source_files{$filename} ) ) {
+ $source_files{ $filename } = $site . $reldir . $filename;
+ }
+
+ ## Extract line number for this occurrence in this source file
+ my $linenum = 0;
+ if ( $RECIN[3] =~ m/:(\d+):/ ) {
+ $linenum = $1;
+ }
+
+ ## Determine get or set
+ my $setget = 'set';
+ if ( $RECIN[3] =~ m/get_variable/ ) {
+ $setget = 'get';
+ }
+
+ ## Extract variable name
+ # Set is easier than get because splitting on comma does all the work
+ my @temp;
+ if ( $setget eq 'set' ) {
+ @temp = split /,\s*?/,$RECIN[3]; # second elem is channel variable name
+ $temp[1] =~ s/"//g;
+ } else {
+ # get is trickier - need to stop at first close paren
+ @temp = split /,\s+?/,$RECIN[3]; # second elem is channel variable name
+ $temp[1] =~ s/"//g;
+ $temp[1] =~ m/^([A-Za-z_]+)/;
+ $temp[1] = $1;
+ #debug
+ #print "$temp[1]\n";
+ }
+ my $channel_variable_name = $temp[1];
+ $channel_variable_name =~ s/"//g; # strip quote chars
+ $channel_variable_name =~ s/^\s*//; # strip leading whitespace
+ if ( exists( $switch_types{$channel_variable_name} ) ) {
+ ## This isn't actually a channel variable name but rather a def from switch_types.h
+ $channel_variable_name = $switch_types{$channel_variable_name};
+ }
+
+ ## Skip obvious exceptions...
+ next if $channel_variable_name =~ m/$obvious_exceptions/;
+
+ ## populate the hash for this variable, filename and line num & get/set val
+ push @{ $channel_vars{$channel_variable_name}{$filename} }, [$linenum, $setget];
+ push @{ $source_idx{$filename}{$channel_variable_name} }, [$linenum, $setget];
+}
+close(FILEIN);
+
+#debug
+#print dump(\%channel_vars);
+#foreach (sort keys %channel_vars) { print "'$_'\n"; }
+#print dump(\%source_idx) . "\n";
+#print dump(\%source_files) . "\n";
+
+## Test the creation of simple html file
+open(HTML,'>',$htmlfile) or die "$htmlfile - $!\n";
+my $h = HTML::Tiny->new;
+my @links; # contains the links for the HTML::Tiny p and a tags
+
+## Header Row
+#push @links, $h->tr( [ $h->th( 'Channel Variable', 'Source File', 'Links') ] );
+
+## Data Rows
+## NOTE: This does a case-insensitive sort
+foreach my $chanvar ( sort {lc $a cmp lc $b} keys %channel_vars ) {
+ my %this_var = %{ $channel_vars{$chanvar} };
+
+ ## Cycle through each source file for this chan var
+ foreach ( sort keys %this_var ) {
+ ## These keys are source file names
+ my @row = (
+ $chanvar,
+ $h->a( {
+ href => $source_files{$_}, target => '_blank',
+ },
+ $_
+ )
+ );
+ my $sourcename = $_;
+ foreach ( @{ $this_var{$_} } ) {
+ #$row[2] .= "@{ $_ }" . "<br/>";
+ my $linkname = "@{ $_ }";
+ my $linenum = @{ $_ }[0];
+ my $url = $source_files{$sourcename} . '?r=9999999#l' . $linenum;
+ $row[2] .= $h->a( { href => $url, target => '_blank' },
+ $linkname
+ ) . '<br/>';
+ }
+ push @links, $h->tr( [ $h->td(@row) ] );
+ }
+
+}
+
+## debug
+#print dump(\@links) . "\n";
+
+## Create a table
+my $table = $h->table(
+ {
+ border => 1, cellspacing => 5, cellpadding => 1,
+ },
+ [
+ $h->tr( [ $h->th( 'Channel Variable', 'Source File', 'Links') ] ),
+ @links,
+ ]
+);
+
+## Create the HTML
+print HTML $h->html(
+ [
+ $h->head( $h->title( 'FreeSWITCH Source Files' ) ),
+ $h->body(
+ [
+ $h->h1( { class => 'main' }, 'FreeSWITCH Channel Variables' ),
+ $table,
+ ]
+ )
+ ]
+);
+
+close(HTML);
+
+print "Operation complete\n";
Deleted: freeswitch/branches/seven/contrib/mcollins/extract-fs-vars-from-source-tree.sh
Copied: freeswitch/branches/seven/contrib/mcollins/extract-fs-vars-from-source-tree.sh (from rev 14471, freeswitch/trunk/contrib/mcollins/extract-fs-vars-from-source-tree.sh) (0 => 14472)
--- freeswitch/branches/seven/contrib/mcollins/extract-fs-vars-from-source-tree.sh (rev 0)
+++ freeswitch/branches/seven/contrib/mcollins/extract-fs-vars-from-source-tree.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# extract-fs-vars-from-source-tree.sh
+#
+# Walks the FreeSWITCH source tree
+#
+#
+# NOTES
+# Be sure to specify your source and temp directories below
+# Also, make this script and create-chanvars-html-page.pl executable
+#
+# MC 2009-04-02
+
+# Change these vars if your directories are different
+SRCDIR=/usr/src/freeswitch.trunk
+TMPDIR=/tmp
+HTMLDIR=/usr/local/freeswitch/htdocs
+
+# Grep the variables, then grep the aliases in the header files
+echo Searching source tree for channel variable set/get...
+grep -rn "[sg]et_variable(" $SRCDIR/* | grep -v Binary | grep -v svn > $TMPDIR/get-set-vars.txt
+
+echo Getting header file definitions...
+grep -n "_VARIABLE" $SRCDIR/src/include/*h > $TMPDIR/header-defs.txt
+
+# launch perl script here
+echo Creating HTML file in $TMPDIR directory
+./create-chanvars-html-page.pl --srcdir=$SRCDIR --tmpdir=$TMPDIR --htmldir=$HTMLDIR
Deleted: freeswitch/branches/seven/contrib/mcollins/uuid_send_dtmf.lua
Copied: freeswitch/branches/seven/contrib/mcollins/uuid_send_dtmf.lua (from rev 14471, freeswitch/trunk/contrib/mcollins/uuid_send_dtmf.lua) (0 => 14472)
--- freeswitch/branches/seven/contrib/mcollins/uuid_send_dtmf.lua (rev 0)
+++ freeswitch/branches/seven/contrib/mcollins/uuid_send_dtmf.lua 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,44 @@
+--[[
+
+ uuid_send_dtmf.lua
+
+Do uuid_send_dtmf from dialplan
+accepts three args: uuid, time, and dtmf
+uuid is the uuid of the session
+time is the "+ <seconds>" value in seconds
+dtmf is the sequence of dtmf digit(s) to send
+
+NOTE: only the "+<seconds>" syntax of sched_api is supported here
+NOTE: No error checking, so don't forget to send all args
+
+Example dialplan call:
+ <action application="lua" data="uuid_send_dtmf.lua ${uuid} 10 123"/>
+
+--]]
+
+-- Do not hangup at end of script
+session:setAutoHangup(false);
+
+-- get an api object
+api = freeswitch.API();
+
+-- get the calling args (uuid, time, dtmf)
+uuid = argv[1];
+time = argv[2];
+dtmf = argv[3];
+
+apicmd = "sched_api";
+apiarg = "+" .. time .. " none uuid_send_dtmf " .. uuid .. " " .. dtmf;
+
+freeswitch.console_log("NOTICE","apicmd: " .. apicmd .. "\n");
+freeswitch.console_log("NOTICE","apiarg: " .. apiarg .. "\n\n");
+
+if uuid then
+ -- schedule the uuid_send_dtmf
+ res = api:execute(apicmd,apiarg);
+ freeswitch.console_log("ERR","Result is " .. res .. "\n\n");
+else
+ freeswitch.console_log("ERR","Did not receive a uuid for this call!\n");
+end
+
+-- All done!
Copied: freeswitch/branches/seven/contrib/mod (from rev 14471, freeswitch/trunk/contrib/mod)
Copied: freeswitch/branches/seven/contrib/mod/applications (from rev 14471, freeswitch/trunk/contrib/mod/applications)
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http)
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/Makefile
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/Makefile (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,5 @@
+BASE=../../../..
+LOCAL_SOURCES=arraylist.c debug.c json_object.c json_tokener.c json_util.c linkhash.c printbuf.c url_encoding.c http_req.c
+LOCAL_OBJS=arraylist.o debug.o json_object.o json_tokener.o json_util.o linkhash.o printbuf.o url_encoding.o http_req.o
+include $(BASE)/build/modmake.rules
+
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/README
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/README (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/README (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+NOTE: This module has serious memory leaks, we strongly suggest you use mod_curl instead.
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/arraylist.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,95 @@
+/*
+ * $Id: arraylist.c,v 1.4 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif /* STDC_HEADERS */
+
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
+
+#include "bits.h"
+#include "arraylist.h"
+
+struct array_list *array_list_new(array_list_free_fn * free_fn)
+{
+ struct array_list *this;
+
+ if (!(this = calloc(1, sizeof(struct array_list))))
+ return NULL;
+ this->size = ARRAY_LIST_DEFAULT_SIZE;
+ this->length = 0;
+ this->free_fn = free_fn;
+ if (!(this->array = calloc(sizeof(void *), this->size))) {
+ free(this);
+ return NULL;
+ }
+ return this;
+}
+
+extern void array_list_free(struct array_list *this)
+{
+ int i;
+ for (i = 0; i < this->length; i++)
+ if (this->array[i])
+ this->free_fn(this->array[i]);
+ free(this->array);
+ free(this);
+}
+
+void *array_list_get_idx(struct array_list *this, int i)
+{
+ if (i >= this->length)
+ return NULL;
+ return this->array[i];
+}
+
+static int array_list_expand_internal(struct array_list *this, int max)
+{
+ void *t;
+ int new_size;
+
+ if (max < this->size)
+ return 0;
+ new_size = max(this->size << 1, max);
+ if (!(t = realloc(this->array, new_size * sizeof(void *))))
+ return -1;
+ this->array = t;
+ (void) memset(this->array + this->size, 0, (new_size - this->size) * sizeof(void *));
+ this->size = new_size;
+ return 0;
+}
+
+int array_list_put_idx(struct array_list *this, int idx, void *data)
+{
+ if (array_list_expand_internal(this, idx))
+ return -1;
+ if (this->array[idx])
+ this->free_fn(this->array[idx]);
+ this->array[idx] = data;
+ if (this->length <= idx)
+ this->length = idx + 1;
+ return 0;
+}
+
+int array_list_add(struct array_list *this, void *data)
+{
+ return array_list_put_idx(this, this->length, data);
+}
+
+int array_list_length(struct array_list *this)
+{
+ return this->length;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/arraylist.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/arraylist.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+/*
+ * $Id: arraylist.h,v 1.4 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _arraylist_h_
+#define _arraylist_h_
+
+#define ARRAY_LIST_DEFAULT_SIZE 32
+
+typedef void (array_list_free_fn) (void *data);
+
+struct array_list {
+ void **array;
+ int length;
+ int size;
+ array_list_free_fn *free_fn;
+};
+
+extern struct array_list *array_list_new(array_list_free_fn * free_fn);
+
+extern void array_list_free(struct array_list *al);
+
+extern void *array_list_get_idx(struct array_list *al, int i);
+
+extern int array_list_put_idx(struct array_list *al, int i, void *data);
+
+extern int array_list_add(struct array_list *al, void *data);
+
+extern int array_list_length(struct array_list *al);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/bits.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/bits.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/bits.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/bits.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/bits.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,27 @@
+/*
+ * $Id: bits.h,v 1.10 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _bits_h_
+#define _bits_h_
+#include <inttypes.h>
+#ifndef min
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef max
+#define max(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+#define hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9)
+#define error_ptr(error) ((void*)(intptr_t)error)
+#define is_error(ptr) ((uint32_t)(intptr_t)ptr > (uint32_t)-4000L)
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/config.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/config.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/config.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/config.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/config.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,118 @@
+/* config.h. Generated from config.h.in by configure. */
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+ to 0 otherwise. */
+#define HAVE_MALLOC 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `open' function. */
+#define HAVE_OPEN 1
+
+/* Define to 1 if your system has a GNU libc compatible `realloc' function,
+ and to 0 otherwise. */
+#define HAVE_REALLOC 1
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#define HAVE_STDARG_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the `strndup' function. */
+#define HAVE_STRNDUP 1
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#define HAVE_SYSLOG_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vasprintf' function. */
+#define HAVE_VASPRINTF 1
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `vsyslog' function. */
+#define HAVE_VSYSLOG 1
+
+/* Name of package */
+#define PACKAGE ""
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "michael@metaparadigm.com"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "JSON C Library"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "JSON C Library 0.3"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "json-c"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.3"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "0.3"
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to rpl_malloc if the replacement function should be used. */
+/* #undef malloc */
+
+/* Define to rpl_realloc if the replacement function should be used. */
+/* #undef realloc */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/debug.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,101 @@
+/*
+ * $Id: debug.c,v 1.5 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#if HAVE_SYSLOG_H
+# include <syslog.h>
+#endif /* HAVE_SYSLOG_H */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif /* HAVE_SYS_PARAM_H */
+
+#include "debug.h"
+
+static int _syslog = 0;
+static int _debug = 0;
+
+void mc_set_debug(int debug)
+{
+ _debug = debug;
+}
+
+int mc_get_debug()
+{
+ return _debug;
+}
+
+extern void mc_set_syslog(int syslog)
+{
+ _syslog = syslog;
+}
+
+void mc_abort(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+#if HAVE_VSYSLOG
+ if (_syslog) {
+ vsyslog(LOG_ERR, msg, ap);
+ } else
+#endif
+ vprintf(msg, ap);
+ exit(1);
+}
+
+
+void mc_debug(const char *msg, ...)
+{
+ va_list ap;
+ if (_debug) {
+ va_start(ap, msg);
+#if HAVE_VSYSLOG
+ if (_syslog) {
+ vsyslog(LOG_DEBUG, msg, ap);
+ } else
+#endif
+ vprintf(msg, ap);
+ }
+}
+
+void mc_error(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+#if HAVE_VSYSLOG
+ if (_syslog) {
+ vsyslog(LOG_ERR, msg, ap);
+ } else
+#endif
+ vfprintf(stderr, msg, ap);
+}
+
+void mc_info(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+#if HAVE_VSYSLOG
+ if (_syslog) {
+ vsyslog(LOG_INFO, msg, ap);
+ } else
+#endif
+ vfprintf(stderr, msg, ap);
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/debug.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/debug.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+/*
+ * $Id: debug.h,v 1.5 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+extern void mc_set_debug(int debug);
+extern int mc_get_debug();
+
+extern void mc_set_syslog(int syslog);
+extern void mc_abort(const char *msg, ...);
+extern void mc_debug(const char *msg, ...);
+extern void mc_error(const char *msg, ...);
+extern void mc_info(const char *msg, ...);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/http_req.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,728 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2008, Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ * Copyright (C) Benbria. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ *
+ * http_req.c -- HTTP client implementation
+ *
+ */
+
+#include "http_req.h"
+
+/*
+extern int dprintf(int, const char *, ...);
+extern int isblank(int);
+*/
+
+/* NOTE: v = version, header = h, status = s, newline = n, phrase = p */
+static accept_state_t state_start(char c, state_machine_t * sm);
+static accept_state_t state_shp(char c, state_machine_t * sm);
+static accept_state_t state_n(char c, state_machine_t * sm);
+static accept_state_t state_vhp_A(char c, state_machine_t * sm);
+static accept_state_t state_vhp_B(char c, state_machine_t * sm);
+static accept_state_t state_vhp_C(char c, state_machine_t * sm);
+static accept_state_t state_vhp_D(char c, state_machine_t * sm);
+static accept_state_t state_vhp_E(char c, state_machine_t * sm);
+static accept_state_t state_vhp_F(char c, state_machine_t * sm);
+static accept_state_t state_vhp_G(char c, state_machine_t * sm);
+static accept_state_t state_vhp_H(char c, state_machine_t * sm);
+static accept_state_t state_hp_A(char c, state_machine_t * sm);
+static accept_state_t state_hp_B(char c, state_machine_t * sm);
+static accept_state_t state_p(char c, state_machine_t * sm);
+static accept_state_t state_error(char c, state_machine_t * sm);
+
+static int read_all(int s, char *buf, size_t len);
+
+#ifdef DEBUG
+int main(int argc, char *argv[])
+{
+ http_response_t response;
+ http_request_t request;
+ int ret;
+ int i;
+
+ if (argc != 2)
+ return EXIT_FAILURE;
+
+ request.method = GET;
+ request.version = DEFAULT_HTTP_VERSION;
+ request.url = argv[1];
+ request.header_len = 0;
+ request.body_len = 0;
+
+ ret = http_req(&request, &response);
+ if (ret == ERROR)
+ return EXIT_FAILURE;
+
+ printf("Version : %s\n", response.version);
+ printf("Status Code : %d\n", response.status_code);
+ printf("Phrase : %s\n", response.phrase);
+
+ for (i = 0; i < response.header_len; i++) {
+ printf("Header : key = [%s] value = [%s]\n", response.headers[i].field_name, response.headers[i].value);
+ }
+
+ fflush(stdout);
+ write(STDOUT_FILENO, response.body, response.body_len);
+ printf("\n");
+
+ free_http_response(&response);
+
+ return EXIT_SUCCESS;
+}
+#endif
+
+int http_req(http_request_t * req, http_response_t * res)
+{
+ uint32_t addr;
+ int s;
+ int ret;
+ uint16_t port = 0;
+ size_t len;
+ struct sockaddr_in sck;
+ struct hostent *hst;
+ char *hostname;
+ char *method;
+ char *buf;
+ int buf_len;
+ ssize_t i;
+ int j;
+ int l;
+ int m;
+ int p;
+ int q = 0;
+ char f = HTTP_FALSE;
+ char port_s[MAX_PORT_LEN];
+ sighandler_t sig;
+ struct timeval tv;
+
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+
+
+ (void) memset(&sck, 0, sizeof(sck));
+
+ sig = signal(SIGPIPE, SIG_IGN);
+ if (sig == SIG_ERR) {
+ fprintf(stderr, "Cannot ignore SIGPIPE signal\n");
+ return ERROR;
+ }
+
+ s = socket(PF_INET, SOCK_STREAM, 0);
+ if (s == ERROR) {
+ perror("Could not create socket");
+ return ERROR;
+ }
+
+ (void) setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+ (void) setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
+
+ len = strlen(req->url);
+ hostname = (char *) malloc(len * sizeof(char) + 1);
+ if (hostname == NULL) {
+ perror("Could not allocate memory for hostname");
+ close(s);
+ return ERROR;
+ }
+
+ EMPTY_STRING(hostname);
+
+ l = strlen(req->url) + 1;
+ m = strlen("http://");
+ for (p = 0, j = m; j < l; j++) {
+ if (req->url[j] == ':') {
+ strncpy(hostname, req->url + m, j - m);
+ hostname[j - m] = '\0';
+ f = HTTP_TRUE;
+ p = j;
+ continue;
+ }
+
+ if ((req->url[j] == '/' || req->url[j] == '\0') && f == HTTP_TRUE) {
+ if ((j - p) < MAX_PORT_LEN) {
+ strncpy(port_s, req->url + p + 1, j - p);
+ port_s[j - p] = '\0';
+ port = (uint16_t) atoi(port_s);
+ } else
+ port = 0;
+ q = j;
+ break;
+ }
+
+ if ((req->url[j] == '/' || req->url[j] == '\0') && f == HTTP_FALSE) {
+ strncpy(hostname, req->url + m, j - m);
+ hostname[j - m] = '\0';
+ port = DEFAULT_HTTP_PORT;
+ q = j;
+ break;
+ }
+ }
+
+ if (port == 0 || hostname[0] == '\0') {
+ fprintf(stderr, "Invalid URL\n");
+ close(s);
+ free(hostname);
+ return ERROR;
+ }
+
+ l = strlen(hostname);
+ for (j = 0; j < l; j++) {
+ if (hostname[j] == '/') {
+ hostname[j] = '\0';
+ break;
+ }
+ }
+
+ hst = gethostbyname(hostname);
+ if (hst == NULL) {
+ herror("Could not find host");
+ close(s);
+ free(hostname);
+ return ERROR;
+ }
+
+ addr = *((uint32_t *) hst->h_addr_list[0]);
+
+ sck.sin_family = AF_INET;
+ sck.sin_port = htons(port);
+ sck.sin_addr.s_addr = addr;
+
+ ret = connect(s, (struct sockaddr *) &sck, sizeof(sck));
+ if (ret == ERROR) {
+ perror("Could not connect to host");
+ close(s);
+ free(hostname);
+ return ERROR;
+ }
+
+ switch (req->method) {
+ case GET:
+ method = HTTP_GET_METHOD;
+ break;
+ case HEAD:
+ method = HTTP_HEAD_METHOD;
+ break;
+ case POST:
+ method = HTTP_POST_METHOD;
+ break;
+ case DELETE:
+ method = HTTP_DELETE_METHOD;
+ break;
+ case PUT:
+ method = HTTP_PUT_METHOD;
+ break;
+ default:
+ method = HTTP_GET_METHOD;
+ }
+
+ if (req->url[q] == '/') {
+ dprintf(s, "%s %s HTTP/%s\r\n", method, req->url + q, req->version);
+ } else {
+ dprintf(s, "%s /%s HTTP/%s\r\n", method, req->url + q, req->version);
+ }
+
+ if (port != DEFAULT_HTTP_PORT)
+ dprintf(s, "Host: %s:%d\r\n", hostname, port);
+ else
+ dprintf(s, "Host: %s\r\n", hostname);
+ dprintf(s, "Connection: close\r\n");
+ dprintf(s, "Content-Length: %d\r\n", (int)req->body_len);
+
+ for (i = 0; i < req->header_len; i++) {
+ dprintf(s, "%s: %s\r\n", req->headers[i].field_name, req->headers[i].value);
+ }
+
+ dprintf(s, "\r\n");
+
+
+ if (req->body != NULL && req->body_len != 0) {
+ ret = write(s, req->body, req->body_len);
+ if (ret == ERROR) {
+ perror("Could not write body to socket");
+ free(hostname);
+ return ERROR;
+ }
+ }
+
+ buf = (char *) malloc(RECV_BUFF_SIZE * sizeof(char));
+ if (buf == NULL) {
+ perror("Could not allocate memory for buffer");
+ close(s);
+ free(hostname);
+ return ERROR;
+ }
+
+ buf_len = read_all(s, buf, RECV_BUFF_SIZE - 1);
+ if (buf_len == ERROR) {
+ perror("Could not read into buffer");
+ free(hostname);
+ return ERROR;
+ }
+ buf[buf_len] = '\0';
+
+ close(s);
+
+ (void) signal(SIGPIPE, sig);
+ free(hostname);
+ return http_parse_response(buf, buf_len, res);
+}
+
+int http_parse_response(char *buf, ssize_t buf_len, http_response_t * response)
+{
+ token_t token;
+ state_machine_t sm;
+ int pos;
+ ssize_t size;
+ char buff[STATUS_CODE_LEN];
+ int old_pos;
+ int nt;
+ int i;
+ int j;
+ int f;
+
+ INIT_STATE_MACHINE(&sm);
+
+ sm.buf = buf;
+ sm.buf_len = buf_len;
+
+ pos = sm.pos;
+ token = get_next_token(&sm);
+ if (token != VERSION) {
+ fprintf(stderr, "ERROR %d-%d\n", VERSION, token);
+ return ERROR;
+ }
+
+ size = sm.pos - pos;
+ response->version = (char *) malloc((size + 1) * sizeof(char));
+ if (response->version == NULL) {
+ perror("Cannot allocate memory for version number");
+ return ERROR;
+ }
+ strncpy(response->version, sm.buf + pos, size);
+ response->version[size] = '\0';
+
+ pos = sm.pos;
+ token = get_next_token(&sm);
+ if (token != STATUS_CODE) {
+ fprintf(stderr, "ERROR %d-%d\n", STATUS_CODE, token);
+ return ERROR;
+ }
+
+ size = sm.pos - pos;
+
+ buff[STATUS_CODE_LEN - 1] = '\0';
+ strncpy(buff, sm.buf + pos, STATUS_CODE_LEN - 1);
+
+ response->status_code = atoi(buff);
+
+ pos = sm.pos;
+ token = get_next_token(&sm);
+ if (token != PHRASE) {
+ fprintf(stderr, "ERROR %d-%d\n", PHRASE, token);
+ return ERROR;
+ }
+
+ size = sm.pos - pos - 2;
+ response->phrase = (char *) malloc((size + 1) * sizeof(char));
+ if (response->phrase == NULL) {
+ perror("Cannot allocate memory for phrase");
+ return ERROR;
+ }
+ strncpy(response->phrase, sm.buf + pos, size);
+ response->phrase[size] = '\0';
+
+ old_pos = sm.pos;
+ nt = 0;
+ f = HTTP_FALSE;
+ do {
+ token = get_next_token(&sm);
+ switch (token) {
+ case PHRASE:
+ case STATUS_CODE:
+ f = HTTP_FALSE;
+ case VERSION:
+ case NEWLINE:
+ break;
+ case HEADER:
+ if (f == HTTP_FALSE) {
+ nt++;
+ f = HTTP_TRUE;
+ } else
+ f = HTTP_FALSE;
+ break;
+ case SYNTAX_ERROR:
+ return ERROR;
+ }
+
+ if (token != HEADER && token != PHRASE && token != STATUS_CODE)
+ break;
+ } while (token != SYNTAX_ERROR);
+
+ if (nt != 0) {
+ response->headers = (http_header_t *) malloc(sizeof(http_header_t) * nt);
+ if (response->headers == NULL) {
+ perror("Could not allocate memory for headers");
+ return ERROR;
+ }
+ } else
+ response->headers = NULL;
+
+ response->header_len = nt;
+
+ sm.pos = old_pos;
+ for (i = 0; i < nt; i++) {
+ pos = sm.pos;
+ sm.state = state_start;
+ sm.stop = HTTP_FALSE;
+ token = get_next_token(&sm);
+ size = sm.pos - pos;
+ size -= 2;
+
+ response->headers[i].field_name = (char *) malloc((size + 1) * sizeof(char));
+
+ if (response->headers[i].field_name == NULL) {
+ perror("Could not allocate memory for header");
+ return ERROR;
+ }
+
+ strncpy(response->headers[i].field_name, sm.buf + pos, size);
+ response->headers[i].field_name[size] = '\0';
+
+ pos = sm.pos;
+ token = get_next_token(&sm);
+ if (token == HEADER || token == STATUS_CODE) {
+ for (j = 0; ((sm.buf + pos)[j] == '\r' && (sm.buf + pos)[j + 1] == '\n') == 0; j++);
+ size = j;
+ sm.pos = j + 2;
+ } else
+ size = sm.pos - pos - 2;
+
+ response->headers[i].value = (char *) malloc((size + 1) * sizeof(char));
+
+ if (response->headers[i].value == NULL) {
+ perror("Could not allocate memory for header");
+ return ERROR;
+ }
+ strncpy(response->headers[i].value, sm.buf + pos, size);
+ response->headers[i].value[size] = '\0';
+
+ }
+
+ pos = sm.pos;
+ token = get_next_token(&sm);
+ if (token != NEWLINE) {
+ fprintf(stderr, "ERROR %d-%d\n", NEWLINE, token);
+ return ERROR;
+ }
+
+ response->body = (char *) malloc((buf_len - sm.pos + 1) * sizeof(char));
+ if (response->body == NULL) {
+ perror("Could not allocate memory for body");
+ return ERROR;
+ }
+
+ response->body_len = buf_len - sm.pos;
+ response->body[response->body_len] = '\0';
+
+ (void) memcpy(response->body, buf + sm.pos, response->body_len);
+
+ return SUCCESS;
+}
+
+void free_http_response(http_response_t * response)
+{
+ free(response->version);
+ free(response->phrase);
+ if (response->headers != NULL)
+ free(response->headers);
+ if (response->body != NULL)
+ free(response->body);
+}
+
+token_t get_next_token(state_machine_t * sm)
+{
+ char c;
+ accept_state_t accept;
+
+ while (sm->stop != HTTP_TRUE) {
+ c = sm->buf[sm->pos];
+ accept = sm->state(c, sm);
+ switch (accept) {
+ case NOAS:
+ case ASNR:
+ sm->pos++;
+ case ASWR:
+ break;
+ }
+
+ switch (accept) {
+ case ASNR:
+ case ASWR:
+ sm->state = state_start;
+ return sm->token;
+ case NOAS:
+ break;
+ }
+
+ if (sm->pos >= sm->buf_len) {
+ sm->stop = HTTP_TRUE;
+ break;
+ }
+ }
+
+ return SYNTAX_ERROR;
+}
+
+static accept_state_t state_start(char c, state_machine_t * sm)
+{
+ if (toupper(c) == 'H')
+ sm->state = state_vhp_A;
+ else if (isdigit(c))
+ sm->state = state_shp;
+ else if (c == '\r' || c == '\n')
+ sm->state = state_n;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_shp(char c, state_machine_t * sm)
+{
+ if (isdigit(c))
+ sm->state = state_shp;
+ else if (isblank(c)) {
+ sm->token = STATUS_CODE;
+ return ASNR;
+ } else if (c == ':')
+ sm->state = state_hp_B;
+ else if (c == '\r' || c == '\n')
+ sm->state = state_p;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_n(char c, state_machine_t * sm)
+{
+ if (c == '\r' || c == '\n') {
+ sm->token = NEWLINE;
+ return ASNR;
+ } else if (c == ':')
+ sm->state = state_hp_B;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_A(char c, state_machine_t * sm)
+{
+ if (toupper(c) == 'T')
+ sm->state = state_vhp_B;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_B(char c, state_machine_t * sm)
+{
+ if (toupper(c) == 'T')
+ sm->state = state_vhp_C;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_C(char c, state_machine_t * sm)
+{
+ if (toupper(c) == 'P')
+ sm->state = state_vhp_D;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_D(char c, state_machine_t * sm)
+{
+ if (toupper(c) == '/')
+ sm->state = state_vhp_E;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_E(char c, state_machine_t * sm)
+{
+ if (isdigit(c))
+ sm->state = state_vhp_F;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_F(char c, state_machine_t * sm)
+{
+ if (isdigit(c))
+ sm->state = state_vhp_F;
+ else if (c == '.')
+ sm->state = state_vhp_G;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_G(char c, state_machine_t * sm)
+{
+ if (isdigit(c))
+ sm->state = state_vhp_H;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else if (c == '\n' || c == '\r')
+ sm->state = state_p;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_vhp_H(char c, state_machine_t * sm)
+{
+ if (isdigit(c))
+ sm->state = state_vhp_H;
+ else if (isblank(c)) {
+ sm->token = VERSION;
+ return ASNR;
+
+ } else if (isprint(c))
+ sm->state = state_hp_A;
+
+ return NOAS;
+}
+
+static accept_state_t state_hp_A(char c, state_machine_t * sm)
+{
+ if (c == ':')
+ sm->state = state_hp_B;
+ else if (c == '\r' || c == '\n')
+ sm->state = state_p;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_hp_B(char c, state_machine_t * sm)
+{
+ if (isblank(c)) {
+ sm->token = HEADER;
+ return ASNR;
+ } else if (c == '\r' || c == '\n')
+ sm->state = state_p;
+ else if (c == ':')
+ sm->state = state_hp_B;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_p(char c, state_machine_t * sm)
+{
+ if (c == '\r' || c == '\n') {
+ sm->token = PHRASE;
+ return ASNR;
+ } else if (c == ':')
+ sm->state = state_hp_B;
+ else if (isprint(c))
+ sm->state = state_hp_A;
+ else
+ sm->state = state_error;
+
+ return NOAS;
+}
+
+static accept_state_t state_error(char c, state_machine_t * sm)
+{
+ c = 0;
+ sm->token = SYNTAX_ERROR;
+
+ return ASNR;
+}
+
+static int read_all(int s, char *buf, size_t len)
+{
+ size_t t;
+ size_t r = ERROR;
+
+ for (t = 0; t < len && r != 0;) {
+ r = read(s, buf + t, len - t);
+ if ((int) r == ERROR) {
+ return ERROR;
+ } else {
+ t += r;
+ }
+ }
+
+ return (int) t;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/http_req.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/http_req.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,138 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2008, Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ * Copyright (C) Benbria. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ *
+ * http_req.h -- HTTP client implementation
+ *
+ */
+
+#ifndef __HTTP_REQ_H__
+#define __HTTP_REQ_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <signal.h>
+#include <errno.h>
+
+#define ERROR -1
+#define SUCCESS 0
+#define EMPTY_STRING(s) s[0] = '\0'
+
+#define DEFAULT_HTTP_VERSION "1.1"
+#define DEFAULT_HTTP_PORT 80
+
+#define HTTP_GET_METHOD "GET"
+#define HTTP_HEAD_METHOD "HEAD"
+#define HTTP_POST_METHOD "POST"
+#define HTTP_DELETE_METHOD "DELETE"
+#define HTTP_PUT_METHOD "PUT"
+
+#define MAX_PORT_LEN 6
+
+#define RECV_BUFF_SIZE 65536
+
+#define HTTP_TRUE 1
+#define HTTP_FALSE 0
+
+#define INIT_STATE_MACHINE(m) \
+do {\
+ (m)->pos = 0;\
+ (m)->buf = NULL;\
+ (m)->token = SYNTAX_ERROR;\
+ (m)->stop = HTTP_FALSE;\
+ (m)->state = state_start;\
+} while(0)
+
+#define STATUS_CODE_LEN 4
+
+typedef enum tokens {
+ VERSION,
+ STATUS_CODE,
+ PHRASE,
+ HEADER,
+ NEWLINE,
+ SYNTAX_ERROR
+} token_t;
+
+typedef enum accept_states {
+ ASWR,
+ ASNR,
+ NOAS
+} accept_state_t;
+
+typedef struct state_machines {
+ accept_state_t(*state) (char, struct state_machines *);
+ int pos;
+ char *buf;
+ ssize_t buf_len;
+ int stop;
+ token_t token;
+} state_machine_t;
+
+typedef enum http_methods {
+ GET,
+ HEAD,
+ POST,
+ DELETE,
+ PUT
+} http_method_t;
+
+typedef struct http_headers {
+ char *field_name;
+ char *value;
+} http_header_t;
+
+typedef struct http_requests {
+ http_method_t method;
+ char *version;
+ char *url;
+ http_header_t *headers;
+ ssize_t header_len;
+ char *body;
+ ssize_t body_len;
+} http_request_t;
+
+typedef struct http_responses {
+ char *version;
+ int status_code;
+ char *phrase;
+ http_header_t *headers;
+ ssize_t header_len;
+ char *body;
+ int body_len;
+} http_response_t;
+
+token_t get_next_token(state_machine_t * sm);
+int http_parse_response(char *buf, ssize_t buf_len, http_response_t * response);
+int http_req(http_request_t * req, http_response_t * res);
+void free_http_response(http_response_t * response);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+/*
+ * $Id: json.h,v 1.6 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _json_h_
+#define _json_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bits.h"
+#include "debug.h"
+#include "linkhash.h"
+#include "arraylist.h"
+#include "json_util.h"
+#include "json_object.h"
+#include "json_tokener.h"
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_object.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,537 @@
+/*
+ * $Id: json_object.c,v 1.17 2006/07/25 03:24:50 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "debug.h"
+#include "printbuf.h"
+#include "linkhash.h"
+#include "arraylist.h"
+#include "json_object.h"
+#include "json_object_private.h"
+#include "json_tokener.h"
+
+#if !HAVE_STRNDUP
+
+char *strndup(const char *str, size_t n);
+
+#endif /* !HAVE_STRNDUP */
+
+/* #define REFCOUNT_DEBUG 1 */
+
+char *json_number_chars = "0123456789.+-e";
+char *json_hex_chars = "0123456789abcdef";
+
+#ifdef REFCOUNT_DEBUG
+static char *json_type_name[] = {
+ "null",
+ "boolean",
+ "double",
+ "int",
+ "object",
+ "array",
+ "string",
+};
+#endif /* REFCOUNT_DEBUG */
+
+static void json_object_generic_delete(struct json_object *this);
+static struct json_object *json_object_new(enum json_type o_type);
+
+
+/* ref count debugging */
+
+#ifdef REFCOUNT_DEBUG
+
+static struct lh_table *json_object_table;
+
+static void json_object_init() __attribute__ ((constructor));
+static void json_object_init()
+{
+ mc_debug("json_object_init: creating object table\n");
+ json_object_table = lh_kptr_table_new(128, "json_object_table", NULL);
+}
+
+static void json_object_fini() __attribute__ ((destructor));
+static void json_object_fini()
+{
+ struct lh_entry *ent;
+ if (mc_get_debug() && json_object_table->count) {
+ mc_debug("json_object_fini: %d referenced objects at exit\n", json_object_table->count);
+ lh_foreach(json_object_table, ent) {
+ struct json_object *obj = (struct json_object *) ent->v;
+ mc_debug("\t%s:%p\n", json_type_name[obj->o_type], obj);
+ }
+ }
+ mc_debug("json_object_fini: freeing object table\n");
+ lh_table_free(json_object_table);
+}
+#endif /* REFCOUNT_DEBUG */
+
+
+/* string escaping */
+
+static int json_escape_str(struct printbuf *pb, char *str)
+{
+ int pos = 0, start_offset = 0;
+ unsigned char c;
+ do {
+ c = str[pos];
+ switch (c) {
+ case '\0':
+ break;
+ case '\b':
+ case '\n':
+ case '\r':
+ case '\t':
+ case '"':
+ case '\\':
+ case '/':
+ if (pos - start_offset > 0)
+ printbuf_memappend(pb, str + start_offset, pos - start_offset);
+ if (c == '\b')
+ printbuf_memappend(pb, "\\b", 2);
+ else if (c == '\n')
+ printbuf_memappend(pb, "\\n", 2);
+ else if (c == '\r')
+ printbuf_memappend(pb, "\\r", 2);
+ else if (c == '\t')
+ printbuf_memappend(pb, "\\t", 2);
+ else if (c == '"')
+ printbuf_memappend(pb, "\\\"", 2);
+ else if (c == '\\')
+ printbuf_memappend(pb, "\\\\", 2);
+ else if (c == '/')
+ printbuf_memappend(pb, "\\/", 2);
+ start_offset = ++pos;
+ break;
+ default:
+ if (c < ' ') {
+ if (pos - start_offset > 0)
+ printbuf_memappend(pb, str + start_offset, pos - start_offset);
+ sprintbuf(pb, "\\u00%c%c", json_hex_chars[c >> 4], json_hex_chars[c & 0xf]);
+ start_offset = ++pos;
+ } else
+ pos++;
+ }
+ } while (c);
+ if (pos - start_offset > 0)
+ printbuf_memappend(pb, str + start_offset, pos - start_offset);
+ return 0;
+}
+
+
+/* reference counting */
+
+extern struct json_object *json_object_get(struct json_object *this)
+{
+ if (this) {
+ this->_ref_count++;
+ }
+ return this;
+}
+
+extern void json_object_put(struct json_object *this)
+{
+ if (this) {
+ this->_ref_count--;
+ if (!this->_ref_count)
+ this->_delete(this);
+ }
+}
+
+
+/* generic object construction and destruction parts */
+
+static void json_object_generic_delete(struct json_object *this)
+{
+#ifdef REFCOUNT_DEBUG
+ mc_debug("json_object_delete_%s: %p\n", json_type_name[this->o_type], this);
+ lh_table_delete(json_object_table, this);
+#endif /* REFCOUNT_DEBUG */
+ printbuf_free(this->_pb);
+ free(this);
+}
+
+static struct json_object *json_object_new(enum json_type o_type)
+{
+ struct json_object *this = calloc(sizeof(struct json_object), 1);
+ if (!this)
+ return NULL;
+ this->o_type = o_type;
+ this->_ref_count = 1;
+ this->_delete = &json_object_generic_delete;
+#ifdef REFCOUNT_DEBUG
+ lh_table_insert(json_object_table, this, this);
+ mc_debug("json_object_new_%s: %p\n", json_type_name[this->o_type], this);
+#endif /* REFCOUNT_DEBUG */
+ return this;
+}
+
+
+/* type checking functions */
+
+int json_object_is_type(struct json_object *this, enum json_type type)
+{
+ return (this->o_type == type);
+}
+
+enum json_type json_object_get_type(struct json_object *this)
+{
+ return this->o_type;
+}
+
+
+/* json_object_to_json_string */
+
+char *json_object_to_json_string(struct json_object *this)
+{
+ if (!this)
+ return "null";
+ if (!this->_pb) {
+ if (!(this->_pb = printbuf_new()))
+ return NULL;
+ } else {
+ printbuf_reset(this->_pb);
+ }
+ if (this->_to_json_string(this, this->_pb) < 0)
+ return NULL;
+ return this->_pb->buf;
+}
+
+
+/* json_object_object */
+
+static int json_object_object_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ int i = 0;
+ struct json_object_iter iter;
+ sprintbuf(pb, "{");
+
+ /* CAW: scope operator to make ANSI correctness */
+ /* CAW: switched to json_object_object_foreachC which uses an iterator struct */
+ json_object_object_foreachC(this, iter) {
+ if (i)
+ sprintbuf(pb, ",");
+ sprintbuf(pb, " \"");
+ json_escape_str(pb, iter.key);
+ sprintbuf(pb, "\": ");
+ if (iter.val == NULL)
+ sprintbuf(pb, "null");
+ else
+ iter.val->_to_json_string(iter.val, pb);
+ i++;
+ }
+
+ return sprintbuf(pb, " }");
+}
+
+static void json_object_lh_entry_free(struct lh_entry *ent)
+{
+ free(ent->k);
+ json_object_put((struct json_object *) ent->v);
+}
+
+static void json_object_object_delete(struct json_object *this)
+{
+ lh_table_free(this->o.c_object);
+ json_object_generic_delete(this);
+}
+
+struct json_object *json_object_new_object()
+{
+ struct json_object *this = json_object_new(json_type_object);
+ if (!this)
+ return NULL;
+ this->_delete = &json_object_object_delete;
+ this->_to_json_string = &json_object_object_to_json_string;
+ this->o.c_object = lh_kchar_table_new(JSON_OBJECT_DEF_HASH_ENTIRES, NULL, &json_object_lh_entry_free);
+ return this;
+}
+
+struct lh_table *json_object_get_object(struct json_object *this)
+{
+ if (!this)
+ return NULL;
+ switch (this->o_type) {
+ case json_type_object:
+ return this->o.c_object;
+ default:
+ return NULL;
+ }
+}
+
+void json_object_object_add(struct json_object *this, char *key, struct json_object *val)
+{
+ lh_table_delete(this->o.c_object, key);
+ lh_table_insert(this->o.c_object, strdup(key), val);
+}
+
+struct json_object *json_object_object_get(struct json_object *this, char *key)
+{
+ return (struct json_object *) lh_table_lookup(this->o.c_object, key);
+}
+
+void json_object_object_del(struct json_object *this, char *key)
+{
+ lh_table_delete(this->o.c_object, key);
+}
+
+
+/* json_object_boolean */
+
+static int json_object_boolean_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ if (this->o.c_boolean)
+ return sprintbuf(pb, "true");
+ else
+ return sprintbuf(pb, "false");
+}
+
+struct json_object *json_object_new_boolean(boolean b)
+{
+ struct json_object *this = json_object_new(json_type_boolean);
+ if (!this)
+ return NULL;
+ this->_to_json_string = &json_object_boolean_to_json_string;
+ this->o.c_boolean = b;
+ return this;
+}
+
+boolean json_object_get_boolean(struct json_object * this)
+{
+ if (!this)
+ return FALSE;
+ switch (this->o_type) {
+ case json_type_boolean:
+ return this->o.c_boolean;
+ case json_type_int:
+ return (this->o.c_int != 0);
+ case json_type_double:
+ return (this->o.c_double != 0);
+ case json_type_string:
+ if (strlen(this->o.c_string))
+ return TRUE;
+ default:
+ return TRUE;
+ }
+}
+
+
+/* json_object_int */
+
+static int json_object_int_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ return sprintbuf(pb, "%d", this->o.c_int);
+}
+
+struct json_object *json_object_new_int(int i)
+{
+ struct json_object *this = json_object_new(json_type_int);
+ if (!this)
+ return NULL;
+ this->_to_json_string = &json_object_int_to_json_string;
+ this->o.c_int = i;
+ return this;
+}
+
+int json_object_get_int(struct json_object *this)
+{
+ int cint;
+
+ if (!this)
+ return 0;
+ switch (this->o_type) {
+ case json_type_int:
+ return this->o.c_int;
+ case json_type_double:
+ return (int) this->o.c_double;
+ case json_type_boolean:
+ return this->o.c_boolean;
+ case json_type_string:
+ if (sscanf(this->o.c_string, "%d", &cint) == 1)
+ return cint;
+ default:
+ return 0;
+ }
+}
+
+
+/* json_object_double */
+
+static int json_object_double_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ return sprintbuf(pb, "%lf", this->o.c_double);
+}
+
+struct json_object *json_object_new_double(double d)
+{
+ struct json_object *this = json_object_new(json_type_double);
+ if (!this)
+ return NULL;
+ this->_to_json_string = &json_object_double_to_json_string;
+ this->o.c_double = d;
+ return this;
+}
+
+double json_object_get_double(struct json_object *this)
+{
+ double cdouble;
+
+ if (!this)
+ return 0.0;
+ switch (this->o_type) {
+ case json_type_double:
+ return this->o.c_double;
+ case json_type_int:
+ return this->o.c_int;
+ case json_type_boolean:
+ return this->o.c_boolean;
+ case json_type_string:
+ if (sscanf(this->o.c_string, "%lf", &cdouble) == 1)
+ return cdouble;
+ default:
+ return 0.0;
+ }
+}
+
+
+/* json_object_string */
+
+static int json_object_string_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ sprintbuf(pb, "\"");
+ json_escape_str(pb, this->o.c_string);
+ sprintbuf(pb, "\"");
+ return 0;
+}
+
+static void json_object_string_delete(struct json_object *this)
+{
+ free(this->o.c_string);
+ json_object_generic_delete(this);
+}
+
+struct json_object *json_object_new_string(char *s)
+{
+ struct json_object *this = json_object_new(json_type_string);
+ if (!this)
+ return NULL;
+ this->_delete = &json_object_string_delete;
+ this->_to_json_string = &json_object_string_to_json_string;
+ this->o.c_string = strdup(s);
+ return this;
+}
+
+struct json_object *json_object_new_string_len(char *s, int len)
+{
+ struct json_object *this = json_object_new(json_type_string);
+ if (!this)
+ return NULL;
+ this->_delete = &json_object_string_delete;
+ this->_to_json_string = &json_object_string_to_json_string;
+ this->o.c_string = strndup(s, len);
+ return this;
+}
+
+char *json_object_get_string(struct json_object *this)
+{
+ if (!this)
+ return NULL;
+ switch (this->o_type) {
+ case json_type_string:
+ return this->o.c_string;
+ default:
+ return json_object_to_json_string(this);
+ }
+}
+
+
+/* json_object_array */
+
+static int json_object_array_to_json_string(struct json_object *this, struct printbuf *pb)
+{
+ int i;
+ sprintbuf(pb, "[");
+ for (i = 0; i < json_object_array_length(this); i++) {
+ struct json_object *val;
+ if (i) {
+ sprintbuf(pb, ", ");
+ } else {
+ sprintbuf(pb, " ");
+ }
+
+ val = json_object_array_get_idx(this, i);
+ if (val == NULL) {
+ sprintbuf(pb, "null");
+ } else {
+ val->_to_json_string(val, pb);
+ }
+ }
+ return sprintbuf(pb, " ]");
+}
+
+static void json_object_array_entry_free(void *data)
+{
+ json_object_put((struct json_object *) data);
+}
+
+static void json_object_array_delete(struct json_object *this)
+{
+ array_list_free(this->o.c_array);
+ json_object_generic_delete(this);
+}
+
+struct json_object *json_object_new_array()
+{
+ struct json_object *this = json_object_new(json_type_array);
+ if (!this)
+ return NULL;
+ this->_delete = &json_object_array_delete;
+ this->_to_json_string = &json_object_array_to_json_string;
+ this->o.c_array = array_list_new(&json_object_array_entry_free);
+ return this;
+}
+
+struct array_list *json_object_get_array(struct json_object *this)
+{
+ if (!this)
+ return NULL;
+ switch (this->o_type) {
+ case json_type_array:
+ return this->o.c_array;
+ default:
+ return NULL;
+ }
+}
+
+int json_object_array_length(struct json_object *this)
+{
+ return array_list_length(this->o.c_array);
+}
+
+int json_object_array_add(struct json_object *this, struct json_object *val)
+{
+ return array_list_add(this->o.c_array, val);
+}
+
+int json_object_array_put_idx(struct json_object *this, int idx, struct json_object *val)
+{
+ return array_list_put_idx(this->o.c_array, idx, val);
+}
+
+struct json_object *json_object_array_get_idx(struct json_object *this, int idx)
+{
+ return (struct json_object *) array_list_get_idx(this->o.c_array, idx);
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_object.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,303 @@
+/*
+ * $Id: json_object.h,v 1.12 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _json_object_h_
+#define _json_object_h_
+
+#define JSON_OBJECT_DEF_HASH_ENTIRES 16
+
+#undef FALSE
+#define FALSE ((boolean)0)
+
+#undef TRUE
+#define TRUE ((boolean)1)
+
+extern char *json_number_chars;
+extern char *json_hex_chars;
+
+/* forward structure definitions */
+
+typedef int boolean;
+struct printbuf;
+struct lh_table;
+struct array_list;
+struct json_object;
+struct json_object_iter;
+
+/* supported object types */
+
+enum json_type {
+ json_type_null,
+ json_type_boolean,
+ json_type_double,
+ json_type_int,
+ json_type_object,
+ json_type_array,
+ json_type_string
+};
+
+/* reference counting functions */
+
+/**
+ * Increment the reference count of json_object
+ * @param obj the json_object instance
+ */
+extern struct json_object *json_object_get(struct json_object *obj);
+
+/**
+ * Decrement the reference count of json_object and free if it reaches zero
+ * @param obj the json_object instance
+ */
+extern void json_object_put(struct json_object *obj);
+
+
+/**
+ * Check if the json_object is of a given type
+ * @param obj the json_object instance
+ * @param type one of:
+ json_type_boolean,
+ json_type_double,
+ json_type_int,
+ json_type_object,
+ json_type_array,
+ json_type_string,
+ */
+extern int json_object_is_type(struct json_object *obj, enum json_type type);
+
+/**
+ * Get the type of the json_object
+ * @param obj the json_object instance
+ * @returns type being one of:
+ json_type_boolean,
+ json_type_double,
+ json_type_int,
+ json_type_object,
+ json_type_array,
+ json_type_string,
+ */
+extern enum json_type json_object_get_type(struct json_object *obj);
+
+
+/** Stringify object to json format
+ * @param obj the json_object instance
+ * @returns a string in JSON format
+ */
+extern char *json_object_to_json_string(struct json_object *obj);
+
+
+/* object type methods */
+
+/** Create a new empty object
+ * @returns a json_object of type json_type_object
+ */
+extern struct json_object *json_object_new_object();
+
+/** Get the hashtable of a json_object of type json_type_object
+ * @param obj the json_object instance
+ * @returns a linkhash
+ */
+extern struct lh_table *json_object_get_object(struct json_object *obj);
+
+/** Add an object field to a json_object of type json_type_object
+ *
+ * The reference count will *not* be incremented. This is to make adding
+ * fields to objects in code more compact. If you want to retain a reference
+ * to an added object you must wrap the passed object with json_object_get
+ *
+ * @param obj the json_object instance
+ * @param key the object field name (a private copy will be duplicated)
+ * @param val a json_object or NULL member to associate with the given field
+ */
+extern void json_object_object_add(struct json_object *obj, char *key, struct json_object *val);
+
+/** Get the json_object associate with a given object field
+ * @param obj the json_object instance
+ * @param key the object field name
+ * @returns the json_object associated with the given field name
+ */
+extern struct json_object *json_object_object_get(struct json_object *obj, char *key);
+
+/** Delete the given json_object field
+ *
+ * The reference count will be decremented for the deleted object
+ *
+ * @param obj the json_object instance
+ * @param key the object field name
+ */
+extern void json_object_object_del(struct json_object *obj, char *key);
+
+/** Iterate through all keys and values of an object
+ * @param obj the json_object instance
+ * @param key the local name for the char* key variable defined in the body
+ * @param val the local name for the json_object* object variable defined in the body
+ */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+
+# define json_object_object_foreach(obj,key,val) \
+ for(entry = json_object_get_object(obj)->head; ({ if(entry) { key = (char*)entry->k; val = (struct json_object*)entry->v; } ; entry; }); entry = entry->next )
+
+#else /* ANSI C or MSC */
+
+# define json_object_object_foreach(obj,key,val) \
+ for(entry = json_object_get_object(obj)->head; (entry ? (key = (char*)entry->k, val = (struct json_object*)entry->v, entry) : 0); entry = entry->next)
+
+#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */
+
+/** Iterate through all keys and values of an object (ANSI C Safe)
+ * @param obj the json_object instance
+ * @param iter the object iterator
+ */
+#define json_object_object_foreachC(obj,iter) \
+ for(iter.entry = json_object_get_object(obj)->head; (iter.entry ? (iter.key = (char*)iter.entry->k, iter.val = (struct json_object*)iter.entry->v, iter.entry) : 0); iter.entry = iter.entry->next)
+
+/* Array type methods */
+
+/** Create a new empty json_object of type json_type_array
+ * @returns a json_object of type json_type_array
+ */
+extern struct json_object *json_object_new_array();
+
+/** Get the arraylist of a json_object of type json_type_array
+ * @param obj the json_object instance
+ * @returns an arraylist
+ */
+extern struct array_list *json_object_get_array(struct json_object *obj);
+
+/** Get the length of a json_object of type json_type_array
+ * @param obj the json_object instance
+ * @returns an int
+ */
+extern int json_object_array_length(struct json_object *obj);
+
+/** Add an element to the end of a json_object of type json_type_array
+ *
+ * The reference count will *not* be incremented. This is to make adding
+ * fields to objects in code more compact. If you want to retain a reference
+ * to an added object you must wrap the passed object with json_object_get
+ *
+ * @param obj the json_object instance
+ * @param val the json_object to be added
+ */
+extern int json_object_array_add(struct json_object *obj, struct json_object *val);
+
+/** Insert or replace an element at a specified index in an array (a json_object of type json_type_array)
+ *
+ * The reference count will *not* be incremented. This is to make adding
+ * fields to objects in code more compact. If you want to retain a reference
+ * to an added object you must wrap the passed object with json_object_get
+ *
+ * The reference count of a replaced object will be decremented.
+ *
+ * The array size will be automatically be expanded to the size of the
+ * index if the index is larger than the current size.
+ *
+ * @param obj the json_object instance
+ * @param idx the index to insert the element at
+ * @param val the json_object to be added
+ */
+extern int json_object_array_put_idx(struct json_object *obj, int idx, struct json_object *val);
+
+/** Get the element at specificed index of the array (a json_object of type json_type_array)
+ * @param obj the json_object instance
+ * @param idx the index to get the element at
+ * @returns the json_object at the specified index (or NULL)
+ */
+extern struct json_object *json_object_array_get_idx(struct json_object *obj, int idx);
+
+/* boolean type methods */
+
+/** Create a new empty json_object of type json_type_boolean
+ * @param b a boolean TRUE or FALSE (0 or 1)
+ * @returns a json_object of type json_type_boolean
+ */
+extern struct json_object *json_object_new_boolean(boolean b);
+
+/** Get the boolean value of a json_object
+ *
+ * The type is coerced to a boolean if the passed object is not a boolean.
+ * integer and double objects will return FALSE if there value is zero
+ * or TRUE otherwise. If the passed object is a string it will return
+ * TRUE if it has a non zero length. If any other object type is passed
+ * TRUE will be returned if the object is not NULL.
+ *
+ * @param obj the json_object instance
+ * @returns a boolean
+ */
+extern boolean json_object_get_boolean(struct json_object *obj);
+
+
+/* int type methods */
+
+/** Create a new empty json_object of type json_type_int
+ * @param i the integer
+ * @returns a json_object of type json_type_int
+ */
+extern struct json_object *json_object_new_int(int i);
+
+/** Get the int value of a json_object
+ *
+ * The type is coerced to a int if the passed object is not a int.
+ * double objects will return their integer conversion. Strings will be
+ * parsed as an integer. If no conversion exists then 0 is returned.
+ *
+ * @param obj the json_object instance
+ * @returns an int
+ */
+extern int json_object_get_int(struct json_object *obj);
+
+
+/* double type methods */
+
+/** Create a new empty json_object of type json_type_double
+ * @param d the double
+ * @returns a json_object of type json_type_double
+ */
+extern struct json_object *json_object_new_double(double d);
+
+/** Get the double value of a json_object
+ *
+ * The type is coerced to a double if the passed object is not a double.
+ * integer objects will return their dboule conversion. Strings will be
+ * parsed as a double. If no conversion exists then 0.0 is returned.
+ *
+ * @param obj the json_object instance
+ * @returns an double
+ */
+extern double json_object_get_double(struct json_object *obj);
+
+
+/* string type methods */
+
+/** Create a new empty json_object of type json_type_string
+ *
+ * A copy of the string is made and the memory is managed by the json_object
+ *
+ * @param s the string
+ * @returns a json_object of type json_type_string
+ */
+extern struct json_object *json_object_new_string(char *s);
+
+extern struct json_object *json_object_new_string_len(char *s, int len);
+
+/** Get the string value of a json_object
+ *
+ * If the passed object is not of type json_type_string then the JSON
+ * representation of the object is returned.
+ *
+ * The returned string memory is managed by the json_object and will
+ * be freed when the reference count of the json_object drops to zero.
+ *
+ * @param obj the json_object instance
+ * @returns a string
+ */
+extern char *json_object_get_string(struct json_object *obj);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object_private.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object_private.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_object_private.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object_private.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_object_private.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,41 @@
+/*
+ * $Id: json_object_private.h,v 1.4 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _json_object_private_h_
+#define _json_object_private_h_
+
+typedef void (json_object_delete_fn) (struct json_object * o);
+typedef int (json_object_to_json_string_fn) (struct json_object * o, struct printbuf * pb);
+
+struct json_object {
+ enum json_type o_type;
+ json_object_delete_fn *_delete;
+ json_object_to_json_string_fn *_to_json_string;
+ int _ref_count;
+ struct printbuf *_pb;
+ union data {
+ boolean c_boolean;
+ double c_double;
+ int c_int;
+ struct lh_table *c_object;
+ struct array_list *c_array;
+ char *c_string;
+ } o;
+};
+
+/* CAW: added for ANSI C iteration correctness */
+struct json_object_iter {
+ char *key;
+ struct json_object *val;
+ struct lh_entry *entry;
+};
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_tokener.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,522 @@
+/*
+ * $Id: json_tokener.c,v 1.20 2006/07/25 03:24:50 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "bits.h"
+#include "debug.h"
+#include "printbuf.h"
+#include "arraylist.h"
+#include "json_object.h"
+#include "json_tokener.h"
+
+
+#if !HAVE_STRNCASECMP && defined(_MSC_VER)
+ /* MSC has the version as _strnicmp */
+# define strncasecmp _strnicmp
+#elif !HAVE_STRNCASECMP
+# error You do not have strncasecmp on your system.
+#endif /* HAVE_STRNCASECMP */
+
+
+static const char *json_null_str = "null";
+static const char *json_true_str = "true";
+static const char *json_false_str = "false";
+
+const char *json_tokener_errors[] = {
+ "success",
+ "continue",
+ "nesting to deep",
+ "unexpected end of data",
+ "unexpected character",
+ "null expected",
+ "boolean expected",
+ "number expected",
+ "array value separator ',' expected",
+ "quoted object property name expected",
+ "object property name separator ':' expected",
+ "object value separator ',' expected",
+ "invalid string sequence",
+ "expected comment",
+};
+
+
+struct json_tokener *json_tokener_new()
+{
+ struct json_tokener *tok = calloc(1, sizeof(struct json_tokener));
+ tok->pb = printbuf_new();
+ json_tokener_reset(tok);
+ return tok;
+}
+
+void json_tokener_free(struct json_tokener *tok)
+{
+ json_tokener_reset(tok);
+ if (tok)
+ printbuf_free(tok->pb);
+ free(tok);
+}
+
+static void json_tokener_reset_level(struct json_tokener *tok, int depth)
+{
+ tok->stack[depth].state = json_tokener_state_eatws;
+ tok->stack[depth].saved_state = json_tokener_state_start;
+ json_object_put(tok->stack[depth].current);
+ tok->stack[depth].current = NULL;
+ free(tok->stack[depth].obj_field_name);
+ tok->stack[depth].obj_field_name = NULL;
+}
+
+void json_tokener_reset(struct json_tokener *tok)
+{
+ int i;
+ for (i = tok->depth; i >= 0; i--)
+ json_tokener_reset_level(tok, i);
+ tok->depth = 0;
+ tok->err = json_tokener_success;
+}
+
+struct json_object *json_tokener_parse(char *str)
+{
+ struct json_tokener *tok;
+ struct json_object *obj;
+
+ tok = json_tokener_new();
+ obj = json_tokener_parse_ex(tok, str, -1);
+ if (tok->err != json_tokener_success)
+ obj = error_ptr(-tok->err);
+ json_tokener_free(tok);
+ return obj;
+}
+
+
+#if !HAVE_STRNDUP
+/* CAW: compliant version of strndup() */
+char *strndup(const char *str, size_t n)
+{
+ if (str) {
+ size_t len = strlen(str);
+ size_t nn = min(len, n);
+ char *s = (char *) malloc(sizeof(char) * (nn + 1));
+
+ if (s) {
+ memcpy(s, str, nn);
+ s[nn] = '\0';
+ }
+
+ return s;
+ }
+
+ return NULL;
+}
+#endif
+
+
+#define state tok->stack[tok->depth].state
+#define saved_state tok->stack[tok->depth].saved_state
+#define current tok->stack[tok->depth].current
+#define obj_field_name tok->stack[tok->depth].obj_field_name
+
+struct json_object *json_tokener_parse_ex(struct json_tokener *tok, char *str, int len)
+{
+ struct json_object *obj = NULL;
+ char c;
+
+ tok->char_offset = 0;
+ tok->err = json_tokener_success;
+
+ do {
+ if (tok->char_offset == len) {
+ if (tok->depth == 0 && state == json_tokener_state_eatws && saved_state == json_tokener_state_finish)
+ tok->err = json_tokener_success;
+ else
+ tok->err = json_tokener_continue;
+ goto out;
+ }
+
+ c = *str;
+ redo_char:
+ switch (state) {
+
+ case json_tokener_state_eatws:
+ if (isspace(c)) {
+ /* okay */
+ } else if (c == '/') {
+ printbuf_reset(tok->pb);
+ printbuf_memappend(tok->pb, &c, 1);
+ state = json_tokener_state_comment_start;
+ } else {
+ state = saved_state;
+ goto redo_char;
+ }
+ break;
+
+ case json_tokener_state_start:
+ switch (c) {
+ case '{':
+ state = json_tokener_state_eatws;
+ saved_state = json_tokener_state_object_field_start;
+ current = json_object_new_object();
+ break;
+ case '[':
+ state = json_tokener_state_eatws;
+ saved_state = json_tokener_state_array;
+ current = json_object_new_array();
+ break;
+ case 'N':
+ case 'n':
+ state = json_tokener_state_null;
+ printbuf_reset(tok->pb);
+ tok->st_pos = 0;
+ goto redo_char;
+ case '"':
+ case '\'':
+ state = json_tokener_state_string;
+ printbuf_reset(tok->pb);
+ tok->quote_char = c;
+ break;
+ case 'T':
+ case 't':
+ case 'F':
+ case 'f':
+ state = json_tokener_state_boolean;
+ printbuf_reset(tok->pb);
+ tok->st_pos = 0;
+ goto redo_char;
+/*
+#if defined(__GNUC__)
+ case '0' ... '9':
+#else
+*/
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+/*
+#endif
+*/
+ case '-':
+ state = json_tokener_state_number;
+ printbuf_reset(tok->pb);
+ tok->is_double = 0;
+ goto redo_char;
+ default:
+ tok->err = json_tokener_error_parse_unexpected;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_finish:
+ if (tok->depth == 0)
+ goto out;
+ obj = json_object_get(current);
+ json_tokener_reset_level(tok, tok->depth);
+ tok->depth--;
+ goto redo_char;
+
+ case json_tokener_state_null:
+ printbuf_memappend(tok->pb, &c, 1);
+ if (strncasecmp(json_null_str, tok->pb->buf, min(tok->st_pos + 1, strlen(json_null_str))) == 0) {
+ if (tok->st_pos == strlen(json_null_str)) {
+ current = NULL;
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+ }
+ } else {
+ tok->err = json_tokener_error_parse_null;
+ goto out;
+ }
+ tok->st_pos++;
+ break;
+
+ case json_tokener_state_comment_start:
+ if (c == '*') {
+ state = json_tokener_state_comment;
+ } else if (c == '/') {
+ state = json_tokener_state_comment_eol;
+ } else {
+ tok->err = json_tokener_error_parse_comment;
+ goto out;
+ }
+ printbuf_memappend(tok->pb, &c, 1);
+ break;
+
+ case json_tokener_state_comment:
+ if (c == '*')
+ state = json_tokener_state_comment_end;
+ printbuf_memappend(tok->pb, &c, 1);
+ break;
+
+ case json_tokener_state_comment_eol:
+ if (c == '\n') {
+ mc_debug("json_tokener_comment: %s\n", tok->pb->buf);
+ state = json_tokener_state_eatws;
+ } else {
+ printbuf_memappend(tok->pb, &c, 1);
+ }
+ break;
+
+ case json_tokener_state_comment_end:
+ printbuf_memappend(tok->pb, &c, 1);
+ if (c == '/') {
+ mc_debug("json_tokener_comment: %s\n", tok->pb->buf);
+ state = json_tokener_state_eatws;
+ } else {
+ state = json_tokener_state_comment;
+ }
+ break;
+
+ case json_tokener_state_string:
+ if (c == tok->quote_char) {
+ current = json_object_new_string(tok->pb->buf);
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ } else if (c == '\\') {
+ saved_state = json_tokener_state_string;
+ state = json_tokener_state_string_escape;
+ } else {
+ printbuf_memappend(tok->pb, &c, 1);
+ }
+ break;
+
+ case json_tokener_state_string_escape:
+ switch (c) {
+ case '"':
+ case '\\':
+ case '/':
+ printbuf_memappend(tok->pb, &c, 1);
+ state = saved_state;
+ break;
+ case 'b':
+ case 'n':
+ case 'r':
+ case 't':
+ if (c == 'b')
+ printbuf_memappend(tok->pb, "\b", 1);
+ else if (c == 'n')
+ printbuf_memappend(tok->pb, "\n", 1);
+ else if (c == 'r')
+ printbuf_memappend(tok->pb, "\r", 1);
+ else if (c == 't')
+ printbuf_memappend(tok->pb, "\t", 1);
+ state = saved_state;
+ break;
+ case 'u':
+ tok->ucs_char = 0;
+ tok->st_pos = 0;
+ state = json_tokener_state_escape_unicode;
+ break;
+ default:
+ tok->err = json_tokener_error_parse_string;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_escape_unicode:
+ if (strchr(json_hex_chars, c)) {
+ tok->ucs_char += ((unsigned int) hexdigit(c) << ((3 - tok->st_pos++) * 4));
+ if (tok->st_pos == 4) {
+ unsigned char utf_out[3];
+ if (tok->ucs_char < 0x80) {
+ utf_out[0] = tok->ucs_char;
+ printbuf_memappend(tok->pb, (char *) utf_out, 1);
+ } else if (tok->ucs_char < 0x800) {
+ utf_out[0] = 0xc0 | (tok->ucs_char >> 6);
+ utf_out[1] = 0x80 | (tok->ucs_char & 0x3f);
+ printbuf_memappend(tok->pb, (char *) utf_out, 2);
+ } else {
+ utf_out[0] = 0xe0 | (tok->ucs_char >> 12);
+ utf_out[1] = 0x80 | ((tok->ucs_char >> 6) & 0x3f);
+ utf_out[2] = 0x80 | (tok->ucs_char & 0x3f);
+ printbuf_memappend(tok->pb, (char *) utf_out, 3);
+ }
+ state = saved_state;
+ }
+ } else {
+ tok->err = json_tokener_error_parse_string;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_boolean:
+ printbuf_memappend(tok->pb, &c, 1);
+ if (strncasecmp(json_true_str, tok->pb->buf, min(tok->st_pos + 1, strlen(json_true_str))) == 0) {
+ if (tok->st_pos == strlen(json_true_str)) {
+ current = json_object_new_boolean(1);
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+ }
+ } else if (strncasecmp(json_false_str, tok->pb->buf, min(tok->st_pos + 1, strlen(json_false_str))) == 0) {
+ if (tok->st_pos == strlen(json_false_str)) {
+ current = json_object_new_boolean(0);
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+ }
+ } else {
+ tok->err = json_tokener_error_parse_boolean;
+ goto out;
+ }
+ tok->st_pos++;
+ break;
+
+ case json_tokener_state_number:
+ if (c && strchr(json_number_chars, c)) {
+ printbuf_memappend(tok->pb, &c, 1);
+ if (c == '.' || c == 'e')
+ tok->is_double = 1;
+ } else {
+ int numi;
+ double numd;
+ if (!tok->is_double && sscanf(tok->pb->buf, "%d", &numi) == 1) {
+ current = json_object_new_int(numi);
+ } else if (tok->is_double && sscanf(tok->pb->buf, "%lf", &numd) == 1) {
+ current = json_object_new_double(numd);
+ } else {
+ tok->err = json_tokener_error_parse_number;
+ goto out;
+ }
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+ }
+ break;
+
+ case json_tokener_state_array:
+ if (c == ']') {
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ } else {
+ if (tok->depth >= JSON_TOKENER_MAX_DEPTH - 1) {
+ tok->err = json_tokener_error_depth;
+ goto out;
+ }
+ state = json_tokener_state_array_add;
+ tok->depth++;
+ json_tokener_reset_level(tok, tok->depth);
+ goto redo_char;
+ }
+ break;
+
+ case json_tokener_state_array_add:
+ json_object_array_add(current, obj);
+ saved_state = json_tokener_state_array_sep;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+
+ case json_tokener_state_array_sep:
+ if (c == ']') {
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ } else if (c == ',') {
+ saved_state = json_tokener_state_array;
+ state = json_tokener_state_eatws;
+ } else {
+ tok->err = json_tokener_error_parse_array;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_object_field_start:
+ if (c == '}') {
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ } else if (c == '"' || c == '\'') {
+ tok->quote_char = c;
+ printbuf_reset(tok->pb);
+ state = json_tokener_state_object_field;
+ } else {
+ tok->err = json_tokener_error_parse_object_key_name;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_object_field:
+ if (c == tok->quote_char) {
+ obj_field_name = strdup(tok->pb->buf);
+ saved_state = json_tokener_state_object_field_end;
+ state = json_tokener_state_eatws;
+ } else if (c == '\\') {
+ saved_state = json_tokener_state_object_field;
+ state = json_tokener_state_string_escape;
+ } else {
+ printbuf_memappend(tok->pb, &c, 1);
+ }
+ break;
+
+ case json_tokener_state_object_field_end:
+ if (c == ':') {
+ saved_state = json_tokener_state_object_value;
+ state = json_tokener_state_eatws;
+ } else {
+ tok->err = json_tokener_error_parse_object_key_sep;
+ goto out;
+ }
+ break;
+
+ case json_tokener_state_object_value:
+ if (tok->depth >= JSON_TOKENER_MAX_DEPTH - 1) {
+ tok->err = json_tokener_error_depth;
+ goto out;
+ }
+ state = json_tokener_state_object_value_add;
+ tok->depth++;
+ json_tokener_reset_level(tok, tok->depth);
+ goto redo_char;
+
+ case json_tokener_state_object_value_add:
+ json_object_object_add(current, obj_field_name, obj);
+ free(obj_field_name);
+ obj_field_name = NULL;
+ saved_state = json_tokener_state_object_sep;
+ state = json_tokener_state_eatws;
+ goto redo_char;
+
+ case json_tokener_state_object_sep:
+ if (c == '}') {
+ saved_state = json_tokener_state_finish;
+ state = json_tokener_state_eatws;
+ } else if (c == ',') {
+ saved_state = json_tokener_state_object_field_start;
+ state = json_tokener_state_eatws;
+ } else {
+ tok->err = json_tokener_error_parse_object_value_sep;
+ goto out;
+ }
+ break;
+
+ }
+ str++;
+ tok->char_offset++;
+ } while (c);
+
+ if (state != json_tokener_state_finish && saved_state != json_tokener_state_finish)
+ tok->err = json_tokener_error_parse_eof;
+
+ out:
+ if (tok->err == json_tokener_success)
+ return json_object_get(current);
+ mc_debug("json_tokener_parse_ex: error %s at offset %d\n", json_tokener_errors[tok->err], tok->char_offset);
+ return NULL;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_tokener.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_tokener.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,86 @@
+/*
+ * $Id: json_tokener.h,v 1.10 2006/07/25 03:24:50 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _json_tokener_h_
+#define _json_tokener_h_
+
+#include "json_object.h"
+
+enum json_tokener_error {
+ json_tokener_success,
+ json_tokener_continue,
+ json_tokener_error_depth,
+ json_tokener_error_parse_eof,
+ json_tokener_error_parse_unexpected,
+ json_tokener_error_parse_null,
+ json_tokener_error_parse_boolean,
+ json_tokener_error_parse_number,
+ json_tokener_error_parse_array,
+ json_tokener_error_parse_object_key_name,
+ json_tokener_error_parse_object_key_sep,
+ json_tokener_error_parse_object_value_sep,
+ json_tokener_error_parse_string,
+ json_tokener_error_parse_comment
+};
+
+enum json_tokener_state {
+ json_tokener_state_eatws,
+ json_tokener_state_start,
+ json_tokener_state_finish,
+ json_tokener_state_null,
+ json_tokener_state_comment_start,
+ json_tokener_state_comment,
+ json_tokener_state_comment_eol,
+ json_tokener_state_comment_end,
+ json_tokener_state_string,
+ json_tokener_state_string_escape,
+ json_tokener_state_escape_unicode,
+ json_tokener_state_boolean,
+ json_tokener_state_number,
+ json_tokener_state_array,
+ json_tokener_state_array_add,
+ json_tokener_state_array_sep,
+ json_tokener_state_object_field_start,
+ json_tokener_state_object_field,
+ json_tokener_state_object_field_end,
+ json_tokener_state_object_value,
+ json_tokener_state_object_value_add,
+ json_tokener_state_object_sep
+};
+
+struct json_tokener_srec {
+ enum json_tokener_state state, saved_state;
+ struct json_object *obj;
+ struct json_object *current;
+ char *obj_field_name;
+};
+
+#define JSON_TOKENER_MAX_DEPTH 32
+
+struct json_tokener {
+ char *str;
+ struct printbuf *pb;
+ int depth, is_double, st_pos, char_offset;
+ enum json_tokener_error err;
+ unsigned int ucs_char;
+ char quote_char;
+ struct json_tokener_srec stack[JSON_TOKENER_MAX_DEPTH];
+};
+
+extern const char *json_tokener_errors[];
+
+extern struct json_tokener *json_tokener_new();
+extern void json_tokener_free(struct json_tokener *tok);
+extern void json_tokener_reset(struct json_tokener *tok);
+extern struct json_object *json_tokener_parse(char *str);
+extern struct json_object *json_tokener_parse_ex(struct json_tokener *tok, char *str, int len);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_util.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,119 @@
+/*
+ * $Id: json_util.c,v 1.4 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <errno.h>
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif /* HAVE_SYS_STAT_H */
+
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif /* HAVE_FCNTL_H */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include <io.h>
+#endif /* defined(WIN32) */
+
+#if !HAVE_OPEN && defined(WIN32)
+# define open _open
+#endif
+
+
+#include "bits.h"
+#include "debug.h"
+#include "printbuf.h"
+#include "json_object.h"
+#include "json_tokener.h"
+#include "json_util.h"
+
+struct json_object *json_object_from_file(char *filename)
+{
+ struct printbuf *pb;
+ struct json_object *obj;
+ char buf[JSON_FILE_BUF_SIZE];
+ int fd, ret;
+
+ if ((fd = open(filename, O_RDONLY)) < 0) {
+ mc_error("json_object_from_file: error reading file %s: %s\n", filename, strerror(errno));
+ return error_ptr(-1);
+ }
+ if (!(pb = printbuf_new())) {
+ mc_error("json_object_from_file: printbuf_new failed\n");
+ return error_ptr(-1);
+ }
+ while ((ret = read(fd, buf, JSON_FILE_BUF_SIZE)) > 0) {
+ printbuf_memappend(pb, buf, ret);
+ }
+ close(fd);
+ if (ret < 0) {
+ mc_abort("json_object_from_file: error reading file %s: %s\n", filename, strerror(errno));
+ printbuf_free(pb);
+ return error_ptr(-1);
+ }
+ obj = json_tokener_parse(pb->buf);
+ printbuf_free(pb);
+ return obj;
+}
+
+int json_object_to_file(char *filename, struct json_object *obj)
+{
+ char *json_str;
+ int fd, ret;
+ unsigned int wpos, wsize;
+
+ if (!obj) {
+ mc_error("json_object_to_file: object is null\n");
+ return -1;
+ }
+
+ if ((fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, 0644)) < 0) {
+ mc_error("json_object_to_file: error opening file %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ if (!(json_str = json_object_to_json_string(obj))) {
+ return -1;
+ }
+
+
+ wsize = (unsigned int) (strlen(json_str) & UINT_MAX); /* CAW: probably unnecessary, but the most 64bit safe */
+ wpos = 0;
+ while (wpos < wsize) {
+ if ((ret = write(fd, json_str + wpos, wsize - wpos)) < 0) {
+ close(fd);
+ mc_error("json_object_to_file: error writing file %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ /* because of the above check for ret < 0, we can safely cast and add */
+ wpos += (unsigned int) ret;
+ }
+
+ close(fd);
+ return 0;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/json_util.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/json_util.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+/*
+ * $Id: json_util.h,v 1.4 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _json_util_h_
+#define _json_util_h_
+
+#include "json_object.h"
+
+#define JSON_FILE_BUF_SIZE 4096
+
+/* utlitiy functions */
+extern struct json_object *json_object_from_file(char *filename);
+extern int json_object_to_file(char *filename, struct json_object *obj);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/linkhash.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,226 @@
+/*
+ * $Id: linkhash.c,v 1.4 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <limits.h>
+
+#include "linkhash.h"
+
+void lh_abort(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+ vprintf(msg, ap);
+ exit(1);
+}
+
+uint32_t lh_ptr_hash(void *k)
+{
+ /* CAW: refactored to be 64bit nice */
+ return (uint32_t) ((((ptrdiff_t) k * LH_PRIME) >> 4) & ULONG_MAX);
+}
+
+int lh_ptr_equal(void *k1, void *k2)
+{
+ return (k1 == k2);
+}
+
+uint32_t lh_char_hash(void *k)
+{
+ unsigned int h = 0;
+ const char *data = k;
+
+ while (*data != 0)
+ h = h * 129 + (unsigned int) (*data++) + LH_PRIME;
+
+ return h;
+}
+
+int lh_char_equal(void *k1, void *k2)
+{
+ return (strcmp((char *) k1, (char *) k2) == 0);
+}
+
+struct lh_table *lh_table_new(int size, char *name, lh_entry_free_fn * free_fn, lh_hash_fn * hash_fn, lh_equal_fn * equal_fn)
+{
+ int i;
+ struct lh_table *t;
+
+ t = calloc(1, sizeof(struct lh_table));
+ if (!t)
+ lh_abort("lh_table_new: calloc failed\n");
+ t->count = 0;
+ t->size = size;
+ t->name = name;
+ t->table = calloc(size, sizeof(struct lh_entry));
+ if (!t->table)
+ lh_abort("lh_table_new: calloc failed\n");
+ t->free_fn = free_fn;
+ t->hash_fn = hash_fn;
+ t->equal_fn = equal_fn;
+ for (i = 0; i < size; i++)
+ t->table[i].k = LH_EMPTY;
+ return t;
+}
+
+struct lh_table *lh_kchar_table_new(int size, char *name, lh_entry_free_fn * free_fn)
+{
+ return lh_table_new(size, name, free_fn, lh_char_hash, lh_char_equal);
+}
+
+struct lh_table *lh_kptr_table_new(int size, char *name, lh_entry_free_fn * free_fn)
+{
+ return lh_table_new(size, name, free_fn, lh_ptr_hash, lh_ptr_equal);
+}
+
+void lh_table_resize(struct lh_table *t, int new_size)
+{
+ struct lh_table *new_t;
+ struct lh_entry *ent;
+
+ new_t = lh_table_new(new_size, t->name, NULL, t->hash_fn, t->equal_fn);
+ ent = t->head;
+ while (ent) {
+ lh_table_insert(new_t, ent->k, ent->v);
+ ent = ent->next;
+ }
+ free(t->table);
+ t->table = new_t->table;
+ t->size = new_size;
+ t->head = new_t->head;
+ t->tail = new_t->tail;
+ t->resizes++;
+ free(new_t);
+}
+
+void lh_table_free(struct lh_table *t)
+{
+ struct lh_entry *c;
+ for (c = t->head; c != NULL; c = c->next) {
+ if (t->free_fn) {
+ t->free_fn(c);
+ }
+ }
+ free(t->table);
+ free(t);
+}
+
+
+int lh_table_insert(struct lh_table *t, void *k, void *v)
+{
+ uint32_t h, n;
+
+ t->inserts++;
+ if (t->count > t->size * 0.66)
+ lh_table_resize(t, t->size * 2);
+
+ h = t->hash_fn(k);
+ n = h % t->size;
+
+ while (1) {
+ if (t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED)
+ break;
+ t->collisions++;
+ if (++n == t->size)
+ n = 0;
+ }
+
+ t->table[n].k = k;
+ t->table[n].v = v;
+ t->count++;
+
+ if (t->head == NULL) {
+ t->head = t->tail = &t->table[n];
+ t->table[n].next = t->table[n].prev = NULL;
+ } else {
+ t->tail->next = &t->table[n];
+ t->table[n].prev = t->tail;
+ t->table[n].next = NULL;
+ t->tail = &t->table[n];
+ }
+
+ return 0;
+}
+
+
+struct lh_entry *lh_table_lookup_entry(struct lh_table *t, void *k)
+{
+ uint32_t h = t->hash_fn(k);
+ uint32_t n = h % t->size;
+
+ t->lookups++;
+ while (1) {
+ if (t->table[n].k == LH_EMPTY)
+ return NULL;
+ if (t->table[n].k != LH_FREED && t->equal_fn(t->table[n].k, k))
+ return &t->table[n];
+ if (++n == t->size)
+ n = 0;
+ }
+ return NULL;
+}
+
+
+void *lh_table_lookup(struct lh_table *t, void *k)
+{
+ struct lh_entry *e = lh_table_lookup_entry(t, k);
+ if (e)
+ return e->v;
+ return NULL;
+}
+
+
+int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e)
+{
+ ptrdiff_t n = (ptrdiff_t) (e - t->table); /* CAW: fixed to be 64bit nice, still need the crazy negative case... */
+
+ /* CAW: this is bad, really bad, maybe stack goes other direction on this machine... */
+ if (n < 0) {
+ return -2;
+ }
+
+ if (t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED)
+ return -1;
+ t->count--;
+ if (t->free_fn)
+ t->free_fn(e);
+ t->table[n].v = NULL;
+ t->table[n].k = LH_FREED;
+ if (t->tail == &t->table[n] && t->head == &t->table[n]) {
+ t->head = t->tail = NULL;
+ } else if (t->head == &t->table[n]) {
+ t->head->next->prev = NULL;
+ t->head = t->head->next;
+ } else if (t->tail == &t->table[n]) {
+ t->tail->prev->next = NULL;
+ t->tail = t->tail->prev;
+ } else {
+ t->table[n].prev->next = t->table[n].next;
+ t->table[n].next->prev = t->table[n].prev;
+ }
+ t->table[n].next = t->table[n].prev = NULL;
+ return 0;
+}
+
+
+int lh_table_delete(struct lh_table *t, void *k)
+{
+ struct lh_entry *e = lh_table_lookup_entry(t, k);
+ if (!e)
+ return -1;
+ return lh_table_delete_entry(t, e);
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/linkhash.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/linkhash.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,257 @@
+/*
+ * $Id: linkhash.h,v 1.6 2006/01/30 23:07:57 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _linkhash_h_
+#define _linkhash_h_
+#include <inttypes.h>
+
+/**
+ * golden prime used in hash functions
+ */
+#define LH_PRIME 0x9e370001UL
+
+/**
+ * sentinel pointer value for empty slots
+ */
+#define LH_EMPTY (void*)-1
+
+/**
+ * sentinel pointer value for freed slots
+ */
+#define LH_FREED (void*)-2
+
+struct lh_entry;
+
+/**
+ * callback function prototypes
+ */
+typedef void (lh_entry_free_fn) (struct lh_entry * e);
+/**
+ * callback function prototypes
+ */
+typedef uint32_t(lh_hash_fn) (void *k);
+/**
+ * callback function prototypes
+ */
+typedef int (lh_equal_fn) (void *k1, void *k2);
+
+/**
+ * An entry in the hash table
+ */
+struct lh_entry {
+ /**
+ * The key.
+ */
+ void *k;
+ /**
+ * The value.
+ */
+ void *v;
+ /**
+ * The next entry
+ */
+ struct lh_entry *next;
+ /**
+ * The previous entry.
+ */
+ struct lh_entry *prev;
+};
+
+
+/**
+ * The hash table structure.
+ */
+struct lh_table {
+ /**
+ * Size of our hash.
+ */
+ int size;
+ /**
+ * Numbers of entries.
+ */
+ int count;
+
+ /**
+ * Number of collisions.
+ */
+ int collisions;
+
+ /**
+ * Number of resizes.
+ */
+ int resizes;
+
+ /**
+ * Number of lookups.
+ */
+ int lookups;
+
+ /**
+ * Number of inserts.
+ */
+ int inserts;
+
+ /**
+ * Number of deletes.
+ */
+ int deletes;
+
+ /**
+ * Name of the hash table.
+ */
+ char *name;
+
+ /**
+ * The first entry.
+ */
+ struct lh_entry *head;
+
+ /**
+ * The last entry.
+ */
+ struct lh_entry *tail;
+
+ struct lh_entry *table;
+
+ /**
+ * A pointer onto the function responsible for freeing an entry.
+ */
+ lh_entry_free_fn *free_fn;
+ lh_hash_fn *hash_fn;
+ lh_equal_fn *equal_fn;
+};
+
+
+/**
+ * Pre-defined hash and equality functions
+ */
+extern uint32_t lh_ptr_hash(void *k);
+extern int lh_ptr_equal(void *k1, void *k2);
+
+extern uint32_t lh_char_hash(void *k);
+extern int lh_char_equal(void *k1, void *k2);
+
+
+/**
+ * Convenience list iterator.
+ */
+#define lh_foreach(table, entry) \
+for(entry = table->head; entry; entry = entry->next)
+
+/**
+ * lh_foreach_safe allows calling of deletion routine while iterating.
+ */
+#define lh_foreach_safe(table, entry, tmp) \
+for(entry = table->head; entry && ((tmp = entry->next) || 1); entry = tmp)
+
+
+
+/**
+ * Create a new linkhash table.
+ * @param size initial table size. The table is automatically resized
+ * although this incurs a performance penalty.
+ * @param name the table name.
+ * @param free_fn callback function used to free memory for entries
+ * when lh_table_free or lh_table_delete is called.
+ * If NULL is provided, then memory for keys and values
+ * must be freed by the caller.
+ * @param hash_fn function used to hash keys. 2 standard ones are defined:
+ * lh_ptr_hash and lh_char_hash for hashing pointer values
+ * and C strings respectively.
+ * @param equal_fn comparison function to compare keys. 2 standard ones defined:
+ * lh_ptr_hash and lh_char_hash for comparing pointer values
+ * and C strings respectively.
+ * @return a pointer onto the linkhash table.
+ */
+extern struct lh_table *lh_table_new(int size, char *name, lh_entry_free_fn * free_fn, lh_hash_fn * hash_fn, lh_equal_fn * equal_fn);
+
+/**
+ * Convenience function to create a new linkhash
+ * table with char keys.
+ * @param size initial table size.
+ * @param name table name.
+ * @param free_fn callback function used to free memory for entries.
+ * @return a pointer onto the linkhash table.
+ */
+extern struct lh_table *lh_kchar_table_new(int size, char *name, lh_entry_free_fn * free_fn);
+
+
+/**
+ * Convenience function to create a new linkhash
+ * table with ptr keys.
+ * @param size initial table size.
+ * @param name table name.
+ * @param free_fn callback function used to free memory for entries.
+ * @return a pointer onto the linkhash table.
+ */
+extern struct lh_table *lh_kptr_table_new(int size, char *name, lh_entry_free_fn * free_fn);
+
+
+/**
+ * Free a linkhash table.
+ * If a callback free function is provided then it is called for all
+ * entries in the table.
+ * @param t table to free.
+ */
+extern void lh_table_free(struct lh_table *t);
+
+
+/**
+ * Insert a record into the table.
+ * @param t the table to insert into.
+ * @param k a pointer to the key to insert.
+ * @param v a pointer to the value to insert.
+ */
+extern int lh_table_insert(struct lh_table *t, void *k, void *v);
+
+
+/**
+ * Lookup a record into the table.
+ * @param t the table to lookup
+ * @param k a pointer to the key to lookup
+ * @return a pointer to the record structure of the value or NULL if it does not exist.
+ */
+extern struct lh_entry *lh_table_lookup_entry(struct lh_table *t, void *k);
+
+/**
+ * Lookup a record into the table
+ * @param t the table to lookup
+ * @param k a pointer to the key to lookup
+ * @return a pointer to the found value or NULL if it does not exist.
+ */
+extern void *lh_table_lookup(struct lh_table *t, void *k);
+
+
+/**
+ * Delete a record from the table.
+ * If a callback free function is provided then it is called for the
+ * for the item being deleted.
+ * @param t the table to delete from.
+ * @param e a pointer to the entry to delete.
+ * @return 0 if the item was deleted.
+ * @return -1 if it was not found.
+ */
+extern int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e);
+
+
+/**
+ * Delete a record from the table.
+ * If a callback free function is provided then it is called for the
+ * for the item being deleted.
+ * @param t the table to delete from.
+ * @param k a pointer to the key to delete.
+ * @return 0 if the item was deleted.
+ * @return -1 if it was not found.
+ */
+extern int lh_table_delete(struct lh_table *t, void *k);
+
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/mod_http.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/mod_http.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/mod_http.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/mod_http.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/mod_http.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,382 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2008, Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ * Copyright (C) Benbria. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ *
+ * mod_http.c -- HTTP client implementation for FreeSWITCH
+ *
+ * The purpose is to provide laguages like LUA with a _fast_ HTTP
+ * client implementation.
+ *
+ * Support for SSL will be provided in future versions.
+ * Initial release does not include win32 support.
+ *
+ */
+
+
+#include <switch.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <sys/queue.h>
+#include "json.h"
+
+#include "http_req.h"
+#include "url_encoding.h"
+
+#define HTTP_SYNTAX "<http_method> <url> <urlejson_headers> [urlejson_body]"
+#define HTTP_PARAMS 4
+#define HTTP_BUFFER_SIZE (256 * 1024)
+
+/* SWITCH_STANDARD_API(http_api_main); */
+
+#define MAX_MEMLOCS 512
+#define GARBAGE_TYPES_INIT() \
+typedef struct memloc{\
+ void *p;\
+ LIST_ENTRY(memloc) memlocs;\
+} memloc_t
+
+#define GARBAGE_CLEANUP() \
+do{\
+ for(memloc_p = head.lh_first; memloc_p != NULL; \
+ memloc_p = memloc_p->memlocs.le_next){\
+ free(memloc_p->p);\
+ }\
+}while(0)
+
+#define GARBAGE_ADD(a) \
+do {\
+ if (memloc_i >= MAX_MEMLOCS){\
+ switch_safe_free(ccmd);\
+ GARBAGE_CLEANUP();\
+ stream->write_function(stream, "-ERR\n");\
+ return SWITCH_STATUS_SUCCESS;\
+ }\
+ memloc_a[memloc_i].p = (void *)a;\
+ LIST_INSERT_HEAD(&head, memloc_a + memloc_i, memlocs);\
+ memloc_i++;\
+}while(0)
+
+#define GARBAGE_INIT() \
+ LIST_HEAD(listhead, memloc) head;\
+ memloc_t memloc_a[MAX_MEMLOCS];\
+ memloc_t *memloc_p;\
+ size_t memloc_i;\
+ LIST_INIT(&head);\
+ memloc_i = 0
+
+GARBAGE_TYPES_INIT();
+
+SWITCH_STANDARD_API(http_api_main)
+{
+ char *ccmd;
+ int argc;
+ char *argv[HTTP_PARAMS];
+ char *buf;
+ char *method;
+ char *url;
+ char *headers_dec;
+ char *headers_str;
+ char *value;
+ char *body;
+ char *body_dec;
+ char *t;
+ char *json_response;
+ struct json_object *json_http_headers;
+ char *key;
+ struct json_object *val;
+ enum json_type jsontype;
+ struct lh_entry *entry;
+ int i;
+ int j;
+ int f;
+ size_t l;
+ size_t m;
+ size_t a = 0;
+ int ret;
+
+ http_header_t *headers;
+ http_request_t request;
+ http_response_t response;
+
+ GARBAGE_INIT();
+
+ (void) memset(&response, 0, sizeof(response));
+
+ if (cmd == NULL) {
+ stream->write_function(stream, "-USAGE: %s\n", HTTP_SYNTAX);
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ ccmd = strdup(cmd);
+ argc = switch_separate_string(ccmd, ' ', argv, HTTP_PARAMS);
+
+ if (argc != HTTP_PARAMS && argc != (HTTP_PARAMS - 1)) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ method = argv[0];
+ if (strcasecmp("GET", method) == 0)
+ request.method = GET;
+ else if (strcasecmp("POST", method) == 0)
+ request.method = POST;
+ else if (strcasecmp("HEAD", method) == 0)
+ request.method = HEAD;
+ else if (strcasecmp("DELETE", method) == 0)
+ request.method = DELETE;
+ else if (strcasecmp("PUT", method) == 0)
+ request.method = PUT;
+
+
+
+ url = argv[1];
+ headers_str = argv[2];
+ if (argc == HTTP_PARAMS) {
+ body = argv[3];
+ } else {
+ body = (char *) malloc(1 * sizeof(char));
+ if (body == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ return SWITCH_STATUS_SUCCESS;
+ }
+ body[0] = '\0';
+ GARBAGE_ADD(body);
+ }
+
+ buf = (char *) malloc(HTTP_BUFFER_SIZE * sizeof(char));
+ if (buf == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ GARBAGE_ADD(buf);
+
+ request.version = DEFAULT_HTTP_VERSION;
+ l = strlen(url);
+ request.url = (char *) malloc((l + 1) * sizeof(char));
+ if (request.url == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ GARBAGE_ADD(request.url);
+ strcpy(request.url, url);
+
+
+ l = strlen(headers_str);
+
+ headers_dec = url_decode(headers_str, l);
+ GARBAGE_ADD(headers_dec);
+
+ json_http_headers = json_tokener_parse(headers_dec);
+ if (is_error(json_http_headers)) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ jsontype = json_object_get_type(json_http_headers);
+ if (jsontype != json_type_object) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ i = 0;
+ json_object_object_foreach(json_http_headers, key, val) {
+ i++;
+ }
+
+ request.header_len = i;
+ headers = (http_header_t *) malloc(i * sizeof(http_header_t));
+ request.headers = headers;
+ GARBAGE_ADD(headers);
+
+ i = 0;
+ json_object_object_foreach(json_http_headers, key, val) {
+ l = strlen(key);
+
+ request.headers[i].field_name = (char *) malloc((l + 1) * sizeof(char));
+ if (request.headers[i].field_name == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ GARBAGE_ADD(request.headers[i].field_name);
+
+ strcpy(request.headers[i].field_name, key);
+ a += strlen(key);
+
+ jsontype = json_object_get_type(val);
+ if (jsontype != json_type_string) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ value = json_object_get_string(val);
+ /* value = json_object_to_json_string(val); */
+ l = strlen(value);
+ request.headers[i].value = (char *) malloc((l + 1) * sizeof(char));
+ if (request.headers[i].value == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+ GARBAGE_ADD(request.headers[i].value);
+ strcpy(request.headers[i].value, value);
+ a += strlen(value);
+ i++;
+ }
+
+ if (argc == HTTP_PARAMS) {
+ l = strlen(body);
+ body_dec = url_decode(body, l);
+ GARBAGE_ADD(body_dec);
+ l = strlen(body_dec);
+ request.body_len = l;
+ request.body = body_dec;
+ } else
+ request.body_len = 0;
+
+ ret = http_req(&request, &response);
+
+ if (response.version != NULL)
+ GARBAGE_ADD(response.version);
+ if (response.phrase != NULL)
+ GARBAGE_ADD(response.phrase);
+ if (response.headers != NULL)
+ GARBAGE_ADD(response.headers);
+ if (response.body != NULL)
+ GARBAGE_ADD(response.body);
+ for (i = 0; i < response.header_len; i++) {
+ GARBAGE_ADD(response.headers[i].field_name);
+ GARBAGE_ADD(response.headers[i].value);
+ }
+
+
+ if (ret == ERROR) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ /* This is evil and should be changed in the future */
+ l = 128 + (256 * response.header_len) + (a * 2)
+ + strlen("version") + strlen(response.version)
+ + strlen("status_code") + 3 + strlen("phrase") + strlen(response.phrase)
+ + strlen("body") + (response.body_len * 3) + 1 + strlen("headers")
+ + 1;
+
+ /* to be safe */
+ l <<= 2;
+
+ json_response = (char *) malloc(l * sizeof(char));
+ if (json_response == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+ GARBAGE_ADD(json_response);
+
+ if (response.body_len != 0) {
+ t = (char *) malloc((response.body_len + 1) * sizeof(char));
+ if (t == NULL) {
+ switch_safe_free(ccmd);
+ stream->write_function(stream, "-ERR\n");
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+ }
+ GARBAGE_ADD(t);
+ (void) memcpy(t, response.body, response.body_len);
+ t[response.body_len] = '\0';
+ response.body = url_encode(t, response.body_len);
+ GARBAGE_ADD(response.body);
+ }
+
+
+ m = snprintf(json_response, l,
+ "{"
+ "\"version\": \"%s\","
+ "\"status_code\": \"%3d\","
+ "\"phrase\": \"%s\","
+ "\"body\": \"%s\","
+ "\"headers\": [", response.version, response.status_code, response.phrase, ((response.body_len <= 0) ? "" : response.body)
+ );
+
+
+ for (f = HTTP_FALSE, j = 0; j < response.header_len; j++) {
+ if (f != HTTP_FALSE) {
+ m += snprintf(json_response + m, l - m, ",");
+ } else
+ f = HTTP_TRUE;
+
+ m += snprintf(json_response + m, l - m, "{\"key\": \"%s\",\"value\": \"%s\"}", response.headers[j].field_name, response.headers[j].value);
+ }
+
+
+ m += snprintf(json_response + m, l - m, "]}");
+ json_response[m] = '\0';
+
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "RESERVED %u BYTES, USED %u BYTES, HTTP Response as JSON: %s\n", (unsigned)l, (unsigned) m, json_response);
+
+
+ stream->write_function(stream, "%s\n", json_response);
+
+ switch_safe_free(ccmd);
+ GARBAGE_CLEANUP();
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_http_load);
+SWITCH_MODULE_DEFINITION(mod_http, mod_http_load, NULL, NULL);
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_http_load)
+{
+ switch_api_interface_t *api_interface;
+
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "HTTP request mod enabled\n");
+
+ SWITCH_ADD_API(api_interface, "http", "Make HTTP requests", http_api_main, HTTP_SYNTAX);
+
+ return SWITCH_STATUS_SUCCESS;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/printbuf.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,149 @@
+/*
+ * $Id: printbuf.c,v 1.5 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if HAVE_STDARG_H
+# include <stdarg.h>
+#else /* !HAVE_STDARG_H */
+# error Not enough var arg support!
+#endif /* HAVE_STDARG_H */
+
+#include "bits.h"
+#include "debug.h"
+#include "printbuf.h"
+
+struct printbuf *printbuf_new()
+{
+ struct printbuf *p;
+
+ if (!(p = calloc(1, sizeof(struct printbuf))))
+ return NULL;
+ p->size = 32;
+ p->bpos = 0;
+ if (!(p->buf = malloc(p->size))) {
+ free(p);
+ return NULL;
+ }
+ return p;
+}
+
+
+int printbuf_memappend(struct printbuf *p, char *buf, int size)
+{
+ char *t;
+ if (p->size - p->bpos <= size) {
+ int new_size = max(p->size * 2, p->bpos + size + 8);
+#ifdef PRINTBUF_DEBUG
+ mc_debug("printbuf_memappend: realloc " "bpos=%d wrsize=%d old_size=%d new_size=%d\n", p->bpos, size, p->size, new_size);
+#endif /* PRINTBUF_DEBUG */
+ if (!(t = realloc(p->buf, new_size)))
+ return -1;
+ p->size = new_size;
+ p->buf = t;
+ }
+ memcpy(p->buf + p->bpos, buf, size);
+ p->bpos += size;
+ p->buf[p->bpos] = '\0';
+ return size;
+}
+
+#if !HAVE_VSNPRINTF && defined(WIN32)
+# define vsnprintf _vsnprintf
+#elif !HAVE_VSNPRINTF /* !HAVE_VSNPRINTF */
+# error Need vsnprintf!
+#endif /* !HAVE_VSNPRINTF && defined(WIN32) */
+
+#if !HAVE_VASPRINTF
+/* CAW: compliant version of vasprintf */
+static int vasprintf(char **buf, const char *fmt, va_list ap)
+{
+#ifndef WIN32
+ static char _T_emptybuffer = '\0';
+#endif /* !defined(WIN32) */
+ int chars;
+ char *b;
+
+ if (!buf) {
+ return -1;
+ }
+#ifdef WIN32
+ chars = _vscprintf(fmt, ap) + 1;
+#else /* !defined(WIN32) */
+ /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite
+ our buffer like on some 64bit sun systems.... but hey, its time to move on */
+ chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap) + 1;
+ if (chars < 0) {
+ chars *= -1;
+ } /* CAW: old glibc versions have this problem */
+#endif /* defined(WIN32) */
+
+ b = (char *) malloc(sizeof(char) * chars);
+ if (!b) {
+ return -1;
+ }
+
+ if ((chars = vsprintf(b, fmt, ap)) < 0) {
+ free(b);
+ } else {
+ *buf = b;
+ }
+
+ return chars;
+}
+#endif /* !HAVE_VASPRINTF */
+
+int sprintbuf(struct printbuf *p, const char *msg, ...)
+{
+ va_list ap;
+ char *t;
+ int size;
+ char buf[128];
+
+ /* user stack buffer first */
+ va_start(ap, msg);
+ size = vsnprintf(buf, 128, msg, ap);
+ va_end(ap);
+ /* if string is greater than stack buffer, then use dynamic string
+ with vasprintf. Note: some implementation of vsnprintf return -1
+ if output is truncated whereas some return the number of bytes that
+ would have been writen - this code handles both cases. */
+ if (size == -1 || size > 127) {
+ int ret;
+ va_start(ap, msg);
+ if ((size = vasprintf(&t, msg, ap)) == -1)
+ return -1;
+ va_end(ap);
+ ret = printbuf_memappend(p, t, size);
+ free(t);
+ return ret;
+ } else {
+ return printbuf_memappend(p, buf, size);
+ }
+}
+
+void printbuf_reset(struct printbuf *p)
+{
+ p->buf[0] = '\0';
+ p->bpos = 0;
+}
+
+void printbuf_free(struct printbuf *p)
+{
+ if (p) {
+ free(p->buf);
+ free(p);
+ }
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/printbuf.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/printbuf.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+/*
+ * $Id: printbuf.h,v 1.4 2006/01/26 02:16:28 mclark Exp $
+ *
+ * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
+ * Michael Clark <michael@metaparadigm.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See COPYING for details.
+ *
+ */
+
+#ifndef _printbuf_h_
+#define _printbuf_h_
+
+#undef PRINTBUF_DEBUG
+
+struct printbuf {
+ char *buf;
+ int bpos;
+ int size;
+};
+
+extern struct printbuf *printbuf_new();
+
+extern int printbuf_memappend(struct printbuf *p, char *buf, int size);
+
+extern int sprintbuf(struct printbuf *p, const char *msg, ...);
+
+extern void printbuf_reset(struct printbuf *p);
+
+extern void printbuf_free(struct printbuf *p);
+
+#endif
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.c
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.c (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/url_encoding.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,126 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2008, Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ * Copyright (C) Benbria. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ *
+ * url_encoding.c -- url encoding/decoding
+ *
+ */
+#include "url_encoding.h"
+
+#ifdef DEBUG
+int main(int argc, char *argv[])
+{
+ char *buf1;
+ char *buf2;
+
+
+ buf1 = url_encode("This is a test #$ ");
+ buf2 = url_decode(buf1);
+
+ printf("%s\n", buf2);
+
+ free(buf1);
+ free(buf2);
+ return EXIT_FAILURE;
+}
+
+#endif
+
+char *url_encode(char *url, size_t l)
+{
+ int i;
+ int j;
+ char *buf;
+ unsigned char c;
+
+ buf = (char *) malloc((l * 3) + 1);
+ if (buf == NULL) {
+ perror("Could not allocate memory url encoding");
+ return NULL;
+ }
+
+ for (i = 0, j = 0; i < l; i++) {
+ c = (unsigned char) url[i];
+ if (c <= 31 || c >= 127
+ || c == '$' || c == '&' || c == '+' || c == ',' || c == '/'
+ || c == ':' || c == ';' || c == '=' || c == '?' || c == '@'
+ || c == ' ' || c == '"' || c == '<' || c == '>' || c == '#'
+ || c == '%' || c == '{' || c == '}' || c == '|' || c == '\\' || c == '^' || c == '~' || c == '[' || c == ']' || c == '`') {
+
+ (void) sprintf(buf + j, "%%%X%X", c >> 4, c & 0x0F);
+ j += 3;
+ } else {
+ buf[j] = url[i];
+ j++;
+ }
+ }
+
+ buf[j] = '\0';
+
+ return buf;
+}
+
+char *url_decode(char *url, size_t l)
+{
+ int i;
+ int j;
+ char *buf;
+ char c;
+ char d0;
+ char d1;
+
+ buf = (char *) malloc((l + 1) * sizeof(char));
+ if (buf == NULL) {
+ perror("Could not allocate memory for decoding");
+ return NULL;
+ }
+
+ for (i = 0, j = 0; i < l; j++) {
+ c = url[i];
+ if (c == '%') {
+ d0 = url[i + 2];
+ d1 = url[i + 1];
+ d0 = toupper(d0);
+ d1 = toupper(d1);
+
+ if (d0 >= 'A' && d0 <= 'F')
+ d0 = d0 - 'A' + 10;
+ else if (d0 >= '0' && d0 <= '9')
+ d0 = d0 - '0';
+ if (d1 >= 'A' && d1 <= 'F')
+ d1 = d1 - 'A' + 10;
+ else if (d1 >= '0' && d1 <= '9')
+ d1 = d1 - '0';
+
+ buf[j] = (d1 << 4) + d0;
+ i += 3;
+ } else {
+ buf[j] = url[i];
+ i++;
+ }
+ }
+
+ buf[j] = '\0';
+
+ return buf;
+}
Deleted: freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.h
Copied: freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.h (from rev 14471, freeswitch/trunk/contrib/mod/applications/mod_http/url_encoding.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/applications/mod_http/url_encoding.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,41 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2008, Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ * Copyright (C) Benbria. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Eric des Courtis <eric.des.courtis@benbria.com>
+ *
+ *
+ * url_encoding.h -- url encoding/decoding
+ *
+ */
+
+#ifndef __URL_ENCODING_H__
+#define __URL_ENCODING_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+char *url_encode(char *url, size_t l);
+char *url_decode(char *url, size_t l);
+
+#endif
Copied: freeswitch/branches/seven/contrib/mod/asr_tts (from rev 14471, freeswitch/trunk/contrib/mod/asr_tts)
Copied: freeswitch/branches/seven/contrib/mod/codecs (from rev 14471, freeswitch/trunk/contrib/mod/codecs)
Copied: freeswitch/branches/seven/contrib/mod/dialplans (from rev 14471, freeswitch/trunk/contrib/mod/dialplans)
Copied: freeswitch/branches/seven/contrib/mod/directories (from rev 14471, freeswitch/trunk/contrib/mod/directories)
Copied: freeswitch/branches/seven/contrib/mod/endpoints (from rev 14471, freeswitch/trunk/contrib/mod/endpoints)
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/Makefile
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/Makefile (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+MODNAME=mod_khomp
+VERBOSE=1
+LOCAL_CFLAGS=-I./include -I./commons -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM -g -ggdb
+LOCAL_LDFLAGS=-lk3l
+LOCAL_OBJS= ./commons/k3lapi.o ./commons/config_options.o ./commons/format.o ./commons/strings.o
+LOCAL_OBJS+= ./src/globals.o ./src/opt.o ./src/khomp_pvt.o
+
+include ../../../../build/modmake.rules
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/config_options.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,665 @@
+#include <config_options.hpp>
+
+config_option::config_option(std::string name, const config_option::string_type & value, const config_option::string_type defvalue, string_allowed_type allowed, bool list_me)
+: _my_name(name), _value_data(new string_data_type(const_cast<string_type &>(value), defvalue, allowed)),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, const config_option::string_type & value, const config_option::string_type defvalue, bool list_me)
+: _my_name(name), _value_data(new string_data_type(const_cast<string_type &>(value), defvalue, string_allowed_type())),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, const config_option::sint_type & value, const config_option::sint_type defvalue,
+ config_option::sint_type min, config_option::sint_type max, config_option::sint_type step, bool list_me)
+: _my_name(name), _value_data(new sint_data_type(const_cast<sint_type &>(value), defvalue, range<sint_type>(min, max, step))),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, const config_option::uint_type & value, const config_option::uint_type defvalue,
+ config_option::uint_type min, config_option::uint_type max, config_option::uint_type step, bool list_me)
+: _my_name(name), _value_data(new uint_data_type(const_cast<uint_type &>(value), defvalue, range<uint_type>(min, max, step))),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, const config_option::bool_type & value, const config_option::bool_type defvalue, bool list_me)
+: _my_name(name), _value_data(new bool_data_type(const_cast<bool_type &>(value), defvalue)),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, config_option::fun_type fun, std::string defvalue, string_allowed_type allowed, bool list_me)
+: _my_name(name), _value_data(new fun_data_type(fun, defvalue, allowed)),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::config_option(std::string name, config_option::fun_type fun, std::string defvalue, bool list_me)
+: _my_name(name), _value_data(new fun_data_type(fun, defvalue, string_allowed_type())),
+ _list_me(list_me), _values(NULL), _loaded(false)
+{};
+
+config_option::~config_option(void)
+{
+ if (_values)
+ {
+ for (unsigned int i = 0; _values[i] != NULL; i++)
+ delete _values[i];
+
+ delete[] _values;
+ }
+};
+
+void config_option::set(config_option::string_type value)
+{
+ switch (_value_data.which())
+ {
+ case ID_STRING:
+ {
+ try
+ {
+ string_data_type & tmp = _value_data.get<string_data_type>();
+
+
+ if (tmp.string_allowed.empty())
+ {
+ tmp.string_val = value;
+ _loaded = true;
+ }
+ else
+ {
+ if (tmp.string_allowed.find(value) != tmp.string_allowed.end())
+ {
+ tmp.string_val = value;
+ _loaded = true;
+ return;
+ }
+
+ std::string allowed_string;
+
+ for (string_allowed_type::iterator i = tmp.string_allowed.begin(); i != tmp.string_allowed.end(); i++)
+ {
+ allowed_string += " '";
+ allowed_string += (*i);
+ allowed_string += "'";
+ }
+
+ throw config_process_failure(STG(FMT("value '%s' not allowed for option '%s' (allowed values:%s)")
+ % value % _my_name % allowed_string));
+ }
+ break;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ }
+
+ case ID_FUN:
+ {
+ try
+ {
+ fun_data_type & tmp = _value_data.get<fun_data_type>();
+ tmp.fun_val(value);
+ _loaded = true;
+ break;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ }
+
+ default:
+ {
+ throw config_process_failure(STG(FMT("option '%s' is not of type string, nor function defined") % _my_name));
+ }
+ }
+}
+
+void config_option::set(config_option::sint_type value)
+{
+ try
+ {
+ sint_data_type & tmp = _value_data.get<sint_data_type>();
+
+ if (value < tmp.sint_range.minimum)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (too low)") % value % _my_name));
+
+ if (value > tmp.sint_range.maximum)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (too high)") % value % _my_name));
+
+ if (((value - tmp.sint_range.minimum) % tmp.sint_range.step) != 0)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (outside allowed step)") % value % _my_name));
+
+ tmp.sint_val = value;
+ _loaded = true;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+}
+
+void config_option::set(config_option::uint_type value)
+{
+ try
+ {
+ uint_data_type & tmp = _value_data.get<uint_data_type>();
+
+ if (value < tmp.uint_range.minimum)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (too low)") % value % _my_name));
+
+ if (value > tmp.uint_range.maximum)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (too high)") % value % _my_name));
+
+ if (((value - tmp.uint_range.minimum) % tmp.uint_range.step) != 0)
+ throw config_process_failure(STG(FMT("value '%d' out-of-range for option '%s' (outside allowed step)") % value % _my_name));
+
+ tmp.uint_val = value;
+ _loaded = true;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+}
+
+void config_option::set(config_option::bool_type value)
+{
+ try
+ {
+ bool_data_type & tmp = _value_data.get<bool_data_type>();
+ tmp.bool_val = value;
+ _loaded = true;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+}
+
+std::string & config_option::name(void) { return _my_name; };
+
+config_option::value_id_type config_option::type(void)
+{
+ return (value_id_type) _value_data.which();
+};
+
+const char ** config_option::values(void)
+{
+ if (_values != NULL)
+ return _values;
+
+ switch ((value_id_type) _value_data.which())
+ {
+ case config_option::ID_BOOL:
+ {
+ _values = new const char*[3];
+
+ _values[0] = strdup("yes");
+ _values[1] = strdup("no");
+ _values[2] = NULL;
+
+ return _values;
+ }
+
+ case config_option::ID_SINT:
+ {
+ try
+ {
+ sint_data_type & tmp = _value_data.get<sint_data_type>();
+
+
+ unsigned int count = ((tmp.sint_range.maximum - tmp.sint_range.minimum) / tmp.sint_range.step) + 1;
+ unsigned int index = 0;
+
+ _values = new const char*[count + 1];
+
+ for (sint_type i = tmp.sint_range.minimum; i <= tmp.sint_range.maximum; i += tmp.sint_range.step, index++)
+ _values[index] = strdup(STG(FMT("%d") % i).c_str());
+
+ _values[index] = NULL;
+
+ return _values;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ }
+
+ case config_option::ID_UINT:
+ {
+ try
+ {
+ uint_data_type & tmp = _value_data.get<uint_data_type>();
+
+ unsigned int count = ((tmp.uint_range.maximum - tmp.uint_range.minimum) / tmp.uint_range.step) + 1;
+ unsigned int index = 0;
+
+ _values = new const char*[count + 1];
+
+ for (uint_type i = tmp.uint_range.minimum; i <= tmp.uint_range.maximum; i += tmp.uint_range.step, index++)
+ _values[index] = strdup(STG(FMT("%d") % i).c_str());
+
+ _values[index] = NULL;
+
+ return _values;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ }
+
+ case config_option::ID_STRING:
+ {
+ try
+ {
+ string_data_type & tmp = _value_data.get<string_data_type>();
+
+ _values = new const char*[ tmp.string_allowed.size() + 1 ];
+
+ unsigned int index = 0;
+
+ for (string_allowed_type::iterator i = tmp.string_allowed.begin(); i != tmp.string_allowed.end(); i++, index++)
+ _values[index] = strdup((*i).c_str());
+
+ _values[index] = NULL;
+
+ return _values;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ }
+
+ case config_option::ID_FUN:
+ {
+ try
+ {
+ fun_data_type & tmp = _value_data.get<fun_data_type>();
+
+ _values = new const char*[ tmp.fun_allowed.size() + 1 ];
+
+ unsigned int index = 0;
+
+ for (string_allowed_type::iterator i = tmp.fun_allowed.begin(); i != tmp.fun_allowed.end(); i++, index++)
+ _values[index] = strdup((*i).c_str());
+
+ _values[index] = NULL;
+ return _values;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ }
+
+ default:
+ throw config_process_failure(STG(FMT("unknown type identifier '%d'") % _value_data.which()));
+ }
+};
+
+void config_option::reset(void)
+{
+ _loaded = false;
+};
+
+void config_option::commit(void)
+{
+ if (_loaded)
+ return;
+
+ switch ((value_id_type) _value_data.which())
+ {
+ case config_option::ID_BOOL:
+ {
+ try
+ {
+ bool_data_type & tmp = _value_data.get<bool_data_type>();
+ tmp.bool_val = tmp.bool_default;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ break;
+ }
+
+ case config_option::ID_SINT:
+ {
+ try
+ {
+ sint_data_type & tmp = _value_data.get<sint_data_type>();
+ tmp.sint_val = tmp.sint_default;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ break;
+ }
+
+ case config_option::ID_UINT:
+ {
+ try
+ {
+ uint_data_type & tmp = _value_data.get<uint_data_type>();
+ tmp.uint_val = tmp.uint_default;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ break;
+ }
+
+ case config_option::ID_STRING:
+ {
+ try
+ {
+ string_data_type & tmp = _value_data.get<string_data_type>();
+ tmp.string_val = tmp.string_default;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ break;
+ }
+
+ case config_option::ID_FUN:
+ {
+ try
+ {
+ fun_data_type & tmp = _value_data.get<fun_data_type>();
+ tmp.fun_val(tmp.fun_default);
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+ break;
+ }
+
+ default:
+ throw config_process_failure(STG(FMT("unknown type identifier '%d'") % _value_data.which()));
+ }
+
+ _loaded = true;
+};
+
+void config_option::copy_from(config_option & src)
+{
+ if (src._value_data.which() != _value_data.which())
+ throw config_process_failure(STG(FMT("unable to copy options, source type differs from destination.")));
+
+ if (!src._loaded)
+ return;
+
+ switch ((value_id_type) _value_data.which())
+ {
+ case config_option::ID_BOOL:
+ {
+ try
+ {
+ bool_data_type & stmp = src._value_data.get<bool_data_type>();
+ bool_data_type & dtmp = _value_data.get<bool_data_type>();
+ /* do not copy references, but values.. */
+ bool tmpval = stmp.bool_val;
+ dtmp.bool_val = tmpval;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ break;
+ }
+
+ case config_option::ID_SINT:
+ {
+ try
+ {
+ sint_data_type & stmp = src._value_data.get<sint_data_type>();
+ sint_data_type & dtmp = _value_data.get<sint_data_type>();
+ /* do not copy references, but values.. */
+ int tmpval = stmp.sint_val;
+ dtmp.sint_val = tmpval;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ break;
+ }
+
+ case config_option::ID_UINT:
+ {
+ try
+ {
+ uint_data_type & stmp = src._value_data.get<uint_data_type>();
+ uint_data_type & dtmp = _value_data.get<uint_data_type>();
+ /* do not copy references, but values.. */
+ unsigned int tmpval = stmp.uint_val;
+ dtmp.uint_val = tmpval;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+
+ break;
+ }
+
+ case config_option::ID_STRING:
+ {
+ try
+ {
+ string_data_type & stmp = src._value_data.get<string_data_type>();
+ string_data_type & dtmp = _value_data.get<string_data_type>();
+ /* do not copy references, but values.. */
+ std::string tmpval = stmp.string_val;
+ dtmp.string_val = tmpval;
+ }
+ catch(value_type::InvalidType & e)
+ {
+ throw;
+ }
+
+ break;
+ }
+
+ case config_option::ID_FUN:
+ {
+ /* TO IMPLEMENT (NEEDS ANOTHER METHOD ON FUNCTION FOR GETTING VALUE) */
+
+// fun_data_type & tmp = boost::get<fun_data_type>(_value_data);
+//
+// if (!tmp.loaded)
+// {
+// tmp.fun_val(tmp.fun_default);
+// tmp.loaded = true;
+// }
+ break;
+ }
+
+ default:
+ throw config_process_failure(STG(FMT("unknown type identifier '%d'") % _value_data.which()));
+ }
+
+ _loaded = true;
+};
+
+/*********************************/
+
+bool config_options::add(config_option option)
+{
+ //option_map_type::iterator iter2 = _map.begin();
+
+ //boost::tie(iter2, ok2)
+ std::pair<option_map_type::iterator, bool> ret = _map.insert(option_pair_type(option.name(), option));
+
+ return ret.second;
+}
+
+bool config_options::synonym(std::string equiv_opt, std::string main_opt)
+{
+ //syn_option_map_type::iterator iter = _syn_map.begin();
+
+ //boost::tie(iter, ok)
+ std::pair<syn_option_map_type::iterator, bool> ret = _syn_map.insert(syn_option_pair_type(equiv_opt, main_opt));
+
+ return ret.second;
+}
+
+config_options::string_set config_options::options(void)
+{
+ string_set res;
+
+ for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++)
+ res.insert((*i).first);
+
+ return res;
+}
+
+void config_options::process(const char * name, const char * value)
+{
+ option_map_type::iterator iter = find_option(name);
+
+ if (iter == _map.end())
+ throw config_process_failure(STG(FMT("unknown option '%s'") % name));
+
+ try
+ {
+ switch ((*iter).second.type())
+ {
+ case config_option::ID_SINT:
+ set<config_option::sint_type>((*iter).first, Strings::toulong(value));
+ return;
+ case config_option::ID_UINT:
+ set<config_option::uint_type>((*iter).first, Strings::tolong(value));
+ return;
+ case config_option::ID_BOOL:
+ set<config_option::bool_type>((*iter).first, Strings::toboolean(value));
+ return;
+ case config_option::ID_STRING:
+ case config_option::ID_FUN:
+ set<config_option::string_type>((*iter).first, std::string(value));
+ return;
+ default:
+ throw config_process_failure(STG(FMT("unknown type identifier '%d'") % (*iter).second.type()));
+ }
+ }
+ catch (Strings::invalid_value e)
+ {
+ throw config_process_failure(STG(FMT("invalid value '%s' for option '%s'") % value % name));
+ }
+}
+
+const char ** config_options::values(const char * name)
+{
+ option_map_type::iterator iter = find_option(name);
+
+ if (iter == _map.end())
+ throw config_process_failure(STG(FMT("unknown option '%s'") % name));
+
+ return (*iter).second.values();
+}
+
+const char ** config_options::values(void)
+{
+ if (_values != NULL)
+ return _values;
+
+ unsigned int count = 0;
+
+ for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++)
+ if ((*i).second.list_me())
+ ++count;
+
+ _values = new const char*[ count + 1 ];
+
+ unsigned int index = 0;
+
+ for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++)
+ {
+ if ((*i).second.list_me())
+ {
+ _values[index] = strdup((*i).first.c_str());
+ ++index;
+ }
+ }
+
+ _values[index] = NULL;
+
+ return _values;
+}
+
+void config_options::reset(void)
+{
+ for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++)
+ (*i).second.reset();
+}
+
+config_options::messages_type config_options::commit(void)
+{
+ messages_type msgs;
+
+ for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++)
+ {
+ try
+ {
+ (*i).second.commit();
+ }
+ catch (config_process_failure e)
+ {
+ msgs.push_back(e.msg);
+ }
+ }
+
+ return msgs;
+}
+
+bool config_options::loaded(std::string name)
+{
+ option_map_type::iterator iter = find_option(name);
+
+ if (iter == _map.end())
+ return false;
+
+ return iter->second.loaded();
+}
+
+void config_options::copy_from(config_options & source, std::string name)
+{
+ option_map_type::iterator iter_src = source.find_option(name);
+ option_map_type::iterator iter_dst = find_option(name);
+
+ if (iter_src == source._map.end())
+ throw config_process_failure(STG(FMT("unknown option '%s' on source") % name));
+
+ if (iter_dst == _map.end())
+ throw config_process_failure(STG(FMT("unknown option '%s' on destination") % name));
+
+ iter_dst->second.copy_from(iter_src->second);
+}
+
+config_options::option_map_type::iterator config_options::find_option(std::string name)
+{
+ syn_option_map_type::iterator syn_iter = _syn_map.find(name);
+
+ if (syn_iter != _syn_map.end())
+ name = syn_iter->second;
+
+ option_map_type::iterator iter = _map.find(name);
+
+ return iter;
+}
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.hpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.hpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/config_options.hpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.hpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/config_options.hpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,281 @@
+#include <set>
+#include <map>
+#include <vector>
+
+#include <strings.hpp>
+
+#include <format.hpp>
+
+#ifndef INCLUDED_CONFIG_OPTIONS
+#define INCLUDED_CONFIG_OPTIONS
+
+template < typename base_type >
+struct Variant
+{
+ struct InvalidType {};
+
+ Variant(base_type * value) : _value(value)
+ {
+ _count = new int(1);
+ };
+
+ Variant(const Variant & v) : _value(v._value), _count(v._count)
+ {
+
+ (*_count)++;
+ }
+
+ ~Variant()
+ {
+ (*_count)--;
+ if (_value && !(*_count))
+ {
+ delete _value;
+ delete _count;
+ }
+ };
+
+ template < typename return_type >
+ return_type & get(void)
+ {
+ try
+ {
+ return_type & ret = dynamic_cast < return_type & > (*_value);
+ return ret;
+ }
+ catch (std::bad_cast & e)
+ {
+ throw InvalidType();
+ }
+
+ };
+
+ int which()
+ {
+ return _value->which();
+ }
+
+ protected:
+ base_type * _value;
+ int *_count;
+};
+
+struct config_process_failure
+{
+ config_process_failure(std::string _msg): msg(_msg) {};
+ std::string msg;
+};
+
+struct config_option
+{
+ typedef int sint_type;
+ typedef unsigned int uint_type;
+ typedef bool bool_type;
+
+ typedef std::string string_type;
+ //typedef boost::function1<void, std::string>
+ typedef void (*fun_type)(std::string);
+
+ typedef std::set < string_type > string_allowed_type;
+
+ /* this should reflect 'variant.which()'! */
+ typedef enum
+ {
+ ID_SINT = 0,
+ ID_UINT = 1,
+ ID_BOOL = 2,
+ ID_STRING = 3,
+ ID_FUN = 4,
+ }
+ value_id_type;
+
+ template <typename number_type>
+ struct range
+ {
+ range(number_type _minimum, number_type _maximum, number_type _step)
+ : minimum(_minimum), maximum(_maximum), step(_step) {};
+
+ number_type minimum, maximum, step;
+ };
+
+ struct BaseType
+ {
+ BaseType() {}
+
+ virtual ~BaseType() {}
+
+ virtual int which() = 0;
+ };
+
+ struct sint_data_type : public BaseType
+ {
+ sint_data_type(sint_type & _sint_val, sint_type _sint_default, range<sint_type> _sint_range)
+ : sint_val(_sint_val), sint_default(_sint_default), sint_range(_sint_range) {};
+
+ int which()
+ {
+ return ID_SINT;
+ }
+
+ sint_type & sint_val;
+ sint_type sint_default;
+ range<sint_type> sint_range;
+ };
+
+ struct uint_data_type : public BaseType
+ {
+ uint_data_type(uint_type & _uint_val, uint_type _uint_default, range<uint_type> _uint_range)
+ : uint_val(_uint_val), uint_default(_uint_default), uint_range(_uint_range) {};
+
+ int which()
+ {
+ return ID_UINT;
+ }
+
+ uint_type & uint_val;
+ uint_type uint_default;
+ range<uint_type> uint_range;
+ };
+
+ struct bool_data_type : public BaseType
+ {
+ bool_data_type(bool_type & _bool_val, bool_type _bool_default)
+ : bool_val(_bool_val), bool_default(_bool_default) {};
+
+ int which()
+ {
+ return ID_BOOL;
+ }
+
+ bool_type & bool_val;
+ bool_type bool_default;
+ };
+
+ struct string_data_type : public BaseType
+ {
+ string_data_type(std::string & _string_val, std::string _string_default, string_allowed_type _string_allowed)
+ : string_val(_string_val), string_default(_string_default), string_allowed(_string_allowed) {};
+
+ int which()
+ {
+ return ID_STRING;
+ }
+
+ std::string & string_val;
+ std::string string_default;
+ string_allowed_type string_allowed;
+ };
+
+ struct fun_data_type : public BaseType
+ {
+ fun_data_type(fun_type _fun_val, std::string _fun_default, string_allowed_type _fun_allowed)
+ : fun_val(_fun_val), fun_default(_fun_default), fun_allowed(_fun_allowed) {};
+
+ int which()
+ {
+ return ID_FUN;
+ }
+
+ fun_type fun_val;
+ std::string fun_default;
+ string_allowed_type fun_allowed;
+ };
+
+
+ typedef Variant < BaseType > value_type;
+ //typedef boost::variant < sint_data_type , uint_data_type, bool_data_type, string_data_type, fun_data_type > value_type;
+
+ config_option(std::string, const string_type &, const string_type, string_allowed_type allowed, bool list_me = true);
+ config_option(std::string, const string_type &, const string_type = "", bool list_me = true);
+ config_option(std::string, const sint_type &, const sint_type = 0, sint_type min = -INT_MAX, sint_type max = INT_MAX, sint_type step = 1, bool list_me = true);
+ config_option(std::string, const uint_type &, const uint_type = 0, uint_type min = 0, uint_type max = UINT_MAX, uint_type step = 1, bool list_me = true);
+ config_option(std::string, const bool_type &, const bool_type = false, bool list_me = true);
+ config_option(std::string, fun_type, std::string defvalue, string_allowed_type allowed, bool list_me = true);
+ config_option(std::string, fun_type, std::string defvalue = "", bool list_me = true);
+
+ ~config_option(void);
+
+ void set(string_type value);
+
+ void set(sint_type value);
+ void set(uint_type value);
+ void set(bool_type value);
+
+ std::string & name(void);
+ value_id_type type(void);
+
+ const char ** values(void);
+
+ void reset(void);
+ void commit(void);
+
+ bool list_me(void) { return _list_me; };
+ bool loaded(void) { return _loaded; };
+
+ void copy_from(config_option &);
+
+ protected:
+ std::string _my_name;
+ value_type _value_data;
+
+ bool _list_me;
+ const char ** _values;
+ bool _loaded;
+};
+
+struct config_options
+{
+ typedef std::vector < std::string > messages_type;
+
+ config_options(void): _values(NULL) {};
+
+ typedef std::set < std::string > string_set;
+
+ typedef std::map < std::string, config_option > option_map_type;
+ typedef std::pair < std::string, config_option > option_pair_type;
+
+ typedef std::map < std::string, std::string > syn_option_map_type;
+ typedef std::pair < std::string, std::string > syn_option_pair_type;
+
+ bool add(config_option option);
+
+ /* only valid in "process" (for backwards compatibility config files) */
+ bool synonym(std::string, std::string);
+
+ template <typename value_type>
+ void set(std::string name, value_type value)
+ {
+ option_map_type::iterator iter = _map.find(name);
+
+ if (iter == _map.end())
+ throw config_process_failure(STG(FMT("unknown option: %s") % name));
+
+ (*iter).second.set(value);
+ }
+
+ string_set options(void);
+
+ void process(const char *, const char *); /* process option from file */
+
+ void reset(void); /* reset loaded opts */
+ messages_type commit(void); /* set defaults */
+
+ const char ** values(const char *); /* option value */
+ const char ** values(void); /* values from options */
+
+ bool loaded(std::string); /* return if config was loaded */
+
+ void copy_from(config_options &, std::string);
+
+ protected:
+ option_map_type::iterator find_option(std::string);
+
+ protected:
+ option_map_type _map;
+ syn_option_map_type _syn_map;
+
+ const char ** _values;
+};
+
+#endif /* INCLUDED_CONFIG_OPTIONS */
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/format.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,208 @@
+#include "format.hpp"
+
+const char * Format::INVALID_MSG = "** Invalid Format **";
+
+
+Format::Format(const char * fmt, bool exception)
+ : _valid(true), _exception(exception)
+{
+ std::string text;
+ std::string arg;
+
+ const char * ptr = fmt;
+
+ while(*ptr != '\0')
+ {
+ if (*ptr != '%')
+ {
+ text += *ptr;
+ ptr++;
+ continue;
+ }
+ else if(*(ptr+1) == '%')
+ {
+ text += *ptr;
+ ptr++;
+ text += *ptr;
+ ptr++;
+ continue;
+ }
+
+ _args.push(new Argument(text, "text"));
+
+ text.clear();
+
+ arg += *ptr;
+
+ bool finished = false;
+
+ ptr++;
+
+ while(*ptr != '\0' && !finished)
+ {
+
+ Argument * argument;
+
+ switch (*ptr)
+ {
+ case ' ':
+ arg += *ptr;
+ _args.push(new Argument(arg, "text"));
+ arg.clear();
+ finished = true;
+ break;
+
+ case '%':
+ _args.push(new Argument(arg, "text"));
+ arg.clear();
+ arg += *ptr;
+ break;
+
+ case 'h':
+ arg += *ptr;
+ break;
+
+ case 'l':
+ arg += *ptr;
+ break;
+
+ case 'd':
+ case 'i':
+ arg += *ptr;
+ argument = new Argument(arg, typeid(int).name());
+ argument->type(typeid(unsigned int).name());
+ _args.push(argument);
+ argument = NULL;
+ arg.clear();
+ finished = true;
+ break;
+
+ case 'o':
+ case 'u':
+ case 'x':
+ case 'X':
+ arg += *ptr;
+ argument = new Argument(arg, typeid(unsigned int).name());
+ argument->type(typeid(int).name());
+ _args.push(argument);
+ argument = NULL;
+ arg.clear();
+ finished = true;
+ break;
+
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ case 'a':
+ case 'A':
+ arg += *ptr;
+ argument = new Argument(arg, typeid(double).name());
+ argument->type(typeid(float).name());
+ _args.push(argument);
+ argument = NULL;
+ arg.clear();
+ finished = true;
+ break;
+
+ case 'c':
+ arg += *ptr;
+ argument = new Argument(arg, typeid(char).name());
+ argument->type(typeid(unsigned char).name());
+ _args.push(argument);
+ argument = NULL;
+ arg.clear();
+ finished = true;
+ break;
+
+ case 's':
+ arg += *ptr;
+ argument = new Argument(arg, typeid(const char *).name());
+ argument->type(typeid(char *).name());
+ argument->type(typeid(const unsigned char *).name());
+ argument->type(typeid(unsigned char *).name());
+ _args.push(argument);
+ argument = NULL;
+ arg.clear();
+ finished = true;
+ break;
+
+ case 'p':
+ case 'C':
+ case 'S':
+ case 'n':
+ case 'm':
+ arg += *ptr;
+ _args.push(new Argument(arg, ""));
+ arg.clear();
+ finished = true;
+ break;
+ default:
+ arg += *ptr;
+ break;
+ }
+
+ ptr++;
+
+ }
+ }
+
+ if(!text.empty())
+ _args.push(new Argument(text, "text"));
+
+ if(!arg.empty())
+ _args.push(new Argument(arg, "text"));
+
+}
+
+std::string Format::str()
+{
+
+ if(!_valid)
+ {
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+
+ _result.clear();
+ _result += INVALID_MSG;
+ return _result;
+ }
+
+ Argument * top;
+ bool text;
+
+ do
+ {
+ text = false;
+
+ if(_args.empty())
+ return _result;
+
+ top = _args.front();
+ _args.pop();
+
+ if(top->compare("text"))
+ {
+ _result += top->fmts();
+ text = true;
+ free(top);
+ }
+
+ }
+ while(text);
+
+ free(top);
+
+ _valid = false;
+
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+
+ _result.clear();
+ _result += INVALID_MSG;
+ return _result;
+}
+
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.hpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.hpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/format.hpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.hpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/format.hpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,183 @@
+#ifndef _FORMAT_H_
+#define _FORMAT_H_
+
+#include <string>
+#include <queue>
+#include <set>
+#include <typeinfo>
+#include <cstring>
+#include <cstdlib>
+
+/* macros used for shortening lines and making the code clearer */
+#define STG(x) (x).str()
+#define FMT(x) Format(x)
+
+struct Format
+{
+ static const char * INVALID_MSG;
+
+ struct Argument
+ {
+ typedef std::set < std::string > StringSet;
+
+ Argument(std::string init_fmts, std::string init_type)
+ : _fmts(init_fmts)
+ {
+ _types.insert(init_type);
+ };
+
+ void type(std::string t)
+ {
+ _types.insert(t);
+ }
+
+ bool compare(const char * type)
+ {
+ for(StringSet::iterator it = _types.begin(); it != _types.end(); it++)
+ {
+ if(!strcmp(type, (*it).c_str()))
+ return true;
+ }
+ return false;
+ }
+
+ std::string fmts()
+ {
+ return _fmts;
+ }
+
+ protected:
+ std::string _fmts;
+ StringSet _types;
+ };
+
+ struct InvalidFormat
+ {
+ InvalidFormat(std::string msg) : _msg(msg) {}
+
+ std::string _msg;
+ };
+
+
+ typedef std::queue < Argument *> ArgumentsQueue;
+
+ Format(const char * fmt, bool exception = false);
+
+ std::string str();
+
+ template < typename Type >
+ Format & operator % ( Type value )
+ {
+ Argument * top;
+ bool text;
+
+ do
+ {
+ text = false;
+
+ if(_args.empty()) {
+ _valid = false;
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+ return *this;
+ }
+
+ top = _args.front();
+ _args.pop();
+
+ if(top->compare("text"))
+ {
+ _result += top->fmts();
+ text = true;
+ free(top);
+ }
+
+ }
+ while(text);
+
+ char tmp[1000];
+
+ if(top->compare(""))
+ {
+ snprintf(tmp, 1000, top->fmts().c_str(), value);
+ _result += tmp;
+ }
+ else if (top->compare(typeid(Type).name()))
+ {
+ snprintf(tmp, 1000, top->fmts().c_str(), value);
+ _result += tmp;
+ }
+ else
+ {
+ free(top);
+ _valid = false;
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+ return *this;
+ }
+
+ free(top);
+
+ return *this;
+ }
+
+Format & operator%( std::string & value )
+{
+ Argument * top;
+ bool text;
+
+ do
+ {
+ text = false;
+
+ if(_args.empty()) {
+ _valid = false;
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+ return *this;
+ }
+
+ top = _args.front();
+ _args.pop();
+
+ if(top->compare("text"))
+ {
+ _result += top->fmts();
+ text = true;
+ free(top);
+ }
+
+ }
+ while(text);
+
+ char tmp[1000];
+
+ if (top->compare(typeid(char *).name()))
+ {
+ snprintf(tmp, 1000, top->fmts().c_str(), value.c_str());
+ _result += tmp;
+ }
+ else
+ {
+ free(top);
+ _valid = false;
+ if(_exception)
+ throw InvalidFormat(INVALID_MSG);
+ return *this;
+ }
+
+ free(top);
+
+ return *this;
+}
+
+private:
+ bool _valid;
+ bool _exception;
+ std::string _result;
+ ArgumentsQueue _args;
+
+};
+
+#endif /* _FORMAT_H_ */
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/k3lapi.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,171 @@
+#include <k3lapi.hpp>
+
+K3LAPI::K3LAPI()
+: _device_count(0), _channel_count(0), _link_count(0),
+ _device_config(0), _channel_config(0), _link_config(0)
+{}
+
+K3LAPI::~K3LAPI()
+{
+ _device_count = 0;
+
+ if (_device_type) { delete[] _device_type; _device_type = NULL; }
+ if (_device_config) { delete[] _device_config; _device_config = NULL; }
+ if (_channel_config) { delete[] _channel_config; _channel_config = NULL; }
+ if (_link_config) { delete[] _link_config; _link_config = NULL; }
+ if (_channel_count) { delete[] _channel_count; _channel_count = NULL; }
+ if (_link_count) { delete[] _link_count; _link_count = NULL; }
+}
+
+/* initialize the whole thing! */
+
+void K3LAPI::start(void)
+{
+ /* tie the used k3l to the compiled k3l version */
+ char *ret = k3lStart(2, 0, 0); //k3lApiBuildVersion);
+
+ if (ret && *ret)
+ throw start_failed(ret);
+
+ /* call init automagically */
+ init();
+}
+
+void K3LAPI::stop(void)
+{
+ k3lStop();
+}
+
+/* envio de comandos para placa */
+
+void K3LAPI::mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index)
+{
+ KMixerCommand mix;
+
+ mix.Track = track;
+ mix.Source = src;
+ mix.SourceIndex = index;
+
+ command(dev, obj, CM_MIXER, (const char *) &mix);
+}
+
+void K3LAPI::mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index)
+{
+ KMixerCommand mix;
+
+ mix.Track = track;
+ mix.Source = src;
+ mix.SourceIndex = index;
+
+ command(dev, obj, CM_MIXER_CTBUS, (const char *) &mix);
+}
+
+void K3LAPI::command(int32 dev, int32 obj, int32 code, std::string & str)
+{
+ command(dev, obj, code, str.c_str());
+}
+
+void K3LAPI::command (int32 dev, int32 obj, int32 code, const char * parms)
+{
+ K3L_COMMAND cmd;
+
+ cmd.Cmd = code;
+ cmd.Object = obj;
+ cmd.Params = (byte *)parms;
+
+ int32 rc = k3lSendCommand(dev, &cmd);
+
+ if (rc != ksSuccess)
+ throw failed_command(code, dev, obj, rc);
+}
+
+void K3LAPI::raw_command(int32 dev, int32 dsp, std::string & str)
+{
+ raw_command(dev, dsp, str.data(), str.size());
+}
+
+void K3LAPI::raw_command(int32 dev, int32 dsp, const char * cmds, int32 size)
+{
+ std::string str(cmds, size);
+
+ int32 rc = k3lSendRawCommand(dev, dsp, (void *)cmds, size);
+
+ if (rc != ksSuccess)
+ throw failed_raw_command(dev, dsp, rc);
+}
+
+KLibraryStatus K3LAPI::get_param(K3L_EVENT *ev, const char *name, std::string &res)
+{
+ char tmp_param[256];
+ memset((void*)tmp_param, 0, sizeof(tmp_param));
+
+ int32 rc = k3lGetEventParam (ev, (sbyte *)name, (sbyte *)tmp_param, sizeof(tmp_param)-1);
+
+ if (rc != ksSuccess)
+ return (KLibraryStatus)rc;
+
+ res.append(tmp_param, strlen(tmp_param));
+ return ksSuccess;
+}
+
+std::string K3LAPI::get_param(K3L_EVENT *ev, const char *name)
+{
+ std::string res;
+
+ KLibraryStatus rc = get_param(ev, name, res);
+
+ if (rc != ksSuccess)
+ throw get_param_failed(name, rc);
+
+ return res;
+}
+
+void K3LAPI::init(void)
+{
+ if (_device_count != 0) return;
+
+ _device_count = k3lGetDeviceCount();
+
+ _device_type = new KDeviceType[_device_count];
+ _device_config = new device_conf_type[_device_count];
+ _channel_config = new channel_ptr_conf_type[_device_count];
+ _link_config = new link_ptr_conf_type[_device_count];
+ _channel_count = new unsigned int[_device_count];
+ _link_count = new unsigned int[_device_count];
+
+ for (unsigned int dev = 0; dev < _device_count; dev++)
+ {
+ _device_type[dev] = (KDeviceType) k3lGetDeviceType(dev);
+
+ /* caches each device config */
+ if (k3lGetDeviceConfig(dev, ksoDevice + dev, &(_device_config[dev]), sizeof(_device_config[dev])) != ksSuccess)
+ throw start_failed("k3lGetDeviceConfig(device)");
+
+ /* adjust channel/link count for device */
+ _channel_count[dev] = _device_config[dev].ChannelCount;
+ _link_count[dev] = _device_config[dev].LinkCount;
+
+ /* caches each channel config */
+ _channel_config[dev] = new channel_conf_type[_channel_count[dev]];
+
+ for (unsigned int obj = 0; obj < _channel_count[dev]; obj++)
+ {
+ if (k3lGetDeviceConfig(dev, ksoChannel + obj, &(_channel_config[dev][obj]),
+ sizeof(_channel_config[dev][obj])) != ksSuccess)
+ throw start_failed("k3lGetDeviceConfig(channel)");
+ }
+
+ /* adjust link count for device */
+ _link_count[dev] = _device_config[dev].LinkCount;
+
+ /* caches each link config */
+ _link_config[dev] = new link_conf_type[_link_count[dev]];
+
+ for (unsigned int obj = 0; obj < _link_count[dev]; obj++)
+ {
+ if (k3lGetDeviceConfig(dev, ksoLink + obj, &(_link_config[dev][obj]),
+ sizeof(_link_config[dev][obj])) != ksSuccess)
+ throw start_failed("k3lGetDeviceConfig(link)");
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.hpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.hpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/k3lapi.hpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.hpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/k3lapi.hpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,314 @@
+#include <string>
+
+#include <k3l.h>
+
+/* if using full k3l.h (for softpbx), version already defined. */
+#ifndef k3lApiMajorVersion
+# include <k3lVersion.h>
+#endif
+
+#ifdef __GNUC_PREREQ
+#if __GNUC_PREREQ(4,3)
+#include <cstring>
+#endif
+#endif
+
+#ifndef INCLUDED_K3LAPI_HPP
+#define INCLUDED_K3LAPI_HPP
+
+struct K3LAPI
+{
+ /* exceptions */
+
+ struct start_failed
+ {
+ start_failed(const char * _msg) : msg(_msg) {};
+ std::string msg;
+ };
+
+ struct failed_command
+ {
+ failed_command(int32 _code, unsigned short _dev, unsigned short _obj, int32 _rc)
+ : code(_code), dev(_dev), obj(_obj), rc(_rc) {};
+
+ int32 code;
+ unsigned short dev;
+ unsigned short obj;
+ int32 rc;
+ };
+
+ struct failed_raw_command
+ {
+ failed_raw_command(unsigned short _dev, unsigned short _dsp, int32 _rc)
+ : dev(_dev), dsp(_dsp), rc(_rc) {};
+
+ unsigned short dev;
+ unsigned short dsp;
+ int32 rc;
+ };
+
+ struct invalid_session
+ {
+ invalid_session(unsigned int _device, unsigned int _channel)
+ : device(_device), channel(_channel) {};
+
+ unsigned int device;
+ unsigned int channel;
+ };
+
+ struct invalid_device
+ {
+ invalid_device(int32 _device)
+ : device(_device) {};
+
+ int32 device;
+ };
+
+ struct invalid_channel
+ {
+ invalid_channel(int32 _device, int32 _channel)
+ : device(_device), channel(_channel) {};
+
+ int32 device, channel;
+ };
+
+ struct invalid_link
+ {
+ invalid_link(unsigned int _device, unsigned int _link)
+ : device(_device), link(_link) {};
+
+ int32 device, link;
+ };
+
+ struct get_param_failed
+ {
+ get_param_failed(std::string _name, int32 _rc)
+ : name(_name), rc((KLibraryStatus)_rc) {};
+
+ std::string name;
+ KLibraryStatus rc;
+ };
+
+ typedef K3L_DEVICE_CONFIG device_conf_type;
+ typedef K3L_CHANNEL_CONFIG channel_conf_type;
+ typedef K3L_CHANNEL_CONFIG * channel_ptr_conf_type;
+ typedef K3L_LINK_CONFIG link_conf_type;
+ typedef K3L_LINK_CONFIG * link_ptr_conf_type;
+
+ /* constructors/destructors */
+
+ K3LAPI();
+ ~K3LAPI();
+
+ /* (init|final)ialize the whole thing! */
+
+ void start(void);
+ void stop(void);
+
+ /* verificacao de intervalos */
+
+ inline bool valid_device(int32 dev)
+ {
+ return (dev >= 0 && dev < ((int32)_device_count));
+ }
+
+ inline bool valid_channel(int32 dev, int32 obj)
+ {
+ return (valid_device(dev) && obj >= 0 && obj < ((int32)_channel_count[dev]));
+ }
+
+ inline bool valid_link(int32 dev, int32 obj)
+ {
+ return (valid_device(dev) && obj >= 0 && obj < ((int32)_link_count[dev]));
+ }
+
+ /*!
+ \brief High level object identifier
+ Since Khomp works with an object concept, this is used to map the
+ object id with its proper type.
+ */
+ struct target
+ {
+ /*! The types a target can have */
+ typedef enum { DEVICE, CHANNEL, MIXER, LINK } target_type;
+
+ target(K3LAPI & k3lapi, target_type type_init, int32 device_value, int32 object_value)
+ : type(type_init),
+ device((unsigned short)device_value),
+ object((unsigned short)object_value)
+ {
+ switch (type_init)
+ {
+ case DEVICE:
+ if (!k3lapi.valid_device(device))
+ throw invalid_device(device);
+ break;
+
+ case CHANNEL:
+ case MIXER:
+ if (!k3lapi.valid_channel(device, object))
+ throw invalid_channel(device, object);
+ break;
+
+ case LINK:
+ if (!k3lapi.valid_link(device, object))
+ throw invalid_link(device, object);
+ break;
+ }
+
+ };
+
+ target_type type;
+
+ unsigned short device;
+ unsigned short object;
+ };
+
+ /* envio de comandos para placa (geral) */
+
+ void raw_command(int32 dev, int32 dsp, std::string & str);
+ void raw_command(int32 dev, int32 dsp, const char * cmds, int32 size);
+
+ /* obter dados 'cacheados' (geral) */
+
+ inline unsigned int device_count(void)
+ {
+ return _device_count;
+ }
+
+ /* envio de comandos para placa (sem identificadores) */
+
+ void mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index);
+ void mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index);
+
+ void command (int32 dev, int32 obj, int32 code, std::string & str);
+ void command (int32 dev, int32 obj, int32 code, const char * parms = NULL);
+
+ /* obter dados 'cacheados' (sem identificadores) */
+
+ inline unsigned int channel_count(int32 dev)
+ {
+ if (!valid_device(dev))
+ throw invalid_device(dev);
+
+ return _channel_count[dev];
+ }
+
+ inline unsigned int link_count(int32 dev)
+ {
+ if (!valid_device(dev))
+ throw invalid_device(dev);
+
+ return _link_count[dev];
+ }
+
+ KDeviceType device_type(int32 dev)
+ {
+ if (!valid_device(dev))
+ throw invalid_device(dev);
+
+ return _device_type[dev];
+ }
+
+
+ K3L_DEVICE_CONFIG & device_config(int32 dev)
+ {
+ if (!valid_device(dev))
+ throw invalid_device(dev);
+
+ return _device_config[dev];
+ }
+
+ K3L_CHANNEL_CONFIG & channel_config(int32 dev, int32 obj)
+ {
+ if (!valid_channel(dev, obj))
+ throw invalid_channel(dev, obj);
+
+ return _channel_config[dev][obj];
+ }
+
+ K3L_LINK_CONFIG & link_config(int32 dev, int32 obj)
+ {
+ if (!valid_channel(dev, obj))
+ throw invalid_channel(dev, obj);
+
+ return _link_config[dev][obj];
+ }
+
+ /* envio de comandos para placa (com identificadores) */
+
+ void mixer(target & tgt, byte track, KMixerSource src, int32 index)
+ {
+ mixer((int32)tgt.device, (int32)tgt.object, track, src, index);
+ }
+
+ void mixerCTbus(target & tgt, byte track, KMixerSource src, int32 index)
+ {
+ mixerCTbus((int32)tgt.device, (int32)tgt.object, track, src, index);
+ }
+
+ void command (target & tgt, int32 code, std::string & str)
+ {
+ command((int32)tgt.device, (int32)tgt.object, code, str);
+ };
+
+ void command (target & tgt, int32 code, const char * parms = NULL)
+ {
+ command((int32)tgt.device, (int32)tgt.object, code, parms);
+ };
+
+ /* obter dados 'cacheados' (com indentificadores) */
+
+ inline unsigned int channel_count(target & tgt)
+ {
+ return _channel_count[tgt.device];
+ }
+
+ inline unsigned int link_count(target & tgt)
+ {
+ return _link_count[tgt.device];
+ }
+
+ KDeviceType device_type(target & tgt)
+ {
+ return _device_type[tgt.device];
+ }
+
+
+ K3L_DEVICE_CONFIG & device_config(target & tgt)
+ {
+ return _device_config[tgt.device];
+ }
+
+ K3L_CHANNEL_CONFIG & channel_config(target & tgt)
+ {
+ return _channel_config[tgt.device][tgt.object];
+ }
+
+ K3L_LINK_CONFIG & link_config(target & tgt)
+ {
+ return _link_config[tgt.device][tgt.object];
+ }
+
+ /* pega valores em strings de eventos */
+
+ KLibraryStatus get_param(K3L_EVENT *ev, const char *name, std::string &res);
+ std::string get_param(K3L_EVENT *ev, const char *name);
+
+ /* inicializa valores em cache */
+
+ void init(void);
+
+ protected:
+
+ unsigned int _device_count;
+ unsigned int * _channel_count;
+ unsigned int * _link_count;
+
+ device_conf_type * _device_config;
+ channel_ptr_conf_type * _channel_config;
+ link_ptr_conf_type * _link_config;
+ KDeviceType * _device_type;
+};
+
+#endif /* INCLUDED_K3LAPI_HPP */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/strings.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,153 @@
+#include <strings.hpp>
+
+void Strings::Merger::add(std::string s)
+{
+ _list.push_back(s);
+};
+
+std::string Strings::Merger::merge(const std::string & sep)
+{
+ list_type::iterator i = _list.begin();
+
+ std::string res;
+
+ if (i != _list.end())
+ {
+ res += (*i);
+ ++i;
+ };
+
+ while (i != _list.end())
+ {
+ res += sep;
+ res += (*i);
+ ++i;
+ }
+
+ return res;
+};
+
+std::string Strings::Merger::merge(const char *sep)
+{
+ std::string ssep(sep);
+ return merge(ssep);
+}
+
+void Strings::tokenize(const std::string & str, Strings::vector_type & tokens,
+ const std::string & delims, long int max_tokens)
+{
+ std::string::size_type init = str.find_first_not_of(delims, 0);
+ std::string::size_type fini = str.find_first_of(delims, init);
+
+ long int cur_token = 1;
+
+ while (std::string::npos != init)
+ {
+ if (std::string::npos != fini && cur_token < max_tokens)
+ {
+ tokens.push_back(str.substr(init, fini - init));
+ ++cur_token;
+ }
+ else
+ {
+ tokens.push_back(str.substr(init, str.size() - init));
+ break;
+ }
+
+ init = str.find_first_not_of(delims, fini);
+ fini = str.find_first_of(delims, init);
+ }
+}
+
+bool Strings::toboolean(std::string str)
+{
+ std::string tmp(str);
+
+ Strings::lower(tmp);
+
+ if ((tmp == "true") || (tmp == "yes")) return true;
+ if ((tmp == "false") || (tmp == "no")) return false;
+
+ throw invalid_value(str);
+}
+
+long Strings::tolong(std::string str, int base)
+{
+ char *str_end = 0;
+
+ unsigned long value = strtol(str.c_str(), &str_end, base);
+
+ if (str_end && *str_end == 0)
+ return value;
+
+ throw invalid_value(str);
+}
+
+unsigned long Strings::toulong(std::string str, int base)
+{
+ char *str_end = 0;
+
+ unsigned long value = strtoul(str.c_str(), &str_end, base);
+
+ if (str_end && *str_end == 0)
+ return value;
+
+ throw invalid_value(str);
+}
+
+unsigned long long Strings::toulonglong(std::string str, int base)
+{
+#if defined(_WINDOWS) || defined(_Windows) || defined(_WIN32) || defined(WIN32)
+ throw not_implemented();
+#else
+ char *str_end = 0;
+
+ unsigned long long value = strtoull(str.c_str(), &str_end, base);
+
+ if (str_end && *str_end == 0)
+ return value;
+
+ throw invalid_value(str);
+#endif
+}
+
+std::string Strings::fromboolean(bool value)
+{
+ if (value) return "true";
+ else return "false";
+}
+
+std::string Strings::lower(std::string str)
+{
+ std::string res;
+
+ for (std::string::iterator i = str.begin(); i != str.end(); i++)
+ res += tolower((*i));
+
+ return res;
+}
+
+std::string Strings::hexadecimal(std::string value)
+{
+ std::string result;
+
+ for (std::string::iterator i = value.begin(); i != value.end(); i++)
+ {
+ if (i != value.begin())
+ result += " ";
+
+ result += STG(FMT("%2x") % (unsigned int)(*i));
+ }
+
+ return result;
+}
+
+std::string Strings::trim(const std::string& str, const std::string& trim_chars)
+{
+ std::string result(str);
+
+ result.erase( result.find_last_not_of( trim_chars ) + 1 );
+ result.erase( 0, result.find_first_not_of( trim_chars ) );
+
+ return result;
+}
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.hpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.hpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/strings.hpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.hpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/strings.hpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+#include <limits.h>
+
+#include <list>
+#include <vector>
+#include <string>
+
+#include <format.hpp>
+
+#include <types.hpp>
+
+/* Generic string funcions */
+
+#ifndef INCLUDED_STRINGS_HPP
+#define INCLUDED_STRINGS_HPP
+
+struct Strings
+{
+ typedef std::list<std::string> list_type;
+ typedef std::vector<std::string> vector_type;
+
+ struct Merger
+ {
+ void add(std::string);
+
+ std::string merge(const std::string &);
+ std::string merge(const char *);
+
+ bool empty() { return _list.empty(); };
+
+ protected:
+ list_type _list;
+ };
+
+ public:
+ struct invalid_value
+ {
+ invalid_value(const char * value): _value(value) {};
+ invalid_value(std::string value): _value(value) {};
+
+ std::string & value() { return _value; }
+
+ protected:
+ std::string _value;
+ };
+
+ struct not_implemented {};
+
+ static void tokenize(const std::string &, vector_type &, const std::string & delims = ",;:", long int max_toxens = LONG_MAX);
+
+ static bool toboolean(std::string);
+ static std::string fromboolean(bool);
+
+ static long tolong(std::string, int base = 10);
+ static unsigned long toulong(std::string, int base = 10);
+ static unsigned long long toulonglong(std::string, int base = 10);
+
+ static std::string lower(std::string);
+ static std::string hexadecimal(std::string);
+
+ static std::string trim(const std::string&, const std::string& trim_chars = " \f\n\r\t\v");
+};
+
+#endif // INCLUDED_STRINGS_HPP //
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/types.hpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/types.hpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/commons/types.hpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/types.hpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/commons/types.hpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,169 @@
+#ifndef INCLUDED_TYPES_HPP
+#define INCLUDED_TYPES_HPP
+
+#if defined(LINUX) || defined(__LINUX__) || defined(__linux__)
+#include <stdlib.h>
+#endif
+
+/*** Used for conditional compilation based on K3L version ***/
+
+#define K3L_AT_LEAST(major,minor,build) \
+ (((k3lApiMajorVersion == major) && ((k3lApiMinorVersion == minor) && (k3lApiBuildVersion >= build)) || \
+ ((k3lApiMajorVersion == major) && (k3lApiMinorVersion > minor))) || \
+ (k3lApiMajorVersion > major))
+
+#define K3L_EXACT(major,minor,build) \
+ ((k3lApiMajorVersion == major) && (k3lApiMinorVersion == minor) && (k3lApiBuildVersion >= build))
+
+/**** Used for indexing any kind of Khomp object. ****/
+
+typedef unsigned short int ushort;
+
+template <class value_type>
+struct ktype_id
+{
+ ktype_id(value_type id): _id(id) {};
+
+ value_type id(void) { return _id; };
+
+ protected:
+ value_type _id;
+};
+
+struct deviceId: ktype_id<ushort> { deviceId(ushort id): ktype_id<ushort>(id) {}; };
+struct channelId: ktype_id<ushort> { channelId(ushort id): ktype_id<ushort>(id) {}; };
+struct playerId: ktype_id<ushort> { playerId(ushort id): ktype_id<ushort>(id) {}; };
+struct mixerId: ktype_id<ushort> { mixerId(ushort id): ktype_id<ushort>(id) {}; };
+struct linkId: ktype_id<ushort> { linkId(ushort id): ktype_id<ushort>(id) {}; };
+
+struct kobject
+{
+ struct hash;
+ struct less;
+ struct equal;
+ struct hashLess;
+
+ struct item
+ {
+ typedef enum
+ {
+ DEVICE = 1,
+ CHANNEL = 2,
+ PLAYER = 3,
+ MIXER = 4,
+ LINK = 5,
+ }
+ type_t;
+
+ item(deviceId dev)
+ {
+ _type = DEVICE;
+ _dev = dev.id();
+ _obj = 0xffff;
+ };
+
+ item(deviceId dev, channelId chan)
+ {
+ _type = CHANNEL;
+ _dev = dev.id();
+ _obj = chan.id();
+ };
+
+ item(deviceId dev, playerId play)
+ {
+ _type = PLAYER;
+ _dev = dev.id();
+ _obj = play.id();
+ };
+
+ item(deviceId dev, mixerId mix)
+ {
+ _type = MIXER;
+ _dev = dev.id();
+ _obj = mix.id();
+ };
+
+ item(deviceId dev, linkId lnk)
+ {
+ _type = LINK;
+ _dev = dev.id();
+ _obj = lnk.id();
+ };
+
+ type_t type() { return _type; };
+ ushort device() { return _dev; };
+ ushort object() { return _obj; };
+
+ protected:
+ type_t _type;
+ ushort _dev;
+ ushort _obj;
+
+ private:
+ item();
+
+ friend struct kobject::hash;
+ friend struct kobject::less;
+ friend struct kobject::equal;
+ friend struct kobject::hashLess;
+ };
+
+ struct hash
+ {
+ size_t operator()(const item &i) const
+ {
+ return (((ushort) (i._type)) << 28) + ((i._dev) << 16) + (i._obj);
+ }
+ };
+
+ struct equal
+ {
+ bool operator()(const item &i1, const item &i2) const
+ {
+ return
+ ((i1._type == i2._type) &&
+ (i1._dev == i2._dev) &&
+ (i1._obj == i2._obj));
+ }
+ };
+
+ struct less
+ {
+ bool comp(const item &i1, const item &i2) const
+ {
+ if (i1._type < i2._type)
+ return true;
+
+ if (i1._type == i2._type)
+ {
+ if (i1._dev < i2._dev)
+ return true;
+
+ if (i1._dev == i2._dev)
+ {
+ if (i1._obj < i2._obj)
+ return true;
+ else
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ bool operator()(const item &i1, const item &i2) const
+ {
+ return comp(i1,i2);
+ }
+ };
+
+ struct hashLess
+ : public hash, public less
+ {
+ public:
+ static const size_t bucket_size = 4;
+ static const size_t min_buckets = 8;
+ };
+};
+
+#endif /* INCLUDED_TYPES_HPP */
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/docs (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/docs)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/docs/Doxygen.conf
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/docs/Doxygen.conf (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/docs/Doxygen.conf) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/docs/Doxygen.conf (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/docs/Doxygen.conf 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1540 @@
+# Doxyfile 1.5.8
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = mod_khomp
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = .
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,
+# Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page. This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../ \
+ ../include \
+ ../commons \
+ ../src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.d \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox \
+ *.py
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 1
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE = mod_khomp.chm
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature. Other possible values
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = NO
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS = *.h
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED = NO
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = NO
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = jpg
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 1000
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/globals.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/globals.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/globals.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/globals.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/globals.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+#ifndef _GLOBALS_H_
+#define _GLOBALS_H_
+
+#include "k3lapi.hpp"
+
+#include <config_options.hpp>
+
+#include <vector>
+
+extern "C"
+{
+ #include <switch.h>
+}
+
+
+struct Globals
+{
+
+ static K3LAPI _k3lapi;
+
+ /* Config options class */
+ static config_options _options;
+
+
+
+ static switch_endpoint_interface_t *_khomp_endpoint_interface;
+ static switch_api_interface_t *_api_interface;
+ static switch_memory_pool_t *_module_pool;
+ static int _running;
+
+ static unsigned int _flags;
+ static int _calls;
+ static switch_mutex_t *_mutex;
+
+};
+
+
+#endif /* _GLOBALS_H_ */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3l.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3l.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/k3l.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3l.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3l.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1787 @@
+/*
+ KHOMP channel provider for Asterisk PBX
+ Copyright (C) 2007-2008 Khomp Ind. & Com.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#ifndef INCLUDED_K3LDEFS_H
+#define INCLUDED_K3LDEFS_H
+#if !defined KLTYPEDEFS_H
+#define KLTYPEDEFS_H
+#if defined( _WINDOWS ) || defined( _Windows ) || defined( _WIN32 )
+ #ifndef KWIN32
+ #define KWIN32 1
+ #endif
+#endif
+
+#ifdef KWIN32
+ typedef __int64 int64;
+ typedef unsigned __int64 uint64;
+ #define Kstdcall __stdcall
+#else
+ typedef long long int64;
+ typedef unsigned long long uint64;
+ #define Kstdcall
+#endif
+typedef int int32;
+typedef unsigned int uint32;
+typedef unsigned long long intptr;
+typedef long stackint;
+typedef short int int16;
+typedef unsigned short int uint16;
+typedef char int8;
+typedef unsigned char uint8;
+typedef unsigned char byte;
+typedef char sbyte;
+typedef double float64;
+typedef float float32;
+typedef int32 stt_code;
+
+enum KLibraryStatus
+{
+ ksSuccess = 0,
+ ksFail = 1,
+ ksTimeOut = 2,
+ ksBusy = 3,
+ ksLocked = 4,
+ ksInvalidParams = 5,
+ ksEndOfFile = 6,
+ ksInvalidState = 7,
+ ksServerCommFail = 8,
+ ksOverflow = 9,
+ ksUnderrun = 10,
+ ksNotFound = 11,
+ ksNotAvailable = 12
+};
+enum KTxRx
+{
+ kNoTxRx = 0x0,
+ kTx = 0x1,
+ kRx = 0x2,
+ kBoth = 0x3
+};
+
+#define KMAX_SERIAL_NUMBER 12
+#define KMAX_E1_CHANNELS 30
+#define KMAX_DIAL_NUMBER 20
+#define KMAX_ADDRESS 60
+#define KMAX_DSP_NAME 8
+#define KMAX_STR_VERSION 80
+#define KMAX_BUFFER_ADDRESSES 16
+#define KMAX_LOG 1024
+#define KMAX_SIP_DATA 248
+#endif
+#if !defined KVOIPDEFS_H
+#define KVOIPDEFS_H
+enum KRejectReason
+{
+ UserBusy = 0,
+ UserNotFound,
+ NoAnswer,
+ Decline,
+ ServiceUnavailable,
+ ServerInternalError,
+ UnknownRejectReason
+};
+enum KSIP_Failures
+{
+ kveResponse_200_OK_Success = 200,
+ kveRedirection_300_MultipleChoices = 300,
+ kveRedirection_301_MovedPermanently = 301,
+ kveRedirection_302_MovedTemporarily = 302,
+ kveRedirection_305_UseProxy = 305,
+ kveRedirection_380_AlternativeService = 380,
+ kveFailure_400_BadRequest = 400,
+ kveFailure_401_Unauthorized = 401,
+ kveFailure_402_PaymentRequired = 402,
+ kveFailure_403_Forbidden = 403,
+ kveFailure_404_NotFound = 404,
+ kveFailure_405_MethodNotAllowed = 405,
+ kveFailure_406_NotAcceptable = 406,
+ kveFailure_407_ProxyAuthenticationRequired = 407,
+ kveFailure_408_RequestTimeout = 408,
+ kveFailure_410_Gone = 410,
+ kveFailure_413_RequestEntityTooLarge = 413,
+ kveFailure_414_RequestURI_TooLong = 414,
+ kveFailure_415_UnsupportedMediaType = 415,
+ kveFailure_416_UnsupportedURI_Scheme = 416,
+ kveFailure_420_BadExtension = 420,
+ kveFailure_421_ExtensionRequired = 421,
+ kveFailure_423_IntervalTooBrief = 423,
+ kveFailure_480_TemporarilyUnavailable = 480,
+ kveFailure_481_CallDoesNotExist = 481,
+ kveFailure_482_LoopDetected = 482,
+ kveFailure_483_TooManyHops = 483,
+ kveFailure_484_AddressIncomplete = 484,
+ kveFailure_485_Ambiguous = 485,
+ kveFailure_486_BusyHere = 486,
+ kveFailure_487_RequestTerminated = 487,
+ kveFailure_488_NotAcceptableHere = 488,
+ kveFailure_491_RequestPending = 491,
+ kveFailure_493_Undecipherable = 493,
+ kveServer_500_InternalError = 500,
+ kveServer_501_NotImplemented = 501,
+ kveServer_502_BadGateway = 502,
+ kveServer_503_ServiceUnavailable = 503,
+ kveServer_504_TimeOut = 504,
+ kveServer_505_VersionNotSupported = 505,
+ kveServer_513_MessageTooLarge = 513,
+ kveGlobalFailure_600_BusyEverywhere = 600,
+ kveGlobalFailure_603_Decline = 603,
+ kveGlobalFailure_604_DoesNotExistAnywhere = 604,
+ kveGlobalFailure_606_NotAcceptable = 606
+};
+enum KVoIPRegTypes
+{
+ kvrtRegister = 0,
+ kvrtUnregister = 1
+};
+
+struct KVoIPCallParams
+{
+ sbyte ToUser[ KMAX_ADDRESS + 1 ];
+ sbyte FromUser[ KMAX_ADDRESS + 1 ];
+ sbyte FromUserIP[ KMAX_ADDRESS + 1 ];
+};
+struct KVoIPEvRegisterParams
+{
+ KVoIPRegTypes Register;
+ sbyte User[ KMAX_ADDRESS + 1 ];
+ sbyte ProxyIP[ KMAX_ADDRESS + 1 ];
+};
+struct KVoIPSeize
+{
+ sbyte FromUser[ KMAX_ADDRESS + 1 ];
+ sbyte ToUser[ KMAX_ADDRESS + 1 ];
+ sbyte ProxyIP[ KMAX_ADDRESS + 1 ];
+};
+#endif
+#if !defined KLDEFS_H
+#define KLDEFS_H
+
+
+
+#define CM_SEIZE 0x01
+
+#define CM_SYNC_SEIZE 0x02
+
+#define CM_SIP_REGISTER 0x03
+
+#define CM_DIAL_DTMF 0x04
+
+#define CM_DISCONNECT 0x05
+
+#define CM_CONNECT 0x06
+
+#define CM_PRE_CONNECT 0x07
+
+#define CM_CAS_CHANGE_LINE_STT 0x08
+
+#define CM_CAS_SEND_MFC 0x09
+
+#define CM_SET_FORWARD_CHANNEL 0x0A
+
+#define CM_CAS_SET_MFC_DETECT_MODE 0x0B
+
+#define CM_DROP_COLLECT_CALL 0x0C
+
+#define CM_MAKE_CALL 0x0D
+
+#define CM_RINGBACK 0x0E
+
+#define CM_USER_INFORMATION 0x0F
+
+#define CM_VOIP_SEIZE 0x23
+
+
+#define CM_LOCK_INCOMING 0x10
+
+#define CM_UNLOCK_INCOMING 0x11
+
+#define CM_LOCK_OUTGOING 0x12
+
+#define CM_UNLOCK_OUTGOING 0x13
+
+#define CM_START_SEND_FAIL 0x14
+
+#define CM_STOP_SEND_FAIL 0x15
+
+#define CM_END_OF_NUMBER 0x16
+
+#define CM_SEND_SIP_DATA 0x17
+
+#define CM_SS_TRANSFER 0x18
+
+#define CM_GET_SMS 0x19
+
+#define CM_PREPARE_SMS 0x1A
+
+#define CM_SEND_SMS 0x1B
+
+#define CM_SEND_TO_MODEM 0x1C
+
+#define CM_CHECK_NEW_SMS 0x1D
+
+#define CM_ISDN_SEND_SUBADDRESSES 0x1E
+
+#define CM_ENABLE_DTMF_SUPPRESSION 0x30
+
+#define CM_DISABLE_DTMF_SUPPRESSION 0x31
+
+#define CM_ENABLE_AUDIO_EVENTS 0x32
+
+#define CM_DISABLE_AUDIO_EVENTS 0x33
+
+#define CM_ENABLE_CALL_PROGRESS 0x34
+
+#define CM_DISABLE_CALL_PROGRESS 0x35
+
+#define CM_FLASH 0x36
+
+#define CM_ENABLE_PULSE_DETECTION 0x37
+
+#define CM_DISABLE_PULSE_DETECTION 0x38
+
+#define CM_ENABLE_ECHO_CANCELLER 0x39
+
+#define CM_DISABLE_ECHO_CANCELLER 0x3A
+
+#define CM_ENABLE_AGC 0x3B
+
+#define CM_DISABLE_AGC 0x3C
+
+#define CM_ENABLE_HIGH_IMP_EVENTS 0x3D
+
+#define CM_DISABLE_HIGH_IMP_EVENTS 0x3E
+
+#define CM_ENABLE_CALL_ANSWER_INFO 0x40
+
+#define CM_DISABLE_CALL_ANSWER_INFO 0x41
+
+#define CM_HOLD_SWITCH 0x4A
+
+#define CM_MPTY_CONF 0x4B
+
+#define CM_MPTY_SPLIT 0x4C
+
+#define CM_START_FAX_TX 0x50
+
+#define CM_CANCEL_FAX_TX 0x51
+
+#define CM_ADD_FAX_FILE 0x52
+
+
+#define CM_RESET_LINK 0xF1
+
+#define CM_CLEAR_LINK_ERROR_COUNTER 0xF2
+
+#define CM_SEND_DEVICE_SECURITY_KEY 0xF3
+
+#define CM_RESET_MODEM 0xF4
+
+
+#define EV_CHANNEL_FREE 0x01
+
+#define EV_CONNECT 0x03
+
+#define EV_DISCONNECT 0x04
+
+#define EV_CALL_SUCCESS 0x05
+
+#define EV_CALL_FAIL 0x06
+
+#define EV_NO_ANSWER 0x07
+
+#define EV_BILLING_PULSE 0x08
+
+#define EV_SEIZE_SUCCESS 0x09
+
+#define EV_SEIZE_FAIL 0x0A
+
+#define EV_SEIZURE_START 0x0B
+
+#define EV_CAS_LINE_STT_CHANGED 0x0C
+
+#define EV_CAS_MFC_RECV 0x0D
+
+#define EV_NEW_CALL 0x0E
+
+#define EV_USER_INFORMATION 0x0F
+
+#define EV_DIALED_DIGIT 0x10
+
+#define EV_SIP_REGISTER_INFO 0x11
+
+#define EV_RING_DETECTED 0x12
+
+#define EV_ISDN_SUBADDRESSES 0x13
+
+#define EV_CALL_HOLD_START 0x16
+
+#define EV_CALL_HOLD_STOP 0x17
+
+#define EV_SS_TRANSFER_FAIL 0x18
+
+#define EV_FLASH 0x19
+
+#define EV_ISDN_PROGRESS_INDICATOR 0x1A
+
+#define EV_DTMF_DETECTED 0x20
+
+#define EV_DTMF_SEND_FINISH 0x21
+
+#define EV_AUDIO_STATUS 0x22
+
+#define EV_CADENCE_RECOGNIZED 0x23
+#define EV_CALL_PROGRESS EV_CADENCE_RECOGNIZED
+
+#define EV_END_OF_STREAM 0x24
+
+#define EV_PULSE_DETECTED 0x25
+
+#define EV_POLARITY_REVERSAL 0x26
+
+#define EV_CALL_ANSWER_INFO 0x27
+
+#define EV_COLLECT_CALL 0x28
+
+#define EV_SIP_DTMF_DETECTED 0x29
+
+#define EV_SIP_DATA 0x2A
+
+#define EV_RECV_FROM_MODEM 0x42
+
+#define EV_NEW_SMS 0x43
+
+#define EV_SMS_INFO 0x44
+
+#define EV_SMS_DATA 0x45
+
+#define EV_SMS_SEND_RESULT 0x46
+
+#define EV_CALL_MPTY_START 0x47
+
+#define EV_CALL_MPTY_STOP 0x48
+
+#define EV_GSM_COMMAND_STATUS 0x49
+
+
+#define EV_CHANNEL_FAIL 0x30
+
+#define EV_REFERENCE_FAIL 0x31
+
+#define EV_INTERNAL_FAIL 0x32
+
+#define EV_HARDWARE_FAIL 0x33
+
+#define EV_LINK_STATUS 0x34
+
+#define EV_PHYSICAL_LINK_UP 0x35
+
+#define EV_PHYSICAL_LINK_DOWN 0x36
+
+#define EV_CLIENT_RECONNECT 0xF0
+
+#define EV_CLIENT_AUDIOLISTENER_TIMEOUT 0xF1
+
+#define EV_CLIENT_BUFFERED_AUDIOLISTENER_OVERFLOW 0xF2
+
+#define EV_REQUEST_DEVICE_SECURITY_KEY 0xF3
+
+#define EV_DISK_IS_FULL 0xF4
+
+
+#define CM_SEND_DTMF 0xD1
+
+#define CM_STOP_AUDIO 0xD2
+
+#define CM_HARD_RESET 0xF0
+
+#define EV_VOIP_SEIZURE 0x40
+
+#define EV_SEIZURE 0x41
+
+#define EV_FAX_CHANNEL_FREE 0x50
+#define EV_FAX_FILE_SENT 0x51
+#define EV_FAX_FILE_FAIL 0x52
+#endif
+
+ #define FC_REMOTE_FAIL 0x01
+ #define FC_LOCAL_FAIL 0x02
+
+ #define FC_REMOTE_LOCK 0x03
+
+ #define FC_LINE_SIGNAL_FAIL 0x04
+ #define FC_ACOUSTIC_SIGNAL_FAIL 0x05
+
+enum KChannelFail
+{
+ kfcRemoteFail = FC_REMOTE_FAIL,
+ kfcLocalFail = FC_LOCAL_FAIL,
+ kfcRemoteLock = FC_REMOTE_LOCK,
+ kfcLineSignalFail = FC_LINE_SIGNAL_FAIL,
+ kfcAcousticSignalFail = FC_ACOUSTIC_SIGNAL_FAIL
+};
+
+ #define ER_INTERRUPT_CTRL 0x01
+ #define ER_COMMUNICATION_FAIL 0x02
+ #define ER_PROTOCOL_FAIL 0x03
+ #define ER_INTERNAL_BUFFER 0x04
+ #define ER_MONITOR_BUFFER 0x05
+ #define ER_INITIALIZATION 0x06
+ #define ER_INTERFACE_FAIL 0x07
+ #define ER_CLIENT_COMM_FAIL 0x08
+ #define ER_POLL_CTRL 0x09
+ #define ER_EVT_BUFFER_CTRL 0x0A
+
+ #define ER_INVALID_CONFIG_VALUE 0x0B
+
+ #define ER_INTERNAL_GENERIC_FAIL 0x0C
+
+enum KInternalFail
+{
+ kifInterruptCtrl = ER_INTERRUPT_CTRL,
+ kifCommunicationFail = ER_COMMUNICATION_FAIL,
+ kifProtocolFail = ER_PROTOCOL_FAIL,
+ kifInternalBuffer = ER_INTERNAL_BUFFER,
+ kifMonitorBuffer = ER_MONITOR_BUFFER,
+ kifInitialization = ER_INITIALIZATION,
+ kifInterfaceFail = ER_INTERFACE_FAIL,
+ kifClientCommFail = ER_CLIENT_COMM_FAIL
+};
+
+ #define FS_CHANNEL_LOCKED 0x01
+ #define FS_INCOMING_CHANNEL 0x02
+ #define FS_CHANNEL_NOT_FREE 0x03
+ #define FS_DOUBLE_SEIZE 0x04
+ #define FS_LOCAL_CONGESTION 0x06
+ #define FS_NO_DIAL_TONE 0x07
+enum KSeizeFail
+{
+ ksfChannelLocked = FS_CHANNEL_LOCKED,
+ ksfIncomingChannel = FS_INCOMING_CHANNEL,
+ ksfChannelBusy = FS_CHANNEL_NOT_FREE,
+ ksfDoubleSeizure = FS_DOUBLE_SEIZE,
+ ksfCongestion = FS_LOCAL_CONGESTION,
+ ksfNoDialTone = FS_NO_DIAL_TONE
+};
+#if !defined KH100DEFS_H
+#define KH100DEFS_H
+
+#define CM_SEND_TO_CTBUS 0x90
+
+#define CM_RECV_FROM_CTBUS 0x91
+
+#define CM_SEND_RANGE_TO_CTBUS 0x92
+
+#define CM_SETUP_H100 0x93
+
+enum KH100ConfigIndex
+{
+ khciDeviceMode = 0,
+ khciMasterGenClock = 1,
+ khciCTNetRefEnable = 4,
+ khciSCbusEnable = 6,
+ khciHMVipEnable = 7,
+ khciMVip90Enable = 8,
+ khciCTbusDataEnable = 9,
+ khciCTbusFreq03_00 = 10,
+ khciCTbusFreq07_04 = 11,
+ khciCTbusFreq11_08 = 12,
+ khciCTbusFreq15_12 = 13,
+ khciMax = 14,
+ khciMasterDevId = 20,
+ khciSecMasterDevId = 21,
+ khciCtNetrefDevId = 22,
+ khciMaxH100ConfigIndex
+};
+
+enum KMasterPLLClockReference
+{
+ h100_Ref_FreeRun = 0,
+ h100_Ref_holdover = 1,
+ h100_Automatic = 2,
+ h100_Ref_ctnetref = 7,
+ h100_Ref_link0 = 8,
+ h100_Ref_link1 = 9
+};
+enum KSlavePLLClockReference
+{
+ h100_PllLoc_ClkA = 0,
+ h100_PllLoc_ClkB = 1,
+ h100_PllLoc_SCBus = 2,
+ h100_PllLoc_MVIP90 = 3,
+ h100_PllLoc_Link0 = 4,
+ h100_PllLoc_Link1 = 5,
+ h100_PllLoc_Error = 6
+};
+
+#define H100_DEVICE_MODE khciDeviceMode
+ enum KH100Mode
+ {
+ h100_Slave,
+ h100_Master,
+ h100_StandbyMaster,
+ h100_Diagnostic,
+ h100_NotConnected
+ };
+#define H100_MASTER_GEN_CLOCK khciMasterGenClock
+ enum KH100SelectCtbusClock
+ {
+ h100_scClockA,
+ h100_scClockB
+ };
+
+#define H100_CT_NETREF_ENABLE khciCTNetRefEnable
+ enum KH100CtNetref
+ {
+ h100_nrOff,
+ h100_nrEnable
+ };
+#define H100_SCBUS_ENABLE khciSCbusEnable
+ enum KH100ScbusEnable
+ {
+ h100_seOff,
+ h100_seOn2Mhz,
+ h100_seOn4Mhz,
+ h100_seOn8Mhz
+ };
+#define H100_HMVIP_ENABLE khciHMVipEnable
+
+#define H100_MVIP90_ENABLE khciMVip90Enable
+
+#define H100_CTBUS_DATA_ENABLE khciCTbusDataEnable
+
+enum KH100Enable
+{
+ h100_On = 0x01,
+ h100_Off = 0x00
+};
+
+#define H100_CTBUS_FREQ_03_00 khciCTbusFreq03_00
+#define H100_CTBUS_FREQ_07_04 khciCTbusFreq07_04
+#define H100_CTBUS_FREQ_11_08 khciCTbusFreq11_08
+#define H100_CTBUS_FREQ_15_12 khciCTbusFreq15_12
+
+enum KH100CtbusFreq
+{
+ h100_cf_2Mhz = 0,
+ h100_cf_4Mhz = 1,
+ h100_cf_8Mhz = 2
+};
+
+#endif
+
+#define CM_MIXER 0x60
+
+#define CM_CLEAR_MIXER 0x61
+
+#define CM_PLAY_FROM_FILE 0x62
+
+#define CM_RECORD_TO_FILE 0x63
+
+#define CM_PLAY_FROM_STREAM 0x64
+
+#define CM_INTERNAL_PLAY 0x65
+
+#define CM_STOP_PLAY 0x66
+
+#define CM_STOP_RECORD 0x67
+
+#define CM_PAUSE_PLAY 0x68
+
+#define CM_PAUSE_RECORD 0x69
+
+#define CM_RESUME_PLAY 0x6A
+
+#define CM_RESUME_RECORD 0x6B
+
+#define CM_INCREASE_VOLUME 0x6C
+
+#define CM_DECREASE_VOLUME 0x6D
+
+#define CM_LISTEN 0x6E
+
+#define CM_STOP_LISTEN 0x6F
+
+#define CM_PREPARE_FOR_LISTEN 0x70
+
+#define CM_PLAY_SOUND_CARD 0x71
+
+#define CM_STOP_SOUND_CARD 0x72
+
+#define CM_MIXER_CTBUS 0x73
+
+#define CM_PLAY_FROM_STREAM_EX 0x74
+
+#define CM_INTERNAL_PLAY_EX 0x75
+
+#define CM_ENABLE_PLAYER_AGC 0x76
+
+#define CM_DISABLE_PLAYER_AGC 0x77
+
+#define CM_START_STREAM_BUFFER 0x78
+
+#define CM_ADD_STREAM_BUFFER 0x79
+
+#define CM_STOP_STREAM_BUFFER 0x7A
+
+#define CM_SEND_BEEP 0x7B
+
+#define CM_SEND_BEEP_CONF 0x7C
+
+#define CM_ADD_TO_CONF 0x7D
+
+#define CM_REMOVE_FROM_CONF 0x7E
+
+#define CM_RECORD_TO_FILE_EX 0x7F
+
+#define CM_SET_VOLUME 0xA0
+
+#define CM_START_CADENCE 0xA1
+
+#define CM_STOP_CADENCE 0xA2
+#if !defined KR2D_H
+#define KR2D_H
+
+#define CM_SET_LINE_CONDITION 0x80
+
+#define CM_SEND_LINE_CONDITION 0x81
+
+#define CM_SET_CALLER_CATEGORY 0x82
+
+
+#define CM_DIAL_MFC 0x83
+
+
+
+enum KSignGroupII_Brazil
+{
+ kg2BrOrdinary = 0x01,
+ kg2BrPriority = 0x02,
+ kg2BrMaintenance = 0x03,
+ kg2BrLocalPayPhone = 0x04,
+ kg2BrTrunkOperator = 0x05,
+ kg2BrDataTrans = 0x06,
+ kg2BrNonLocalPayPhone = 0x07,
+ kg2BrCollectCall = 0x08,
+ kg2BrOrdinaryInter = 0x09,
+ kg2BrTransfered = 0x0B,
+};
+
+enum KSignGroupB_Brazil
+{
+ kgbBrLineFreeCharged = 0x01,
+ kgbBrBusy = 0x02,
+ kgbBrNumberChanged = 0x03,
+ kgbBrCongestion = 0x04,
+ kgbBrLineFreeNotCharged = 0x05,
+ kgbBrLineFreeChargedLPR = 0x06,
+ kgbBrInvalidNumber = 0x07,
+ kgbBrLineOutOfOrder = 0x08,
+ kgbBrNone = 0xFF
+};
+
+
+enum KSignGroupII_Argentina
+{
+ kg2ArOrdinary = 0x01,
+ kg2ArPriority = 0x02,
+ kg2ArMaintenance = 0x03,
+ kg2ArLocalPayPhone = 0x04,
+ kg2ArTrunkOperator = 0x05,
+ kg2ArDataTrans = 0x06,
+ kg2ArCPTP = 0x0B,
+ kg2ArSpecialLine = 0x0C,
+ kg2ArMobileUser = 0x0D,
+ kg2ArPrivateRedLine = 0x0E,
+ kg2ArSpecialPayPhoneLine = 0x0F,
+};
+
+enum KSignGroupB_Argentina
+{
+ kgbArNumberChanged = 0x02,
+ kgbArBusy = 0x03,
+ kgbArCongestion = 0x04,
+ kgbArInvalidNumber = 0x05,
+ kgbArLineFreeCharged = 0x06,
+ kgbArLineFreeNotCharged = 0x07,
+ kgbArLineOutOfOrder = 0x08,
+ kgbArNone = 0xFF
+};
+
+
+enum KSignGroupII_Chile
+{
+ kg2ClOrdinary = 0x01,
+ kg2ClPriority = 0x02,
+ kg2ClMaintenance = 0x03,
+ kg2ClTrunkOperator = 0x05,
+ kg2ClDataTrans = 0x06,
+ kg2ClUnidentifiedSubscriber = 0x0B,
+};
+
+enum KSignGroupB_Chile
+{
+ kgbClNumberChanged = 0x02,
+ kgbClBusy = 0x03,
+ kgbClCongestion = 0x04,
+ kgbClInvalidNumber = 0x05,
+ kgbClLineFreeCharged = 0x06,
+ kgbClLineFreeNotCharged = 0x07,
+ kgbClLineOutOfOrder = 0x08,
+ kgbClNone = 0xFF
+};
+
+
+enum KSignGroupII_Mexico
+{
+ kg2MxTrunkOperator = 0x01,
+ kg2MxOrdinary = 0x02,
+ kg2MxMaintenance = 0x06,
+};
+
+enum KSignGroupB_Mexico
+{
+ kgbMxLineFreeCharged = 0x01,
+ kgbMxBusy = 0x02,
+ kgbMxLineFreeNotCharged = 0x05,
+ kgbMxNone = 0xFF
+};
+
+
+enum KSignGroupII_Uruguay
+{
+ kg2UyOrdinary = 0x01,
+ kg2UyPriority = 0x02,
+ kg2UyMaintenance = 0x03,
+ kg2UyLocalPayPhone = 0x04,
+ kg2UyTrunkOperator = 0x05,
+ kg2UyDataTrans = 0x06,
+ kg2UyInternSubscriber = 0x07,
+};
+
+enum KSignGroupB_Uruguay
+{
+ kgbUyNumberChanged = 0x02,
+ kgbUyBusy = 0x03,
+ kgbUyCongestion = 0x04,
+ kgbUyInvalidNumber = 0x05,
+ kgbUyLineFreeCharged = 0x06,
+ kgbUyLineFreeNotCharged = 0x07,
+ kgbUyLineOutOfOrder = 0x08,
+ kgbUyNone = 0xFF
+};
+
+
+enum KSignGroupII_Venezuela
+{
+ kg2VeOrdinary = 0x01,
+ kg2VePriority = 0x02,
+ kg2VeMaintenance = 0x03,
+ kg2VeLocalPayPhone = 0x04,
+ kg2VeTrunkOperator = 0x05,
+ kg2VeDataTrans = 0x06,
+ kg2VeNoTransferFacility = 0x07,
+};
+
+enum KSignGroupB_Venezuela
+{
+ kgbVeLineFreeChargedLPR = 0x01,
+ kgbVeNumberChanged = 0x02,
+ kgbVeBusy = 0x03,
+ kgbVeCongestion = 0x04,
+ kgbVeInformationTone = 0x05,
+ kgbVeLineFreeCharged = 0x06,
+ kgbVeLineFreeNotCharged = 0x07,
+ kgbVeLineBlocked = 0x08,
+ kgbVeIntercepted = 0x09,
+ kgbVeDataTrans = 0x0A,
+ kgbVeNone = 0xFF
+};
+
+
+
+
+
+enum KSignGroupB
+{
+ kgbLineFreeCharged = 0x01,
+ kgbLineFreeNotCharged = 0x05,
+ kgbLineFreeChargedLPR = 0x06,
+ kgbBusy = 0x02,
+ kgbNumberChanged = 0x03,
+ kgbCongestion = 0x04,
+ kgbInvalidNumber = 0x07,
+ kgbLineOutOfOrder = 0x08,
+ kgbNone = 0xFF
+};
+#define STT_GB_LINEFREE_CHARGED 0x01
+#define STT_GB_LINEFREE_NOTCHARGED 0x05
+#define STT_GB_LINEFREE_CHARGED_LPR 0x06
+#define STT_GB_BUSY 0x02
+#define STT_GB_NUMBER_CHANGED 0x03
+#define STT_GB_CONGESTION 0x04
+#define STT_GB_UNALLOCATED_NUMBER 0x07
+#define STT_GB_LINE_OUT_OF_ORDER 0x08
+#define STT_GB_NONE 0xFF
+
+enum KSignGroupII
+{
+ kg2Ordinary = 0x01,
+ kg2Priority = 0x02,
+ kg2Maintenance = 0x03,
+ kg2LocalPayPhone = 0x04,
+ kg2TrunkOperator = 0x05,
+ kg2DataTrans = 0x06,
+ kg2NonLocalPayPhone = 0x07,
+ kg2CollectCall = 0x08,
+ kg2OrdinaryInter = 0x09,
+ kg2Transfered = 0x0B,
+};
+#define STT_GII_ORDINARY 0x01
+#define STT_GII_PRIORITY 0x02
+#define STT_GII_MAINTENANCE 0x03
+#define STT_GII_LOCAL_PAY_PHONE 0x04
+#define STT_GII_TRUNK_OPERATOR 0x05
+#define STT_GII_DATA_TRANS 0x06
+#define STT_GII_NON_LOCAL_PAY_PHONE 0x07
+#define STT_GII_COLLECT_CALL 0x08
+#define STT_GII_ORDINARY_INTERNATIONAL 0x09
+#define STT_GII_TRANSFERED 0x0B
+#endif
+#ifndef _KISDN_H_
+#define _KISDN_H_
+#define KMAX_USER_USER_LEN 32
+#define KMAX_SUBADRESS_INFORMATION_LEN 20
+
+enum KQ931Cause
+{
+ kq931cNone = 0,
+ kq931cUnallocatedNumber = 1,
+ kq931cNoRouteToTransitNet = 2,
+ kq931cNoRouteToDest = 3,
+ kq931cSendSpecialInfoTone = 4,
+ kq931cMisdialedTrunkPrefix = 5,
+ kq931cChannelUnacceptable = 6,
+ kq931cCallAwarded = 7,
+ kq931cPreemption = 8,
+ kq931cPreemptionCircuitReuse = 9,
+ kq931cQoR_PortedNumber = 14,
+ kq931cNormalCallClear = 16,
+ kq931cUserBusy = 17,
+ kq931cNoUserResponding = 18,
+ kq931cNoAnswerFromUser = 19,
+ kq931cSubscriberAbsent = 20,
+ kq931cCallRejected = 21,
+ kq931cNumberChanged = 22,
+ kq931cRedirectionToNewDest = 23,
+ kq931cCallRejectedFeatureDest = 24,
+ kq931cExchangeRoutingError = 25,
+ kq931cNonSelectedUserClear = 26,
+ kq931cDestinationOutOfOrder = 27,
+ kq931cInvalidNumberFormat = 28,
+ kq931cFacilityRejected = 29,
+ kq931cRespStatusEnquiry = 30,
+ kq931cNormalUnspecified = 31,
+ kq931cNoCircuitChannelAvail = 34,
+ kq931cNetworkOutOfOrder = 38,
+ kq931cPermanentFrameConnOutOfService = 39,
+ kq931cPermanentFrameConnOperational = 40,
+ kq931cTemporaryFailure = 41,
+ kq931cSwitchCongestion = 42,
+ kq931cAccessInfoDiscarded = 43,
+ kq931cRequestedChannelUnav = 44,
+ kq931cPrecedenceCallBlocked = 46,
+ kq931cResourceUnavailable = 47,
+ kq931cQosUnavailable = 49,
+ kq931cReqFacilityNotSubsc = 50,
+ kq931cOutCallsBarredWithinCUG = 53,
+ kq931cInCallsBarredWithinCUG = 55,
+ kq931cBearerCapabNotAuthor = 57,
+ kq931cBearerCapabNotAvail = 58,
+ kq931cInconsistency = 62,
+ kq931cServiceNotAvailable = 63,
+ kq931cBcNotImplemented = 65,
+ kq931cChannelTypeNotImplem = 66,
+ kq931cReqFacilityNotImplem = 69,
+ kq931cOnlyRestrictedBcAvail = 70,
+ kq931cServiceNotImplemented = 79,
+ kq931cInvalidCrv = 81,
+ kq931cChannelDoesNotExist = 82,
+ kq931cCallIdDoesNotExist = 83,
+ kq931cCallIdInUse = 84,
+ kq931cNoCallSuspended = 85,
+ kq931cCallIdCleared = 86,
+ kq931cUserNotMemberofCUG = 87,
+ kq931cIncompatibleDestination = 88,
+ kq931cInvalidTransitNetSel = 91,
+ kq931cInvalidMessage = 95,
+ kq931cMissingMandatoryIe = 96,
+ kq931cMsgTypeNotImplemented = 97,
+ kq931cMsgIncompatWithState = 98,
+ kq931cIeNotImplemented = 99,
+ kq931cInvalidIe = 100,
+ kq931cMsgIncompatWithState2 = 101,
+ kq931cRecoveryOnTimerExpiry = 102,
+ kq931cProtocolError = 103,
+ kq931cMessageWithUnrecognizedParam = 110,
+ kq931cProtocolErrorUnspecified = 111,
+ kq931cInterworking = 127,
+ kq931cCallConnected = 128,
+ kq931cCallTimedOut = 129,
+ kq931cCallNotFound = 130,
+ kq931cCantReleaseCall = 131,
+ kq931cNetworkFailure = 132,
+ kq931cNetworkRestart = 133,
+ kq931cLastValidCause = kq931cNetworkRestart,
+};
+
+enum KQ931ProgressIndication
+{
+ kq931pTonesMaybeAvailable = 1,
+ kq931pDestinationIsNonIsdn = 2,
+ kq931pOriginationIsNonIsdn = 3,
+ kq931pCallReturnedToIsdn = 4,
+ kq931pTonesAvailable = 8,
+};
+
+enum KQ931Hlc
+{
+ kq931hTelefony = 0x81,
+ k1931hFaxGroup23 = 0x84,
+ k1931hFaxGroup4 = 0xa1,
+ kq931hTeletexF184 = 0xa4,
+ kq931hTeletexF220 = 0xa8,
+ kq931hTeletexf200 = 0xb1,
+ kq931hVideotex = 0xb2,
+ kq931hTelexF60 = 0xb5,
+ kq931hMhs = 0xb8,
+ kq931hOsiApp = 0xc1,
+ kq931hMaintenance = 0xde,
+ kq931hManagement = 0xdf,
+};
+
+enum KQ931BearerCapability
+{
+ kq931bSpeech = 0x00,
+ kq931bUnrestrictedDigital = 0x08,
+ kq931bAudio31kHz = 0x10,
+ kq931bAudio7kHz = 0x11,
+ kq931bVideo = 0x18,
+};
+
+enum KQ931TypeOfNumber
+{
+ kq931tUnknownNumber = 0x00,
+ kq931tInternationalNumber = 0x10,
+ kq931tNationalNumber = 0x20,
+ kq931tNetworkSpecificNumber = 0x30,
+ kq931tSubscriberNumber = 0x40,
+ kq931tAbbreviatedNumber = 0x60,
+ kq931tReservedNumber = 0x70,
+ kq931tDefaultNumber = kq931tUnknownNumber,
+};
+
+enum KQ931NumberingPlan
+{
+ kq931pUnknownPlan = 0x00,
+ kq931pIsdnPlan = 0x01,
+ kq931pDataPlan = 0x03,
+ kq931pTelexPlan = 0x04,
+ kq931pNationalPlan = 0x08,
+ kq931pPrivatePlan = 0x09,
+ kq931pReservedPlan = 0x0F,
+ kq931pDefaultPlan = kq931pUnknownPlan,
+};
+
+enum KQ931UserInfoProtocolDescriptor
+{
+ kq931uuUserSpecific = 0x00,
+ kq931uuOSI_HighLayer = 0x01,
+ kq931uuX244 = 0x02,
+ kq931uuIA5_Chars = 0x04,
+ kq931uuX208_X209 = 0x05,
+ kq931uuV120 = 0x07,
+ kq931uuQ931_CallControl = 0x08,
+ kq931uuNational = 0x40
+};
+enum KQ931PresentationIndicator
+{
+ kq931piPresentationAllowed = 0x00,
+ kq931piPresentationRestricted = 0x01,
+ kq931piNumberNotAvailableDueToInterworking = 0x02,
+};
+enum KQ931ScreeningIndicator
+{
+ kq931siUserProvidedNotScreened = 0x00,
+ kq931siUserProvidedVerifiedAndPassed = 0x01,
+ kq931siUserProvidedVerifiedAndFailed = 0x02,
+ kq931siNetworkProvided = 0x03,
+};
+enum KQ931TypeOfSubaddress
+{
+ kq931tsNSAP = 0x00,
+ kq931tsUserSpecified = 0x01,
+};
+#endif
+#ifndef KGSM_H
+#define KGSM_H
+
+enum KGsmCallCause
+{
+ kgccNone = 0,
+ kgccUnallocatedNumber = 1,
+ kgccNoRouteToDest = 3,
+ kgccChannelUnacceptable = 6,
+ kgccOperatorDeterminedBarring = 8,
+ kgccNormalCallClear = 16,
+ kgccUserBusy = 17,
+ kgccNoUserResponding = 18,
+ kgccNoAnswerFromUser = 19,
+ kgccCallRejected = 21,
+ kgccNumberChanged = 22,
+ kgccNonSelectedUserClear = 26,
+ kgccDestinationOutOfOrder = 27,
+ kgccInvalidNumberFormat = 28,
+ kgccFacilityRejected = 29,
+ kgccRespStatusEnquiry = 30,
+ kgccNormalUnspecified = 31,
+ kgccNoCircuitChannelAvail = 34,
+ kgccNetworkOutOfOrder = 38,
+ kgccTemporaryFailure = 41,
+ kgccSwitchCongestion = 42,
+ kgccAccessInfoDiscarded = 43,
+ kgccRequestedChannelUnav = 44,
+ kgccResourceUnavailable = 47,
+ kgccQosUnavailable = 49,
+ kgccReqFacilityNotSubsc = 50,
+ kgccCallBarredWitchCUG = 55,
+ kgccBearerCapabNotAuthor = 57,
+ kgccBearerCapabNotAvail = 58,
+ kgccServiceNotAvailable = 63,
+ kgccBcNotImplemented = 65,
+ kgccReqFacilityNotImplem = 69,
+ kgccOnlyRestrictedBcAvail = 70,
+ kgccServiceNotImplemented = 79,
+ kgccInvalidCrv = 81,
+ kgccUserNotMemberOfCUG = 82,
+ kgccIncompatibleDestination = 88,
+ kgccInvalidTransitNetSel = 91,
+ kgccInvalidMessage = 95,
+ kgccMissingMandatoryIe = 96,
+ kgccMsgTypeNotImplemented = 97,
+ kgccMsgIncompatWithState = 98,
+ kgccIeNotImplemented = 99,
+ kgccInvalidIe = 100,
+ kgccMsgIncompatWithState2 = 101,
+ kgccRecoveryOnTimerExpiry = 102,
+ kgccProtocolError = 111,
+ kgccInterworking = 127,
+};
+
+enum KGsmMobileCause
+{
+ kgmcPhoneFailure = 0,
+ kgmcNoConnectionToPhone = 1,
+ kgmcPhoneAdaptorLinkReserved = 2,
+ kgmcOperationNotAllowed = 3,
+ kgmcOperationNotSupported = 4,
+ kgmcPH_SIMPINRequired = 5,
+ kgmcPH_FSIMPINRequired = 6,
+ kgmcPH_FSIMPUKRequired = 7,
+ kgmcSIMNotInserted = 10,
+ kgmcSIMPINRequired = 11,
+ kgmcSIMPUKRequired = 12,
+ kgmcSIMFailure = 13,
+ kgmcSIMBusy = 14,
+ kgmcSIMWrong = 15,
+ kgmcIncorrectPassword = 16,
+ kgmcSIMPIN2Required = 17,
+ kgmcSIMPUK2Required = 18,
+ kgmcMemoryFull = 20,
+ kgmcInvalidIndex = 21,
+ kgmcNotFound = 22,
+ kgmcMemoryFailure = 23,
+ kgmcTextStringTooLong = 24,
+ kgmcInvalidCharInTextString = 25,
+ kgmcDialStringTooLong = 26,
+ kgmcInvalidCharInDialString = 27,
+ kgmcNoNetworkService = 30,
+ kgmcNetworkTimeout = 31,
+ kgmcNetworkNotAllowed = 32,
+ kgmcCommandAborted = 33,
+ kgmcNumParamInsteadTextParam = 34,
+ kgmcTextParamInsteadNumParam = 35,
+ kgmcNumericParamOutOfBounds = 36,
+ kgmcTextStringTooShort = 37,
+ kgmcNetworkPINRequired = 40,
+ kgmcNetworkPUKRequired = 41,
+ kgmcNetworkSubsetPINRequired = 42,
+ kgmcNetworkSubnetPUKRequired = 43,
+ kgmcServiceProviderPINRequired = 44,
+ kgmcServiceProviderPUKRequired = 45,
+ kgmcCorporatePINRequired = 46,
+ kgmcCorporatePUKRequired = 47,
+ kgmcSIMServiceOptNotSupported = 60,
+ kgmcUnknown = 100,
+ kgmcIllegalMS_N3 = 103,
+ kgmcIllegalME_N6 = 106,
+ kgmcGPRSServicesNotAllowed_N7 = 107,
+ kgmcPLMNNotAllowed_No11 = 111,
+ kgmcLocationAreaNotAllowed_N12 = 112,
+ kgmcRoamingNotAllowed_N13 = 113,
+ kgmcServiceOptNotSupported_N32 = 132,
+ kgmcReqServOptNotSubscribed_N33 = 133,
+ kgmcServOptTempOutOfOrder_N34 = 134,
+ kgmcLongContextActivation = 147,
+ kgmcUnspecifiedGPRSError = 148,
+ kgmcPDPAuthenticationFailure = 149,
+ kgmcInvalidMobileClass = 150,
+ kgmcGPRSDisconnectionTmrActive = 151,
+ kgmcTooManyActiveCalls = 256,
+ kgmcCallRejected = 257,
+ kgmcUnansweredCallPending = 258,
+ kgmcUnknownCallingError = 259,
+ kgmcNoPhoneNumRecognized = 260,
+ kgmcCallStateNotIdle = 261,
+ kgmcCallInProgress = 262,
+ kgmcDialStateError = 263,
+ kgmcUnlockCodeRequired = 264,
+ kgmcNetworkBusy = 265,
+ kgmcInvalidPhoneNumber = 266,
+ kgmcNumberEntryAlreadyStarted = 267,
+ kgmcCancelledByUser = 268,
+ kgmcNumEntryCouldNotBeStarted = 269,
+ kgmcDataLost = 280,
+ kgmcInvalidBessageBodyLength = 281,
+ kgmcInactiveSocket = 282,
+ kgmcSocketAlreadyOpen = 283
+};
+
+enum KGsmSmsCause
+{
+ kgscUnassigned = 1,
+ kgscOperatorDeterminedBarring = 8,
+ kgscCallBarred = 10,
+ kgscSMSTransferRejected = 21,
+ kgscDestinationOutOfService = 27,
+ kgscUnidentifiedSubscriber = 28,
+ kgscFacilityRejected = 29,
+ kgscUnknownSubscriber = 30,
+ kgscNetworkOutOfOrder = 38,
+ kgscTemporaryFailure = 41,
+ kgscCongestion = 42,
+ kgscResourcesUnavailable = 47,
+ kgscFacilityNotSubscribed = 50,
+ kgscFacilityNotImplemented = 69,
+ kgscInvalidSMSTransferRefValue = 81,
+ kgscInvalidMessage = 95,
+ kgscInvalidMandatoryInformation = 96,
+ kgscMessageTypeNonExistent = 97,
+ kgscMsgNotCompatWithSMProtState = 98,
+ kgscInformationElementNonExiste = 99,
+ kgscProtocolError = 111,
+ kgscInterworking = 127,
+ kgscTelematicInterworkingNotSup = 128,
+ kgscSMSTypeZeroNotSupported = 129,
+ kgscCannotReplaceSMS = 130,
+ kgscUnspecifiedTPPIDError = 143,
+ kgscAlphabetNotSupported = 144,
+ kgscMessageClassNotSupported = 145,
+ kgscUnspecifiedTPDCSError = 159,
+ kgscCommandCannotBeActioned = 160,
+ kgscCommandUnsupported = 161,
+ kgscUnspecifiedTPCommandError = 175,
+ kgscTPDUNotSupported = 176,
+ kgscSCBusy = 192,
+ kgscNoSCSubscription = 193,
+ kgscSCSystemFailure = 194,
+ kgscInvalidSMEAddress = 195,
+ kgscDestinationSMEBarred = 196,
+ kgscSMRejectedDuplicateSM = 197,
+ kgscTPVPFNotSupported = 198,
+ kgscTPVPNotSupported = 199,
+ kgscSIMSMSStorageFull = 208,
+ kgscNoSMSStorageCapabilityInSIM = 209,
+ kgscErrorInMS = 210,
+ kgscMemoryCapacityExceeded = 211,
+ kgscSIMDataDownloadError = 213,
+ kgscUnspecifiedError = 255,
+ kgscPhoneFailure = 300,
+ kgscSmsServiceReserved = 301,
+ kgscOperationNotAllowed = 302,
+ kgscOperationNotSupported = 303,
+ kgscInvalidPDUModeParameter = 304,
+ kgscInvalidTextModeParameter = 305,
+ kgscSIMNotInserted = 310,
+ kgscSIMPINNecessary = 311,
+ kgscPH_SIMPINNecessary = 312,
+ kgscSIMFailure = 313,
+ kgscSIMBusy = 314,
+ kgscSIMWrong = 315,
+ kgscMemoryFailure = 320,
+ kgscInvalidMemoryIndex = 321,
+ kgscMemoryFull = 322,
+ kgscSMSCAddressUnknown = 330,
+ kgscNoNetworkService = 331,
+ kgscNetworkTimeout = 332,
+ kgscUnknownError = 500,
+ kgscNetworkBusy = 512,
+ kgscInvalidDestinationAddress = 513,
+ kgscInvalidMessageBodyLength = 514,
+ kgscPhoneIsNotInService = 515,
+ kgscInvalidPreferredMemStorage = 516,
+ kgscUserTerminated = 517
+};
+#endif
+#ifndef k3lVersion_h
+#define k3lVersion_h
+#define k3lApiMajorVersion 2
+#define k3lApiMinorVersion 1
+#define k3lApiBuildVersion 0
+#endif
+#if !defined K3L_H
+#define K3L_H
+
+enum KDeviceType
+{
+ kdtE1 = 0,
+ kdtFXO = 1,
+ kdtConf = 2,
+ kdtPR = 3,
+ kdtE1GW = 4,
+ kdtFXOVoIP = 5,
+ kdtE1IP = 6,
+ kdtE1Spx = 7,
+ kdtGWIP = 8,
+ kdtFXS = 9,
+ kdtFXSSpx = 10,
+ kdtGSM = 11,
+ kdtGSMSpx = 12,
+ kdtFax = 13,
+ kdtDevTypeCount
+};
+enum KSignaling
+{
+ ksigInactive = 0,
+ ksigR2Digital = 1,
+ ksigContinuousEM = 2,
+ ksigPulsedEM = 3,
+ ksigUserR2Digital = 4,
+ ksigAnalog = 5,
+ ksigOpenCAS = 6,
+ ksigOpenR2 = 7,
+ ksigSIP = 8,
+ ksigOpenCCS = 9,
+ ksigPRI_EndPoint = 10,
+ ksigAnalogTerminal = 11,
+ ksigPRI_Network = 12,
+ ksigPRI_Passive = 13,
+ ksigLineSide = 14,
+ ksigCAS_EL7 = 15,
+ ksigGSM = 16,
+ ksigE1LC = 17,
+ ksigISUP = 18,
+ ksigFax = 19,
+};
+enum KE1DeviceModel
+{
+ kdmE1600 = 0,
+ kdmE1600E = 1,
+ kdmE1600EX = 2
+};
+enum KE1GWDeviceModel
+{
+ kdmE1GW640 = 1,
+ kdmE1GW640EX = 2
+};
+enum KE1IPDeviceModel
+{
+ kdmE1IP = 1,
+ kdmE1IPEX = 2
+};
+enum KGWIPDeviceModel
+{
+ kdmGWIP = 1,
+ kdmGWIPEX = 2
+};
+enum KFXODeviceModel
+{
+ kdmFXO80 = 0,
+ kdmFXOHI = 1,
+ kdmFXO160HI = 2
+};
+enum KFXOVoIPDeviceModel
+{
+ kdmFXGW180 = kdmFXO80
+};
+enum KConfDeviceModel
+{
+ kdmConf240 = 0,
+ kdmConf120 = 1,
+ kdmConf240EX = 2,
+ kdmConf120EX = 3
+};
+enum KPRDeviceModel
+{
+ kdmPR300v1 = 0,
+ kdmPR300 = 1,
+ kdmPR300SpxBased = 2,
+ kdmPR300EX = 3
+};
+enum KFXSDeviceModel
+{
+ kdmFXS300 = 1,
+ kdmFXS300EX = 2
+};
+enum KFXSSpxDeviceModel
+{
+ kdmFXSSpx300 = 0,
+ kdmFXSSpx2E1Based = 1,
+ kdmFXSSpx300EX = 2
+};
+enum KE1SpxDeviceModel
+{
+ kdmE1Spx = 0,
+ kdm2E1Based = 1,
+ kdmE1SpxEX = 2
+};
+enum KGSMDeviceModel
+{
+ kdmGSM = 0
+};
+enum KGSMSpxDeviceModel
+{
+ kdmGSMSpx = 0
+};
+enum KFaxDeviceModel
+{
+ kdmFax = 0,
+ kdmFaxEX = 1
+};
+enum KSystemObject
+{
+ ksoLink = 0x00,
+ ksoLinkMon = 0x20,
+ ksoChannel = 0x1000,
+ ksoH100 = 0x200,
+ ksoFirmware = 0x80,
+ ksoDevice = 0x100,
+ ksoAPI = 0x150
+};
+enum KFirmwareId
+{
+ kfiE1600A,
+ kfiE1600B,
+ kfiFXO80,
+ kfiGSM40
+};
+enum KE1Status
+{
+ kesOk = 0x00,
+ kesSignalLost = 0x01,
+ kesNetworkAlarm = 0x02,
+ kesFrameSyncLost = 0x04,
+ kesMultiframeSyncLost = 0x08,
+ kesRemoteAlarm = 0x10,
+ kesHighErrorRate = 0x20,
+ kesUnknownAlarm = 0x40,
+ kesE1Error = 0x80,
+ kesNotInitialized = 0xFF
+};
+enum KE1ChannelStatus
+{
+ kecsFree = 0x00,
+ kecsBusy = 0x01,
+ kecsOutgoing = 0x02,
+ kecsIncoming = 0x04,
+ kecsLocked = 0x06,
+ kecsOutgoingLock = 0x10,
+ kecsLocalFail = 0x20,
+ kecsIncomingLock = 0x40,
+ kecsRemoteLock = 0x80
+};
+enum KVoIPChannelStatus
+{
+ kipcsFree = kecsFree,
+ kipcsOutgoingLock = kecsOutgoingLock,
+ kipcsIncomingLock = kecsIncomingLock
+};
+enum KFXOChannelStatus
+{
+ kfcsDisabled = 0x00,
+ kfcsEnabled = 0x01
+};
+enum KFXSChannelStatus
+{
+ kfxsOnHook,
+ kfxsOffHook,
+ kfxsRinging,
+ kfxsFail
+};
+enum KGsmChannelStatus
+{
+ kgsmIdle,
+ kgsmCallInProgress,
+ kgsmSMSInProgress,
+ kgsmModemError,
+ kgsmSIMCardError,
+ kgsmNetworkError,
+ kgsmNotReady
+};
+enum KCallStatus
+{
+ kcsFree = 0x00,
+ kcsIncoming = 0x01,
+ kcsOutgoing = 0x02,
+ kcsFail = 0x04
+};
+enum KCallStartInfo
+{
+ kcsiHumanAnswer,
+ kcsiAnsweringMachine,
+ kcsiCellPhoneMessageBox,
+ kcsiUnknown,
+ kcsiCarrierMessage
+};
+enum KChannelFeatures
+{
+ kcfDtmfSuppression = 0x0001,
+ kcfCallProgress = 0x0002,
+ kcfPulseDetection = 0x0004,
+ kcfAudioNotification= 0x0008,
+ kcfEchoCanceller = 0x0010,
+ kcfAutoGainControl = 0x0020,
+ kcfHighImpEvents = 0x0080,
+ kcfCallAnswerInfo = 0x0100,
+ kcfOutputVolume = 0x0200,
+ kcfPlayerAGC = 0x0400
+};
+enum KMixerSource
+{
+ kmsChannel,
+ kmsPlay,
+ kmsGenerator,
+ kmsCTbus,
+ kmsNoDelayChannel
+};
+struct KMixerCommand
+{
+ int32 Track;
+ int32 Source;
+ int32 SourceIndex;
+};
+struct KPlayFromStreamCommand
+{
+ void *Buffer;
+ uint32 BufferSize;
+ int32 CodecIndex;
+};
+struct KBufferParam
+{
+ void *Buffer;
+ uint32 BufferSize;
+};
+enum KMixerTone
+{
+ kmtSilence = 0x00,
+ kmtDial = 0x01,
+ kmtBusy = 0x02,
+ kmtFax = 0x03,
+ kmtVoice = 0x04,
+ kmtEndOf425 = 0x05,
+ kmtCollect = 0x06,
+ kmtEndOfDtmf= 0x07,
+};
+struct K3L_CHANNEL_STATUS
+{
+ KCallStatus CallStatus;
+ KMixerTone AudioStatus;
+ int32 AddInfo;
+ int32 EnabledFeatures;
+};
+struct K3L_LINK_STATUS
+{
+ int16 E1;
+ byte Channels[ KMAX_E1_CHANNELS ];
+};
+enum KPllErrors
+{
+ kpeClockAError = 0x01,
+ kpeClockBError = 0x02,
+ kpeSCbusError = 0x04,
+ kpeMVIPError = 0x08,
+ kpeMasterPllError = 0x10,
+ kpeModeError = 0x20,
+ kpeLocalRefError = 0x40,
+ kpeInternalError = 0x80
+};
+struct K3L_H100_STATUS
+{
+ int32 Mode;
+ int32 MasterClock;
+ int32 Enable;
+ int32 Reference;
+ int32 SCbus;
+ int32 HMVIP;
+ int32 MVIP90;
+ int32 CT_NETREF;
+ int32 PllLocalRef;
+ int32 PllErrors;
+};
+enum KEchoLocation
+{
+ kelNetwork = 0x0,
+ kelCtBus = 0x1
+};
+enum KCodecIndex
+{
+ kci8kHzALAW = 0x00,
+ kci8kHzPCM = 0x01,
+ kci11kHzPCM = 0x02,
+ kci8kHzGSM = 0x03,
+ kci8kHzADPCM= 0x04,
+ kci8kHzULAW = 0x05,
+ kci8kHzG729 = 0x06,
+ kci8kHziLBC = 0x07,
+ kciLastCodecEntryMark
+};
+enum KEchoCancellerConfig
+{
+ keccNotPresent,
+ keccOneSingleBank,
+ keccOneDoubleBank,
+ keccTwoSingleBank,
+ keccTwoDoubleBank,
+ keccFail
+};
+struct K3L_DEVICE_CONFIG
+{
+ int32 LinkCount;
+ int32 ChannelCount;
+ int32 EnabledChannelCount;
+ int32 MixerCount;
+ int32 MixerCapacity;
+ int32 WorkStatus;
+ int32 DeviceModel;
+ int32 H100_Mode;
+ int32 PciBus;
+ int32 PciSlot;
+ int32 PlayerCount;
+ int32 VoIPChannelCount;
+ int32 CTbusCount;
+ KEchoCancellerConfig EchoConfig;
+ KEchoLocation EchoLocation;
+ sbyte SerialNumber[ KMAX_SERIAL_NUMBER ];
+};
+
+typedef K3L_DEVICE_CONFIG K3L_E1_DEVICE_CONFIG;
+typedef K3L_DEVICE_CONFIG K3L_FX_DEVICE_CONFIG;
+struct K3L_API_CONFIG
+{
+ int32 MajorVersion;
+ int32 MinorVersion;
+ int32 BuildVersion;
+ int32 SvnRevision;
+ int32 RawCmdLogging;
+ int32 VpdVersionNeeded;
+ sbyte StrVersion[ KMAX_STR_VERSION ];
+};
+struct K3L_LINK_CONFIG
+{
+ KSignaling Signaling;
+ int32 IncomingDigitsRequest;
+ int32 IdentificationRequestPos;
+ int32 ChannelCount;
+ int32 ReceivingClock;
+ sbyte NumberA[ KMAX_DIAL_NUMBER + 1 + 3 ];
+};
+struct K3L_CHANNEL_CONFIG
+{
+ KSignaling Signaling;
+ int32 AutoEnableFeatures;
+ int32 CapableFeatures;
+};
+struct K3L_E1600A_FW_CONFIG
+{
+ int32 MfcExchangersCount;
+ int32 MonitorBufferSize;
+ sbyte FwVersion[ KMAX_STR_VERSION ];
+ sbyte DspVersion[ KMAX_DSP_NAME ];
+};
+struct K3L_E1600B_FW_CONFIG
+{
+ int32 AudioBufferSize;
+ int32 FilterCount;
+ int32 MixerCount;
+ int32 MixerCapacity;
+ sbyte FwVersion[ KMAX_STR_VERSION ];
+ sbyte DspVersion[ KMAX_DSP_NAME ];
+};
+typedef K3L_E1600B_FW_CONFIG K3L_GSM40_FW_CONFIG;
+typedef K3L_E1600B_FW_CONFIG K3L_FXO80_FW_CONFIG;
+struct K3L_COMMAND
+{
+ int32 Object;
+ int32 Cmd;
+ byte *Params;
+};
+
+enum KEventObjectId
+{
+ koiDevice = 0x00,
+ koiChannel = 0x01,
+ koiPlayer = 0x02,
+ koiLink = 0x03,
+ koiSystem = 0x04
+};
+
+struct K3L_EVENT
+{
+ int32 Code;
+ int32 AddInfo;
+ int32 DeviceId;
+ int32 ObjectInfo;
+ void *Params;
+ int32 ParamSize;
+ int32 ObjectId;
+};
+struct KIncomingSeizeParams
+{
+ sbyte NumberB[ KMAX_DIAL_NUMBER + 1 ];
+ sbyte NumberA[ KMAX_DIAL_NUMBER + 1 ];
+ sbyte Padding[2];
+};
+struct KCtbusCommand
+{
+ int32 Stream;
+ int32 TimeSlot;
+ int32 Enable;
+};
+struct KUserInformation
+{
+ int32 ProtocolDescriptor;
+ int32 UserInfoLength;
+ byte UserInfo[ KMAX_USER_USER_LEN ];
+};
+struct KISDNSubaddressInformation
+{
+ KQ931TypeOfSubaddress TypeOfSubaddress;
+ bool OddNumberOfSignals;
+ int32 InformationLength;
+ byte Information[ KMAX_SUBADRESS_INFORMATION_LEN ];
+};
+struct KISDNSubaddresses
+{
+ KISDNSubaddressInformation Called;
+ KISDNSubaddressInformation Calling;
+};
+enum KLinkErrorCounter
+{
+ klecChangesToLock = 0,
+ klecLostOfSignal = 1,
+ klecAlarmNotification = 2,
+ klecLostOfFrame = 3,
+ klecLostOfMultiframe = 4,
+ klecRemoteAlarm = 5,
+ klecUnknowAlarm = 6,
+ klecPRBS = 7,
+ klecWrogrBits = 8,
+ klecJitterVariation = 9,
+ klecFramesWithoutSync = 10,
+ klecMultiframeSignal = 11,
+ klecFrameError = 12,
+ klecBipolarViolation = 13,
+ klecCRC4 = 14,
+ klecCount = 15
+};
+struct K3L_LINK_ERROR_COUNTER
+{
+ int32 ErrorCounters[ klecCount ];
+};
+struct KSipData
+{
+ int32 DataLength;
+ byte Data[ KMAX_SIP_DATA ];
+};
+
+enum KLibParams
+{
+ klpDebugFirmware,
+ klpResetFwOnStartup,
+ klpResetFwOnShutdown,
+ klpSeizureEventCompat,
+ klpDisableTDMBufferWarnings,
+ klpDisableInternalVoIP,
+ klpLogCallControl,
+ klpDoNotLogApiInterface,
+ klpMaxParams
+};
+
+typedef stt_code ( Kstdcall K3L_CALLBACK )();
+typedef stt_code ( Kstdcall K3L_MONITOR_CALLBACK )( byte *, byte );
+typedef stt_code ( Kstdcall K3L_EVENT_CALLBACK )( int32 Object, K3L_EVENT * );
+typedef stt_code ( Kstdcall *K3L_THREAD_CALLBACK )( void * );
+typedef void ( Kstdcall K3L_AUDIO_CALLBACK )( int32 DevId, int32 Channel, byte *Buffer, int32 Size );
+#if __GNUC__ >= 4
+#pragma GCC visibility push(default)
+#endif
+extern "C"
+{
+sbyte *Kstdcall k3lStart( int32 Major, int32 Minor, int32 Build );
+void Kstdcall k3lStop();
+void Kstdcall k3lRegisterEventHandler( K3L_EVENT_CALLBACK *Function );
+void Kstdcall k3lRegisterAudioListener( K3L_AUDIO_CALLBACK *Player, K3L_AUDIO_CALLBACK *Recorder );
+int32 Kstdcall k3lSendCommand( int32 DeviceId, K3L_COMMAND *Cmd );
+int32 Kstdcall k3lSendRawCommand( int32 DeviceId, int32 IntfId, void *Command, int32 CmdSize );
+int32 Kstdcall k3lRegisterMonitor( K3L_MONITOR_CALLBACK *EventMonitor, K3L_MONITOR_CALLBACK *CommandMonitor, K3L_MONITOR_CALLBACK *BufferMonitor );
+int32 Kstdcall k3lGetDeviceConfig( int32 DeviceId, int32 Object, void *Data, int32 DataSize );
+int32 Kstdcall k3lGetDeviceStatus( int32 DeviceId, int32 Object, void *Data, int32 DataSize );
+int32 Kstdcall k3lGetDeviceCount();
+int32 Kstdcall k3lGetDeviceType( int32 DeviceId );
+int32 Kstdcall k3lGetEventParam( K3L_EVENT *Evt, const sbyte *Name, sbyte *Buffer, int32 BufferSize );
+int32 Kstdcall k3lSetGlobalParam( int32 ParamIndex, int32 ParamValue );
+}
+#if __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif
+#endif
+
+
+enum KISDNDebugFlag
+{
+ kidfQ931 = 0x01,
+ kidfLAPD = 0x02,
+ kidfSystem = 0x04,
+ kidfInvalid = 0x08,
+};
+
+#define CM_VOIP_START_DEBUG 0x20
+#define CM_VOIP_STOP_DEBUG 0x21
+#define CM_VOIP_DUMP_STAT 0x22
+
+#define CM_ISDN_DEBUG 0x24
+
+#define CM_PING 0x123456
+#define EV_PONG 0x654321
+
+#define CM_LOG_REQUEST 0x100
+#define CM_LOG_CREATE_DISPATCHER 0x101
+#define CM_LOG_DESTROY_DISPATCHER 0x102
+
+#endif /* INCLUDED_K3LDEFS_H */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lDefs.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lDefs.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/k3lDefs.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lDefs.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lDefs.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,66 @@
+/*
+ KHOMP endpoint provider for FreeSWITCH(tm)
+ Copyright (C) 2007-2009 Khomp Ind. & Com.
+
+ 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.
+
+ Alternatively, the contents of this file may be used under the terms of the
+ "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which
+ case the provisions of "LGPL License" are applicable instead of those above.
+
+ If you wish to allow use of your version of this file only under the terms of
+ the LGPL License and not to allow others to use your version of this file under
+ the MPL, indicate your decision by deleting the provisions above and replace them
+ with the notice and other provisions required by the LGPL License. If you do not
+ delete the provisions above, a recipient may use your version of this file under
+ either the MPL or the LGPL License.
+
+ The LGPL header follows below:
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#ifndef INCLUDED_K3LDEFS_H
+#define INCLUDED_K3LDEFS_H
+
+enum KISDNDebugFlag
+{
+ kidfQ931 = 0x01,
+ kidfLAPD = 0x02,
+ kidfSystem = 0x04,
+ kidfInvalid = 0x08,
+};
+
+#define CM_VOIP_START_DEBUG 0x20
+#define CM_VOIP_STOP_DEBUG 0x21
+#define CM_VOIP_DUMP_STAT 0x22
+
+#define CM_ISDN_DEBUG 0x24
+
+#define CM_PING 0x123456
+#define EV_PONG 0x654321
+
+#define CM_LOG_REQUEST 0x100
+#define CM_LOG_CREATE_DISPATCHER 0x101
+#define CM_LOG_DESTROY_DISPATCHER 0x102
+
+#endif /* INCLUDED_K3LDEFS_H */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lVersion.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lVersion.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/k3lVersion.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lVersion.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/k3lVersion.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,9 @@
+#ifndef k3lVersion_h
+#define k3lVersion_h
+
+#define k3lApiMajorVersion 2
+#define k3lApiMinorVersion 0
+#define k3lApiBuildVersion 0
+
+#endif
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,140 @@
+#ifndef _KHOMP_PVT_H_
+#define _KHOMP_PVT_H_
+
+#include "globals.h"
+#include "mod_khomp.h"
+
+#define KHOMP_PACKET_SIZE 16
+
+/*!
+ \brief This struct holds a static linked list representing all the Khomp channels
+ found in the host. It's also a place holder for session objects and some
+ other opaque members used by the module.
+ */
+struct KhompPvt
+{
+
+ typedef std::vector < KhompPvt * > PvtVectorType; /*!< Collection of pointers of KhompPvts */
+ typedef std::vector < PvtVectorType > PvtVector2Type; /*!< Collection of PvtVectorType */
+ typedef PvtVector2Type KhompPvtVector; /*!< A bidimensional array o KhompPvts, meaning [board][channel] */
+
+ K3LAPI::target _target; /*!< The card/device pair to bind this pvt to */
+ switch_core_session_t * _session; /*!< The session to which this pvt is associated with */
+
+ unsigned int flags; //TODO: Alterar o nome depois
+
+ switch_codec_t _read_codec;
+ switch_codec_t _write_codec;
+
+ switch_frame_t _read_frame;
+
+ switch_buffer_t * _audio_buffer; /*!< Audio buffer used to write data in the khomp callback and read by FS callback */
+
+ unsigned char _databuf[SWITCH_RECOMMENDED_BUFFER_SIZE];
+
+ switch_caller_profile_t *_caller_profile;
+
+ switch_mutex_t *_mutex;
+ switch_mutex_t *flag_mutex; //TODO: Alterar o nome depois
+
+ unsigned int _KDeviceId; /*!< Represent de board we are making the call from */
+ unsigned int _KChannelId; /*!< Represent the channel we are making the call from */
+
+ KhompPvt(K3LAPI::target & target)
+ : _target(target), _session(NULL) {};
+
+ K3LAPI::target target()
+ {
+ return _target;
+ }
+
+ void session(switch_core_session_t * newSession)
+ {
+ _session = newSession;
+ }
+
+ switch_core_session_t * session()
+ {
+ return _session;
+ }
+
+ int32 get_audio_dsp();
+
+ bool obtain_both(void);
+ bool obtain_rx(bool with_delay);
+ bool obtain_tx(void);
+
+ bool start_stream(void);
+ bool stop_stream(void);
+
+ bool start_listen(bool conn_rx = true);
+ bool stop_listen(void);
+
+ /* static stuff */
+ static switch_mutex_t *_pvts_mutex;
+
+ static KhompPvtVector _pvts; /*!< Static structure that contains all the pvts. Will be initialized by KhompPvt::initialize */
+
+ static KhompPvt * khompPvt(int32 device, int32 object)
+ {
+ if (!Globals::_k3lapi.valid_channel(device, object))
+ throw K3LAPI::invalid_channel(device, object);
+
+ return _pvts[device][object];
+ }
+
+ static KhompPvt * khompPvt(K3LAPI::target & target)
+ {
+ return _pvts[target.device][target.object];
+ }
+
+
+ /*!
+ \brief Lookup channels and boards when dialed.
+ \param allocation_string The dialstring as put on Dialplan. [Khomp/[a|A|0-board_high]/[a|A|0-channel_high]/dest].
+ \param new_session Session allocated for this call.
+ \param[out] Cause returned. Returns NULL if suceeded if not, the proper cause.
+ \return KhompPvt to be used on the call.
+ */
+ static KhompPvt * find_channel(char* allocation_string, switch_core_session_t * new_session, switch_call_cause_t * cause);
+
+ static void initialize(void)
+ {
+ switch_mutex_init(&_pvts_mutex, SWITCH_MUTEX_NESTED, Globals::_module_pool);
+
+ for (unsigned dev = 0; dev < Globals::_k3lapi.device_count(); dev++)
+ {
+ _pvts.push_back(std::vector<KhompPvt*>());
+
+ for (unsigned obj = 0; obj < Globals::_k3lapi.channel_count(dev); obj++)
+ {
+ K3LAPI::target tgt(Globals::_k3lapi, K3LAPI::target::CHANNEL, dev, obj);
+ KhompPvt * pvt = new KhompPvt(tgt);
+ pvt->_KDeviceId = dev;
+ pvt->_KChannelId = obj;
+ pvt->_session = NULL;
+ _pvts.back().push_back(pvt);
+ Globals::_k3lapi.command(dev, obj, CM_DISCONNECT, NULL);
+ }
+ }
+ }
+
+ static void terminate()
+ {
+ switch_mutex_lock(_pvts_mutex);
+
+ for(KhompPvtVector::iterator it_board = _pvts.begin(); it_board != _pvts.end(); it_board++)
+ {
+ for(PvtVectorType::iterator it_channel = it_board->begin(); it_channel != it_board->begin(); it_channel++)
+ {
+ KhompPvt * pvt = *it_channel;
+ delete pvt;
+ }
+ }
+ }
+
+};
+
+
+
+#endif /* _KHOMP_PVT_H_*/
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/mod_khomp.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/mod_khomp.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/mod_khomp.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/mod_khomp.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/mod_khomp.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,86 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita <mesquita (at) khomp.com.br>
+ * Raul Fragoso <raulfragoso (at) gmail.com>
+ *
+ *
+ * mod_khomp.c -- Khomp board Endpoint Module
+ *
+ */
+
+/**
+ \mainpage Khomp board Endpoint Module
+
+ \section Introduction
+ This module has been developed to make a nice, affordable brazilian board
+ called Khomp (http://www.khomp.com.br) compatible with FreeSWITCH.
+ It's main features are MFC-R2 native compatibility and the GSM boards.
+ This module is supported by the manufacturer.
+
+ \section Contributors
+ \li João Mesquita <jmesquita (at) gmail.com>
+ \li Raul Fragoso <raulfragoso (at) gmail.com>
+ \li Khomp development team
+ */
+
+/**
+ * @file mod_khomp.h
+ * @brief Khomp Endpoint Module
+ * @see mod_khomp
+ */
+#ifndef _MOD_KHOMP_H_
+#define _MOD_KHOMP_H_
+
+
+#define KHOMP_SYNTAX "khomp show [info|links|channels]"
+
+#include "globals.h"
+#include "khomp_pvt.h"
+#include "opt.h"
+
+/*!
+ \brief Defined by mod_reference, defines statuses for the switch_channel
+ \param TFLAG_IO Enables the IO state of a channel
+ \param TFLAG_INBOUND Sets a channel as inbound
+ \param TFLAG_OUTBOUND Sets a channel as outbound
+ */
+typedef enum
+{
+ TFLAG_IO = (1 << 0),
+ TFLAG_INBOUND = (1 << 1),
+ TFLAG_OUTBOUND = (1 << 2),
+ TFLAG_DTMF = (1 << 3),
+ TFLAG_VOICE = (1 << 4),
+ TFLAG_HANGUP = (1 << 5),
+ TFLAG_LINEAR = (1 << 6),
+ TFLAG_CODEC = (1 << 7),
+ TFLAG_BREAK = (1 << 8),
+ TFLAG_STREAM = (1 << 9),
+ TFLAG_LISTEN = (1 << 10)
+}
+TFLAGS;
+
+#endif /* _MOD_KHOMP_H_ */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/opt.h
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/opt.h (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/opt.h) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/opt.h (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/include/opt.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,42 @@
+#ifndef _OPT_H_
+#define _OPT_H_
+
+struct Opt
+{
+
+ typedef enum {
+ GFLAG_MY_CODEC_PREFS = (1 << 0)
+ } GFLAGS;
+
+
+ static void initialize(void);
+ static void obtain(void);
+
+
+protected:
+
+ static void load_configuration(const char *, const char **, bool show_errors = true);
+ static void clean_configuration(void);
+
+
+public:
+ static bool _debug;
+ static char *_ip;
+ static int _port;
+ static char *_dialplan;
+ static char *_codec_string;
+ static char *_codec_order[]; //[SWITCH_MAX_CODECS]
+ static int _codec_order_last;
+ static char *_codec_rates_string;
+ static char *_codec_rates[]; //[SWITCH_MAX_CODECS]
+ static int _codec_rates_last;
+
+
+
+};
+
+
+
+
+
+#endif /* _OPT_H_ */
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1267 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita <mesquita (at) khomp.com.br>
+ * Raul Fragoso <raulfragoso (at) gmail.com>
+ *
+ *
+ * mod_khomp.c -- Khomp board Endpoint Module
+ *
+ */
+
+/**
+ * @file mod_khomp.cpp
+ * @brief Khomp Endpoint Module
+ * @see mod_khomp
+ */
+
+#include "mod_khomp.h"
+
+/*!
+ \brief Callback generated from K3L API for every new event on the board.
+ \param[in] obj Object ID (could be a channel or a board, depends on device type) which generated the event.
+ \param[in] e The event itself.
+ \return ksSuccess if the event was treated
+ \see K3L_EVENT Event specification
+ */
+int32 Kstdcall khomp_event_callback(int32 obj, K3L_EVENT * e);
+
+/*!
+ \brief Callback generated from K3L API everytime audio is available on the board.
+ @param[in] deviceid Board on which we get the event
+ @param[in] objectid The channel we are getting the audio from
+ @param[out] read_buffer The audio buffer itself (RAW)
+ @param[in] read_size The buffer size, meaning the amount of data to be read
+ \return ksSuccess if the event was treated
+ */
+void Kstdcall khomp_audio_listener(int32 deviceid, int32 objectid,
+ byte * read_buffer, int32 read_size);
+
+/*!
+ \brief Load the module. Expadend by a FreeSWITCH macro.
+ Things we do here:
+ \li Initialize a static structure on KhompPvt
+ \li Load the configuration
+ \li Start the K3L API, responsible for connecting to KServer
+ \li Register mod APIs and APPs
+ \li Register audio callback for KServer
+ \li Register event callback for KServer
+ \see Opt Where all the configs are handled
+ \see khomp_event_callback To where we bind the event handler
+ \see khomp_audio_listener To where we bind the audio handlers
+ */
+SWITCH_MODULE_LOAD_FUNCTION(mod_khomp_load);
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_khomp_shutdown);
+SWITCH_MODULE_DEFINITION(mod_khomp, mod_khomp_load, mod_khomp_shutdown, NULL);
+
+/* State handlers for FreeSWITCH */
+switch_status_t channel_on_init(switch_core_session_t *session);
+switch_status_t channel_on_routing(switch_core_session_t *session);
+switch_status_t channel_on_execute(switch_core_session_t *session);
+switch_status_t channel_on_hangup(switch_core_session_t *session);
+switch_status_t channel_on_exchange_media(
+ switch_core_session_t *session);
+switch_status_t channel_on_soft_execute(switch_core_session_t *session);
+switch_status_t channel_on_destroy(switch_core_session_t *session);
+
+switch_state_handler_table_t khomp_state_handlers = {
+ /*.on_init */ channel_on_init,
+ /*.on_routing */ channel_on_routing,
+ /*.on_execute */ channel_on_execute,
+ /*.on_hangup */ channel_on_hangup,
+ /*.on_exchange_media */ channel_on_exchange_media,
+ /*.on_soft_execute */ channel_on_soft_execute,
+ /*.on_consume_media */ NULL,
+ /*.on_hibernate */ NULL,
+ /*.on_reset */ NULL,
+ /*.on_park*/ NULL,
+ /*.on_reporting*/ NULL,
+ /*.on_destroy*/ channel_on_destroy
+};
+
+/* Callbacks for FreeSWITCH */
+switch_call_cause_t channel_outgoing_channel(
+ switch_core_session_t *session,
+ switch_event_t *var_event,
+ switch_caller_profile_t *outbound_profile,
+ switch_core_session_t **new_session,
+ switch_memory_pool_t **pool,
+ switch_originate_flag_t flags);
+switch_status_t channel_read_frame(switch_core_session_t *session,
+ switch_frame_t **frame,
+ switch_io_flag_t flags,
+ int stream_id);
+switch_status_t channel_write_frame(switch_core_session_t *session,
+ switch_frame_t *frame,
+ switch_io_flag_t flags,
+ int stream_id);
+switch_status_t channel_kill_channel(switch_core_session_t *session,
+ int sig);
+switch_status_t channel_send_dtmf(switch_core_session_t *session,
+ const switch_dtmf_t *dtmf);
+switch_status_t channel_receive_message(switch_core_session_t *session,
+ switch_core_session_message_t *msg);
+switch_status_t channel_receive_event(switch_core_session_t *session,
+ switch_event_t *event);
+
+
+switch_io_routines_t khomp_io_routines = {
+ /*.outgoing_channel */ channel_outgoing_channel,
+ /*.read_frame */ channel_read_frame,
+ /*.write_frame */ channel_write_frame,
+ /*.kill_channel */ channel_kill_channel,
+ /*.send_dtmf */ channel_send_dtmf,
+ /*.receive_message */ channel_receive_message,
+ /*.receive_event */ channel_receive_event
+};
+
+/* Macros to define specific API functions */
+SWITCH_STANDARD_API(khomp);
+
+/*!
+ \brief Print a system summary for all the boards. [khomp show info]
+ */
+void printSystemSummary(switch_stream_handle_t* stream);
+/*!
+ \brief Print link status. [khomp show links]
+ */
+void printLinks(switch_stream_handle_t* stream, unsigned int device,
+ unsigned int link);
+/*!
+ \brief Print board channel status. [khomp show channels]
+ */
+void printChannels(switch_stream_handle_t* stream, unsigned int device,
+ unsigned int link);
+
+
+
+/*!
+ \brief Will init part of our private structure and setup all the read/write
+ buffers along with the proper codecs. Right now, only PCMA.
+ */
+switch_status_t tech_init(KhompPvt *tech_pvt, switch_core_session_t *session)
+{
+ tech_pvt->flags = 0;
+
+ tech_pvt->_read_frame.data = tech_pvt->_databuf;
+ tech_pvt->_read_frame.buflen = sizeof(tech_pvt->_databuf);
+
+ switch_mutex_init(&tech_pvt->_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
+ switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
+
+ switch_core_session_set_private(session, tech_pvt);
+
+ tech_pvt->_session = session;
+
+ if (switch_core_codec_init(&tech_pvt->_read_codec,
+ "PCMA",
+ NULL,
+ 8000,
+ 20,
+ 1,
+ SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
+ NULL, switch_core_session_get_pool(tech_pvt->_session)) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
+ return SWITCH_STATUS_GENERR;
+ } else {
+ if (switch_core_codec_init(&tech_pvt->_write_codec,
+ "PCMA",
+ NULL,
+ 8000,
+ 20,
+ 1,
+ SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
+ NULL, switch_core_session_get_pool(tech_pvt->_session)) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
+ switch_core_codec_destroy(&tech_pvt->_read_codec);
+ return SWITCH_STATUS_GENERR;
+ }
+ }
+
+ switch_core_session_set_read_codec(tech_pvt->_session, &tech_pvt->_read_codec);
+ switch_core_session_set_write_codec(tech_pvt->_session, &tech_pvt->_write_codec);
+
+ switch_set_flag_locked(tech_pvt, TFLAG_CODEC);
+
+ tech_pvt->_read_frame.codec = &tech_pvt->_read_codec;
+
+ switch_set_flag_locked(tech_pvt, TFLAG_IO);
+
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
+/*!
+ \brief State methods they get called when the state changes to the specific state
+ returning SWITCH_STATUS_SUCCESS tells the core to execute the standard state method next
+ so if you fully implement the state you can return SWITCH_STATUS_FALSE to skip it.
+*/
+switch_status_t channel_on_init(switch_core_session_t *session)
+{
+ KhompPvt * tech_pvt = static_cast< KhompPvt* >(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ switch_set_flag_locked(tech_pvt, TFLAG_IO);
+
+ /* Move channel's state machine to ROUTING. This means the call is trying
+ to get from the initial start where the call because, to the point
+ where a destination has been identified. If the channel is simply
+ left in the initial state, nothing will happen. */
+ switch_channel_set_state(channel, CS_ROUTING);
+
+ switch_mutex_lock(Globals::_mutex);
+ Globals::_calls++;
+ switch_mutex_unlock(Globals::_mutex);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_routing(switch_core_session_t *session)
+{
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt *>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(channel));
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_execute(switch_core_session_t *session)
+{
+
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL EXECUTE\n", switch_channel_get_name(channel));
+
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_hangup(switch_core_session_t *session)
+{
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ switch_clear_flag_locked(tech_pvt, TFLAG_IO);
+ switch_clear_flag_locked(tech_pvt, TFLAG_VOICE);
+ //switch_thread_cond_signal(tech_pvt->_cond);
+
+ if (tech_pvt->_read_codec.implementation) {
+ switch_core_codec_destroy(&tech_pvt->_read_codec);
+ }
+
+ if (tech_pvt->_write_codec.implementation) {
+ switch_core_codec_destroy(&tech_pvt->_write_codec);
+ }
+
+ /* Make the channel available again */
+ tech_pvt->session(NULL);
+
+ try
+ {
+ Globals::_k3lapi.command(tech_pvt->_KDeviceId, tech_pvt->_KChannelId, CM_DISCONNECT, NULL);
+ }
+ catch(K3LAPI::failed_command & e)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "WE COULD NOT HANGUP THE CHANNEL! rc:%d\n", e.rc);
+ return SWITCH_STATUS_TERM;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s Originator Hangup.\n", switch_channel_get_name(channel));
+ switch_mutex_lock(Globals::_mutex);
+ Globals::_calls--;
+ if (Globals::_calls < 0) {
+ Globals::_calls = 0;
+ }
+ switch_mutex_unlock(Globals::_mutex);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_destroy(switch_core_session_t *session)
+{
+ /* Doesn't do anything for now */
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_kill_channel(switch_core_session_t *session, int sig)
+{
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL KILL, kill = %d\n", sig);
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ switch (sig) {
+ case SWITCH_SIG_KILL:
+ switch_clear_flag_locked(tech_pvt, TFLAG_IO);
+ switch_clear_flag_locked(tech_pvt, TFLAG_VOICE);
+ switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
+ //switch_thread_cond_signal(tech_pvt->_cond);
+ break;
+ case SWITCH_SIG_BREAK:
+ switch_set_flag_locked(tech_pvt, TFLAG_BREAK);
+ break;
+ default:
+ break;
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_exchange_media(switch_core_session_t *session)
+{
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL LOOPBACK\n");
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_on_soft_execute(switch_core_session_t *session)
+{
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
+{
+ KhompPvt *tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ switch_assert(tech_pvt != NULL);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
+{
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+ //switch_time_t started = switch_time_now();
+ //unsigned int elapsed;
+ switch_byte_t *data;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+ tech_pvt->_read_frame.flags = SFF_NONE;
+ *frame = NULL;
+
+ while (switch_test_flag(tech_pvt, TFLAG_IO)) {
+
+ if (switch_test_flag(tech_pvt, TFLAG_BREAK)) {
+ switch_clear_flag(tech_pvt, TFLAG_BREAK);
+ goto cng;
+ }
+
+ if (!switch_test_flag(tech_pvt, TFLAG_IO)) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if (!tech_pvt->_read_frame.datalen) {
+ continue;
+ }
+ *frame = &tech_pvt->_read_frame;
+#ifdef BIGENDIAN
+ if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
+ switch_swap_linear((*frame)->data, (int) (*frame)->datalen / 2);
+ }
+#endif
+ return SWITCH_STATUS_SUCCESS;
+
+ switch_cond_next();
+ }
+
+
+ return SWITCH_STATUS_FALSE;
+
+ cng:
+ data = (switch_byte_t *) tech_pvt->_read_frame.data;
+ data[0] = 65;
+ data[1] = 0;
+ tech_pvt->_read_frame.datalen = 2;
+ tech_pvt->_read_frame.flags = SFF_CNG;
+ *frame = &tech_pvt->_read_frame;
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
+switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
+{
+ switch_channel_t *channel = NULL;
+ KhompPvt *tech_pvt = NULL;
+ //switch_frame_t *pframe;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ if (!switch_test_flag(tech_pvt, TFLAG_IO)) {
+ return SWITCH_STATUS_FALSE;
+ }
+#ifdef BIGENDIAN
+ if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
+ switch_swap_linear(frame->data, (int) frame->datalen / 2);
+ }
+#endif
+
+
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
+switch_status_t channel_answer_channel(switch_core_session_t *session)
+{
+ KhompPvt *tech_pvt;
+ switch_channel_t *channel = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ assert(tech_pvt != NULL);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+switch_status_t channel_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg)
+{
+ switch_channel_t *channel;
+ KhompPvt *tech_pvt;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "When the fuck is this called?.\n");
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ tech_pvt = (KhompPvt *) switch_core_session_get_private(session);
+ assert(tech_pvt != NULL);
+
+ switch (msg->message_id) {
+ case SWITCH_MESSAGE_INDICATE_ANSWER:
+ {
+ channel_answer_channel(session);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/*!
+ \brief Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
+ that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
+*/
+switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
+ switch_caller_profile_t *outbound_profile,
+ switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
+{
+
+ char *argv[3] = { 0 };
+ int argc = 0;
+ KhompPvt *tech_pvt;
+ switch_call_cause_t cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+
+ /* We first need to find an available KhompPvt object to serve the session */
+
+ if ((*new_session = switch_core_session_request(Globals::_khomp_endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, pool)) != 0) {
+ switch_channel_t *channel;
+ switch_caller_profile_t *caller_profile;
+ char name[128];
+
+ if (outbound_profile)
+ {
+ snprintf(name, sizeof(name), "%s", outbound_profile->destination_number);
+
+ if ((argc = switch_separate_string(outbound_profile->destination_number, '/', argv, (sizeof(argv) / sizeof(argv[0])))) < 3)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid dial string. Should be on the format:[Khomp/BoardID (or A for first free board)/CHANNEL (or A for first free channel)]\n");
+ switch_core_session_destroy(new_session);
+ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ }
+
+ tech_pvt = KhompPvt::find_channel(name, *new_session, &cause);
+
+ if(tech_pvt == NULL || cause != SWITCH_CAUSE_SUCCESS)
+ {
+ switch_core_session_destroy(new_session);
+ return cause;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Dialing to %s out from Board:%u, Channel:%u.\n",
+ argv[2],
+ tech_pvt->_KDeviceId,
+ tech_pvt->_KChannelId);
+ }
+ else
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Doh! no caller profile\n");
+ switch_core_session_destroy(new_session);
+ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ }
+
+ switch_core_session_add_stream(*new_session, NULL);
+ channel = switch_core_session_get_channel(*new_session);
+ tech_init(tech_pvt, *new_session);
+
+ snprintf(name, sizeof(name), "Khomp/%d/%d/%s", tech_pvt->_KDeviceId, tech_pvt->_KChannelId, argv[2]);
+ switch_channel_set_name(channel, name);
+
+ caller_profile = switch_caller_profile_clone(*new_session, outbound_profile);
+ switch_channel_set_caller_profile(channel, caller_profile);
+ tech_pvt->_caller_profile = caller_profile;
+
+ switch_channel_set_flag(channel, CF_OUTBOUND);
+ switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
+ switch_channel_set_state(channel, CS_INIT);
+
+ try
+ {
+ /* Lets make the call! */
+ char params[ 255 ];
+ snprintf(params, sizeof(params), "dest_addr=\"%s\" orig_addr=\"%s\"", argv[2], outbound_profile->caller_id_number);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "We are calling with params: %s.\n", params);
+ Globals::_k3lapi.command(tech_pvt->_KDeviceId,tech_pvt->_KChannelId, CM_MAKE_CALL, params);
+ }
+ catch(K3LAPI::failed_command & e)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not place call! Cause: code%x and rc%d.\n", e.code, e.rc);
+ switch_core_session_destroy(new_session);
+ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ }
+
+ return SWITCH_CAUSE_SUCCESS;
+ }
+
+ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+
+}
+
+switch_status_t channel_receive_event(switch_core_session_t *session, switch_event_t *event)
+{
+ struct KhompPvt *tech_pvt = static_cast<KhompPvt*>(switch_core_session_get_private(session));
+ char *body = switch_event_get_body(event);
+ switch_assert(tech_pvt != NULL);
+
+ if (!body) {
+ body = (char *)"";
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_khomp_load)
+{
+
+ Globals::_module_pool = pool;
+
+ /* start config system! */
+ Opt::initialize();
+
+ Opt::obtain();
+
+ //load_config();
+
+
+ /*
+ Spawn our k3l global var that will be used along the module
+ for sending info to the boards
+ */
+
+ /* Start the API and connect to KServer */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Starting K3L...\n");
+ try {
+ Globals::_k3lapi.start();
+ KhompPvt::initialize();
+ } catch (K3LAPI::start_failed & e) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "K3L not started. Reason:%s.\n", e.msg.c_str());
+ return SWITCH_STATUS_TERM;
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "K3L started.\n");
+
+ k3lRegisterEventHandler( khomp_event_callback );
+ k3lRegisterAudioListener (NULL, khomp_audio_listener);
+
+ *module_interface = switch_loadable_module_create_module_interface(pool, "mod_khomp");
+ Globals::_khomp_endpoint_interface = static_cast<switch_endpoint_interface_t*>(switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE));
+ Globals::_khomp_endpoint_interface->interface_name = "khomp";
+ Globals::_khomp_endpoint_interface->io_routines = &khomp_io_routines;
+ Globals::_khomp_endpoint_interface->state_handler = &khomp_state_handlers;
+
+ /* Add all the specific API functions */
+ SWITCH_ADD_API(Globals::_api_interface, "khomp", "Khomp Menu", khomp, KHOMP_SYNTAX);
+
+ /* indicate that the module should continue to be loaded */
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/*
+SWITCH_MODULE_RUNTIME_FUNCTION(mod_khomp_runtime)
+{
+ return SWITCH_STATUS_TERM;
+}
+*/
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_khomp_shutdown)
+{
+ int x = 0;
+
+ Globals::_running = -1;
+
+ while (Globals::_running) {
+ if (x++ > 100) {
+ break;
+ }
+ switch_yield(20000);
+ }
+
+ /* Free dynamically allocated strings */
+ switch_safe_free(Opt::_dialplan);
+ switch_safe_free(Opt::_codec_string);
+ switch_safe_free(Opt::_codec_rates_string);
+ switch_safe_free(Opt::_ip);
+
+ /* Finnish him! */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stopping K3L...\n");
+ KhompPvt::terminate();
+ Globals::_k3lapi.stop();
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "the K3L API has been stopped!\n");
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/*!
+ \brief khomp API definition
+ TODO: Add as xml modifier
+*/
+SWITCH_STANDARD_API(khomp)
+{
+ char *argv[10] = { 0 };
+ int argc = 0;
+ void *val;
+ char *myarg = NULL;
+ switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+ /* We should not ever get a session here */
+ if (session) return status;
+
+ if (switch_strlen_zero(cmd) || !(myarg = strdup(cmd))) {
+ stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if ((argc = switch_separate_string(myarg, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 1) {
+ stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
+ goto done;
+ }
+
+ /* Below show ... */
+ if (argv[0] && !strncasecmp(argv[0], "show", 4)) {
+ /* Show the API summary and information */
+ if (argv[1] && !strncasecmp(argv[1], "info", 4)) {
+ printSystemSummary(stream);
+ }
+ /* Show all the links and their status */
+ if (argv[1] && !strncasecmp(argv[1], "links", 5)) {
+ /* TODO: Let show specific boards/links */
+ printLinks(stream, NULL, NULL);
+ }
+ // Show all channels from all boards and all links
+ if (argv[1] && !strncasecmp(argv[1], "channels", 8)) {
+ /* TODO: Let show specific channels */
+ printChannels(stream, NULL, NULL);
+ }
+
+ } else {
+ stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
+ }
+
+done:
+ switch_safe_free(myarg);
+ return status;
+
+}
+
+void printChannels(switch_stream_handle_t* stream, unsigned int device, unsigned int link) {
+ if (!device) {
+ // Print all channels from all boards and links
+ stream->write_function(stream, "|--------- Khomp ----------|\n");
+ stream->write_function(stream, "| Board | Channel | Status |\n");
+ for (int board=0 ; board < Globals::_k3lapi.device_count() ; board++) {
+ for (int channel=0 ; channel < Globals::_k3lapi.channel_count(board) ; channel++) {
+ try {
+ K3L_CHANNEL_CONFIG channelConfig;
+ channelConfig = Globals::_k3lapi.channel_config( board, channel );
+ }
+ catch (...){
+ stream->write_function(stream, "OOOPSS. Something went wrong, cleanup this mess!\n");
+ return;
+ }
+ K3L_CHANNEL_STATUS status;
+ if (k3lGetDeviceStatus( board, channel + ksoChannel, &status, sizeof(status) ) != ksSuccess) {
+ stream->write_function(stream, "Damn, again something bad happened.\n");
+ return;
+ }
+ switch(status.CallStatus) {
+ case kcsFree:
+ stream->write_function(stream, "| %6u| %8u| Free |\n", board, channel);
+ break;
+ case kcsOutgoing:
+ stream->write_function(stream, "| %6u| %8u| Outgoing |\n", board, channel);
+ break;
+ case kcsIncoming:
+ stream->write_function(stream, "| %6u| %8u| Incoming |\n", board, channel);
+ break;
+ default:
+ stream->write_function(stream, "| %6u| %8u| UNKNOWN : %x |\n", board, channel, status.AddInfo);
+ }
+
+ }
+ }
+ stream->write_function(stream, "----------------------------\n");
+ }
+}
+
+void printLinks(switch_stream_handle_t* stream, unsigned int device, unsigned int link)
+{
+
+ stream->write_function(stream, "___________________________________________\n");
+ stream->write_function(stream, "|--------------Khomp Links----------------|\n");
+ stream->write_function(stream, "|----Board----|----Link----|----Status----|\n");
+
+ // We want to see all links from all devices
+ if (!device) {
+ for(int device=0 ; device < Globals::_k3lapi.device_count() ; device++)
+ {
+ K3L_LINK_CONFIG & config = Globals::_k3lapi.link_config(device, link);
+ K3L_LINK_STATUS status;
+
+ for(int link=0 ; link < Globals::_k3lapi.link_count(device) ; link++)
+ {
+ const char * E1Status = "";
+ if (k3lGetDeviceStatus (device, link + ksoLink, &status, sizeof(status)) == ksSuccess)
+ {
+ switch (config.Signaling)
+ {
+ case ksigInactive:
+ E1Status = "[ksigInactive]";
+ break;
+
+ case ksigAnalog:
+ E1Status = "[ksigAnalog]";
+ break;
+
+ case ksigSIP:
+ E1Status = "[ksigSIP]";
+ break;
+
+ case ksigOpenCAS:
+ case ksigOpenR2:
+ case ksigR2Digital:
+ case ksigUserR2Digital:
+ case ksigOpenCCS:
+ case ksigPRI_EndPoint:
+ case ksigPRI_Network:
+ case ksigPRI_Passive:
+ case ksigLineSide:
+ case ksigCAS_EL7:
+ case ksigAnalogTerminal:
+ switch (status.E1) {
+
+ case (kesOk):
+ E1Status = "kesOk";
+ break;
+ case (kesSignalLost):
+ E1Status = "kesSignalLost";
+ break;
+ case (kesNetworkAlarm):
+ E1Status = "kesNetworkAlarm";
+ break;
+ case (kesFrameSyncLost):
+ E1Status = "kesFrameSyncLost";
+ break;
+ case (kesMultiframeSyncLost):
+ E1Status = "kesMultiframeSyncLost";
+ break;
+ case (kesRemoteAlarm):
+ E1Status = "kesRemoteAlarm";
+ break;
+ case (kesHighErrorRate):
+ E1Status = "kesHighErrorRate";
+ break;
+ case (kesUnknownAlarm):
+ E1Status = "kesUnknownAlarm";
+ break;
+ case (kesE1Error):
+ E1Status = "kesE1Error";
+ break;
+ case (kesNotInitialized):
+ E1Status = "kesNotInitialized";
+ break;
+ default:
+ E1Status = "UnknownE1Status";
+ }
+ break;
+ default:
+ E1Status = "NotImplementedBoard";
+ }
+ }
+ stream->write_function(stream, "|%13d|%12d|%s|\n"
+ , device
+ , link
+ , E1Status);
+ }
+ }
+ }
+ stream->write_function(stream, "-------------------------------------------\n");
+}
+
+
+void printSystemSummary(switch_stream_handle_t* stream) {
+
+ K3L_API_CONFIG apiCfg;
+
+ stream->write_function(stream," ------------------------------------------------------------------\n");
+ stream->write_function(stream, "|---------------------- Khomp System Summary ----------------------|\n");
+ stream->write_function(stream, "|------------------------------------------------------------------|\n");
+
+ if (k3lGetDeviceConfig(-1, ksoAPI, &apiCfg, sizeof(apiCfg)) == ksSuccess)
+ {
+ stream->write_function(stream, "| K3L API %d.%d.%d [m.VPD %d] - %-38s |\n"
+ , apiCfg.MajorVersion , apiCfg.MinorVersion , apiCfg.BuildVersion
+ , apiCfg.VpdVersionNeeded , apiCfg.StrVersion);
+ }
+
+ for (unsigned int i = 0; i < Globals::_k3lapi.device_count(); i++)
+ {
+ K3L_DEVICE_CONFIG & devCfg = Globals::_k3lapi.device_config(i);
+
+ stream->write_function(stream, " ------------------------------------------------------------------\n");
+
+ switch (Globals::_k3lapi.device_type(i))
+ {
+ /* E1 boards */
+ case kdtE1:
+ case kdtConf:
+ case kdtPR:
+ case kdtE1GW:
+ case kdtE1IP:
+ case kdtE1Spx:
+ case kdtGWIP:
+ case kdtFXS:
+ case kdtFXSSpx:
+ {
+ K3L_E1600A_FW_CONFIG dspAcfg;
+ K3L_E1600B_FW_CONFIG dspBcfg;
+
+ if ((k3lGetDeviceConfig(i, ksoFirmware + kfiE1600A, &dspAcfg, sizeof(dspAcfg)) == ksSuccess) &&
+ (k3lGetDeviceConfig(i, ksoFirmware + kfiE1600B, &dspBcfg, sizeof(dspBcfg)) == ksSuccess))
+ {
+ stream->write_function(stream, "| [[ %02d ]] %s, serial '%04d', %02d channels, %d links.|\n"
+ , i , "E1" , atoi(devCfg.SerialNumber) , devCfg.ChannelCount , devCfg.LinkCount);
+ stream->write_function(stream, "| * DSP A: %s, DSP B: %s - PCI bus: %02d, PCI slot: %02d %s|\n"
+ , dspAcfg.DspVersion , dspBcfg.DspVersion , devCfg.PciBus , devCfg.PciSlot
+ , std::string(18 - strlen(dspAcfg.DspVersion) - strlen(dspBcfg.DspVersion), ' ').c_str());
+ stream->write_function(stream, "| * %-62s |\n" , dspAcfg.FwVersion);
+ stream->write_function(stream, "| * %-62s |\n" , dspBcfg.FwVersion);
+
+ }
+
+ break;
+ }
+
+ /* analog boards */
+ case kdtFXO:
+ case kdtFXOVoIP:
+ {
+ K3L_FXO80_FW_CONFIG dspCfg;
+
+ if (k3lGetDeviceConfig(i, ksoFirmware + kfiFXO80, &dspCfg, sizeof(dspCfg)) == ksSuccess)
+ {
+ stream->write_function(stream, "| [[ %02d ]] %s, serial '%04d', %02d channels. %s|\n"
+ , i , "KFXO80" , atoi(devCfg.SerialNumber) , devCfg.ChannelCount
+ , std::string(26 - 6, ' ').c_str());
+ stream->write_function(stream, "| * DSP: %s - PCI bus: %02d, PCI slot: %02d%s|\n"
+ , dspCfg.DspVersion , devCfg.PciBus , devCfg.PciSlot
+ , std::string(30 - strlen(dspCfg.DspVersion), ' ').c_str());
+ stream->write_function(stream, "| * %-62s |\n" , dspCfg.FwVersion);
+ }
+
+ }
+
+ case kdtGSM:
+ case kdtGSMSpx:
+ {
+ K3L_GSM40_FW_CONFIG dspCfg;
+
+ if (k3lGetDeviceConfig(i, ksoFirmware + kfiGSM40, &dspCfg, sizeof(dspCfg)) == ksSuccess)
+ {
+ stream->write_function(stream, "| [[ %02d ]] %s, serial '%04d', %02d channels. %s|\n"
+ , i , "KGSM" , atoi(devCfg.SerialNumber) , devCfg.ChannelCount
+ , std::string(26 - 4, ' ').c_str());
+
+ stream->write_function(stream, "| * DSP: %s - PCI bus: %02d, PCI slot: %02d%s|\n"
+ , dspCfg.DspVersion , devCfg.PciBus , devCfg.PciSlot
+ , std::string(30 - strlen(dspCfg.DspVersion), ' ').c_str());
+
+ stream->write_function(stream, "| * %-62s |\n" , dspCfg.FwVersion);
+ }
+
+ break;
+ }
+ default:
+ stream->write_function(stream, "| [[ %02d ]] Unknown type '%02d'! Please contact Khomp support for help! |\n"
+ , i , Globals::_k3lapi.device_type(i));
+ break;
+ }
+ }
+
+ stream->write_function(stream, " ------------------------------------------------------------------\n");
+}
+/* End of helper functions */
+
+
+/* Create a new channel on incoming call */
+KLibraryStatus khomp_channel_from_event(unsigned int KDeviceId, unsigned int KChannel, K3L_EVENT * event)
+{
+ switch_core_session_t *session = NULL;
+ KhompPvt *tech_pvt = NULL;
+ switch_channel_t *channel = NULL;
+ char name[128];
+
+ if (!(session = switch_core_session_request(Globals::_khomp_endpoint_interface, SWITCH_CALL_DIRECTION_INBOUND, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Initilization Error!\n");
+ return ksFail;
+ }
+
+ switch_core_session_add_stream(session, NULL);
+
+ tech_pvt = KhompPvt::khompPvt(KDeviceId, KChannel);
+ assert(tech_pvt != NULL);
+ channel = switch_core_session_get_channel(session);
+ if (tech_init(tech_pvt, session) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Initilization Error!\n");
+ switch_core_session_destroy(&session);
+ return ksFail;
+ }
+
+
+ /* Get all data from event */
+ std::string cidNum;
+ std::string destination_number;
+ try
+ {
+ cidNum = Globals::_k3lapi.get_param(event, "orig_addr");
+ destination_number = Globals::_k3lapi.get_param(event, "dest_addr");
+ }
+ catch ( K3LAPI::get_param_failed & err )
+ {
+ // TODO: Can we set NULL variables? What should we do if this fails?
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Could not get param %s on channel %u, board %u.\n", err.name.c_str(), KChannel, KDeviceId);
+ }
+
+ /*if (switch_strlen_zero(sigmsg->channel->caller_data.cid_num.digits)) {
+ if (!switch_strlen_zero(sigmsg->channel->caller_data.ani.digits)) {
+ switch_set_string(sigmsg->channel->caller_data.cid_num.digits, sigmsg->channel->caller_data.ani.digits);
+ } else {
+ switch_set_string(sigmsg->channel->caller_data.cid_num.digits, sigmsg->channel->chan_number);
+ }
+ }
+ */
+
+ /* Set the caller profile - Look at documentation */
+ tech_pvt->_caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
+ "Khomp",
+ "XML", // TODO: Dialplan module to use?
+ NULL,
+ NULL,
+ NULL,
+ cidNum.c_str(),
+ NULL,
+ NULL,
+ (char *) modname,
+ "default", // TODO: Context to look for on the dialplan?
+ destination_number.c_str());
+
+ assert(tech_pvt->_caller_profile != NULL);
+ /* END */
+
+ /* WHAT??? - Look at documentation */
+ //switch_set_flag(tech_pvt->caller_profile, SWITCH_CPF_NONE);
+ /* END */
+
+ /* */
+ snprintf(name, sizeof(name), "Khomp/%u/%u/%s", KDeviceId, KChannel, tech_pvt->_caller_profile->destination_number);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connect inbound channel %s\n", name);
+ switch_channel_set_name(channel, name);
+ switch_channel_set_caller_profile(channel, tech_pvt->_caller_profile);
+ /* END */
+
+
+ switch_channel_set_state(channel, CS_INIT);
+ if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error spawning thread\n");
+ switch_core_session_destroy(&session);
+ return ksFail;
+ }
+
+ /* WHAT?
+ if (zap_channel_add_token(sigmsg->channel, switch_core_session_get_uuid(session), 0) != ZAP_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error adding token\n");
+ switch_core_session_destroy(&session);
+ return ZAP_FAIL;
+ }
+ */
+
+ /* Set the session to the channel */
+ KhompPvt::khompPvt(KDeviceId, KChannel)->session(session);
+
+ return ksSuccess;
+}
+
+int32 Kstdcall khomp_event_callback(int32 obj, K3L_EVENT * e)
+{
+ /* TODO: How do we make sure channels inside FreeSWITCH only change to valid states on K3L? */
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Khomp Event: on %u/%u: %x\n", e->DeviceId, obj, e->Code);
+
+ switch(e->Code)
+ {
+ case EV_NEW_CALL:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "New call on %u to %s. [EV_NEW_CALL]\n", obj, Globals::_k3lapi.get_param(e, "dest_addr").c_str());
+ if (khomp_channel_from_event(e->DeviceId, obj, e) != ksSuccess )
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Something bad happened while getting channel session. Device:%u/Channel:%u. [EV_CONNECT]\n", e->DeviceId, obj);
+ return ksFail;
+ }
+ try
+ {
+ Globals::_k3lapi.command(e->DeviceId, obj, CM_RINGBACK, NULL);
+ Globals::_k3lapi.command(e->DeviceId, obj, CM_CONNECT, NULL);
+ }
+ catch (K3LAPI::failed_command & err)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not set board channel status! [EV_NEW_CALL]\n");
+ }
+ break;
+ case EV_DISCONNECT:
+ {
+ switch_core_session_t * session = KhompPvt::khompPvt(e->DeviceId, obj)->session();
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Called party dropped the call on: %u. Releasing channel. [EV_DISCONNECT]\n", obj);
+ if(session == NULL)
+ break;
+
+ if (channel_on_hangup(session) != SWITCH_STATUS_SUCCESS)
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Could not hangup channel: %u on board %u. Releasing board channel anyway. [EV_DISCONNECT]\n", obj, e->DeviceId);
+ try
+ {
+ /* Stop the audio callbacks */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stopping audio callbacks ...\n");
+ KhompPvt::khompPvt(e->DeviceId, obj)->stop_listen();
+ KhompPvt::khompPvt(e->DeviceId, obj)->stop_stream();
+ KhompPvt::khompPvt(e->DeviceId, obj)->session(NULL);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Audio callbacks stopped successfully\n");
+ }
+ catch(K3LAPI::invalid_channel & err)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not send CM_DISCONNECT!\n");
+ }
+ }
+ break;
+ case EV_CONNECT:
+ switch_core_session_t* session;
+ try
+ {
+ session = KhompPvt::khompPvt(e->DeviceId, obj)->session();
+ switch_channel_t *channel;
+ channel = switch_core_session_get_channel(session);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Call will be answered on board %u, channel %u. [EV_CONNECT]\n", e->DeviceId, obj);
+ switch_channel_mark_answered(channel);
+ /* Start listening for audio */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Starting audio callbacks ...\n");
+ KhompPvt::khompPvt(e->DeviceId, obj)->start_stream();
+ KhompPvt::khompPvt(e->DeviceId, obj)->start_listen();
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Audio callbacks initialized successfully\n");
+ }
+ catch (K3LAPI::invalid_session & err)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Something bad happened while getting channel session. Device:%u/Channel:%u. [EV_CONNECT]\n", e->DeviceId, obj);
+ }
+ break;
+ case EV_CALL_SUCCESS:
+ /* TODO: Should we bridge here? Maybe check a certain variable if we should generate ringback? */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Call on board %u, channel %u is ringing. [EV_CALL_SUCESS]\n", e->DeviceId, obj);
+ break;
+ case EV_CHANNEL_FREE:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Channel %u on board %u is now free. [EV_CHANNEL_FREE]\n", obj, e->DeviceId);
+ break;
+ case EV_NO_ANSWER:
+ /* TODO: Destroy sessions and channels */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No one answered the call on board %u channel %u. [EV_NO_ANSWER]\n", e->DeviceId, obj);
+ break;
+ case EV_CALL_ANSWER_INFO:
+ {
+ /* TODO: Set channel variable if we get this event */
+ /* TODO: Fire an event so ESL can get it? */
+ /* Call Analyser has to be enabled on k3lconfig */
+ const char * startInfo = "";
+ switch (e->AddInfo)
+ {
+ case (kcsiHumanAnswer):
+ startInfo = "kcsiHumanAnswer";
+ break;
+ case (kcsiAnsweringMachine):
+ startInfo = "kcsiAnsweringMachine";
+ break;
+ case (kcsiCellPhoneMessageBox):
+ startInfo = "kcsiCellPhoneMessageBox";
+ break;
+ case (kcsiUnknown):
+ startInfo = "kcsiUnknown";
+ break;
+ case (kcsiCarrierMessage):
+ startInfo = "kcsiCarrierMessage";
+ break;
+ default:
+ startInfo = "Error or unknown code!";
+
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel %u, board %u detected: \"%s\". [EV_CALL_ANSWER_INFO]\n", e->DeviceId, obj, startInfo);
+ break;
+ }
+ case EV_DTMF_DETECTED:
+ /* TODO: What to do with DTMF? */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Board %u detected DTMF (%d) on channel %u. [EV_DTMF_DETECTED]\n", e->DeviceId, e->AddInfo, obj);
+ break;
+ case EV_DTMF_SEND_FINISH:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel %u on board %u has sucessfully generated DTMF. [EV_DTMF_SEND_FINNISH]\n", obj, e->DeviceId);
+ break;
+ case EV_CALL_FAIL:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Channel %u on board %u reported call fail. [EV_CALL_FAIL]\n", obj, e->DeviceId);
+ break;
+ case EV_CHANNEL_FAIL:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Channel %u on board %u reported failure. [EV_CHANNEL_FAIL]\n", obj, e->DeviceId);
+ break;
+ case EV_LINK_STATUS:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Link %u on board %u changed. [EV_LINK_STATUS]\n", e->DeviceId, obj);
+ break;
+ case EV_PHYSICAL_LINK_DOWN:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Link %u on board %u is DOWN. [EV_PHYSICAL_LINK_DOWN]\n", e->DeviceId, obj);
+ break;
+ case EV_PHYSICAL_LINK_UP:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Link %u on board %u is UP. [EV_PHYSICAL_LINK_UP]\n", e->DeviceId, obj);
+ break;
+ case EV_INTERNAL_FAIL:
+ {
+ const char * msg = "";
+ switch(e->AddInfo)
+ {
+ case kifInterruptCtrl:
+ msg = "kifInterruptCtrl";
+ break;
+ case kifCommunicationFail:
+ msg = "kifCommunicationFail";
+ break;
+ case kifProtocolFail:
+ msg = "kifProtocolFail";
+ break;
+ case kifInternalBuffer:
+ msg = "kifInternalBuffer";
+ break;
+ case kifMonitorBuffer:
+ msg = "kifMonitorBuffer";
+ break;
+ case kifInitialization:
+ msg = "kifInitialization";
+ break;
+ case kifInterfaceFail:
+ msg = "kifInterfaceFail";
+ break;
+ case kifClientCommFail:
+ msg = "kifClientCommFail";
+ break;
+ default:
+ msg = "UnknownError";
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This is a fatal error and we will not recover. Reason: %s. [EV_INTERNAL_FAIL]\n", msg);
+ break;
+ }
+ default:
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Event has just arrived on %u with untreated code: %x\n", obj, e->Code);
+ }
+
+ return ksSuccess;
+}
+
+void Kstdcall khomp_audio_listener (int32 deviceid, int32 objectid, byte * read_buffer, int32 read_size)
+{
+ KhompPvt * pvt = KhompPvt::khompPvt(deviceid, objectid);
+ /*TODO: write to the switch_buffer_t member, which will be read by channel_read_frame */
+
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
+ */
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/src)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/globals.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/globals.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/src/globals.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/globals.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/globals.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+#include "globals.h"
+
+
+K3LAPI Globals::_k3lapi;
+
+config_options Globals::_options;
+
+switch_endpoint_interface_t * Globals::_khomp_endpoint_interface;
+switch_api_interface_t * Globals::_api_interface;
+switch_memory_pool_t * Globals::_module_pool = NULL;
+int Globals::_running = 1;
+
+unsigned int Globals::_flags;
+int Globals::_calls;
+switch_mutex_t * Globals::_mutex;
+
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/khomp_pvt.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/khomp_pvt.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/src/khomp_pvt.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/khomp_pvt.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/khomp_pvt.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,327 @@
+#include "khomp_pvt.h"
+
+KhompPvt::KhompPvtVector KhompPvt::_pvts;
+switch_mutex_t * KhompPvt::_pvts_mutex;
+
+KhompPvt * KhompPvt::find_channel(char* allocation_string, switch_core_session_t * new_session, switch_call_cause_t * cause)
+{
+
+ char *argv[3] = { 0 };
+ int argc = 0;
+
+ int board_low = 0;
+ int board_high = 0;
+
+ int channel_low = 0;
+ int channel_high = 0;
+
+ bool first_channel_available = true;
+ bool reverse_first_board_available = false;
+ bool reverse_first_channel_available = false;
+
+ *cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+
+ KhompPvt * pvt = NULL;
+
+ /* Let's setup our own vars on tech_pvt */
+ if ((argc = switch_separate_string(allocation_string, '/', argv, (sizeof(argv) / sizeof(argv[0])))) < 3)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
+ "Invalid dial string (%s). Should be on the format:[Khomp/BoardID (or A for first free board)/CHANNEL (or A for first free channel)]\n",
+ allocation_string);
+ return NULL;
+ }
+
+ if(*argv[0] == 'A' || *argv[0] == 'a')
+ {
+ board_low = 0;
+ board_high = Globals::_k3lapi.device_count();
+ // Lets make it reverse...
+ if(*argv[0] == 'a')
+ {
+ reverse_first_board_available = true;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Doing reverse board lookup!\n");
+ }
+ }
+ else
+ {
+ board_low = atoi(argv[0]);
+ board_high = board_low;
+ }
+
+ if(*argv[1] == 'A' || *argv[1] == 'a')
+ {
+ first_channel_available = true;
+ // Lets make it reverse...
+ if(*argv[1] == 'a')
+ {
+ reverse_first_channel_available = true;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Doing reverse channel lookup!\n");
+ }
+ }
+ else
+ {
+ first_channel_available = false;
+ channel_low = atoi(argv[0]);
+ channel_high = board_low;
+ }
+
+ /* Sanity checking */
+ if(board_low < 0 || board_high > Globals::_k3lapi.device_count())
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid board selection (%d-%d) !\n", board_low, board_high);
+ return NULL;
+ }
+
+ switch_mutex_lock(_pvts_mutex);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel selection: board (%d-%d), channel (%d-%d)!\n", board_low, board_high, channel_low, channel_high);
+
+ int board = board_low;
+ for ((reverse_first_board_available == false ? board = board_low : board = board_high-1);
+ (reverse_first_board_available == false ? board <= board_high : board >= board_low);
+ (reverse_first_board_available == false ? board++ : board--))
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Checking board %d\n", board);
+
+ if(pvt != NULL)
+ break;
+
+ if(first_channel_available)
+ {
+ channel_low = 0;
+ channel_high = Globals::_k3lapi.channel_count(board);
+ }
+ else
+ {
+ if(channel_low < 0 || channel_high > Globals::_k3lapi.channel_count(board))
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid channel selection (%d-%d) !\n", channel_low, channel_high);
+ switch_mutex_unlock(_pvts_mutex);
+ return NULL;
+ }
+ }
+
+ int channel = channel_low;
+ for ((reverse_first_channel_available == true ? channel = channel_high-1 : channel = channel_low);
+ (reverse_first_channel_available == true ? channel >= channel_low : channel <= channel_high);
+ (reverse_first_channel_available == true ? channel-- : channel++))
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Checking if (%d-%d) is free\n", board, channel);
+ try
+ {
+ K3L_CHANNEL_CONFIG channelConfig;
+ channelConfig = Globals::_k3lapi.channel_config( board, channel );
+ }
+ catch (...)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception while retrieving channel config for board %d, channel%d!\n", board, channel);
+ switch_mutex_unlock(_pvts_mutex);
+ return NULL;
+ }
+ K3L_CHANNEL_STATUS status;
+ if (k3lGetDeviceStatus( board, channel + ksoChannel, &status, sizeof(status) ) != ksSuccess)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "k3lGetDeviceStatus failed to retrieve channel config for board %d, channel%d!\n", board, channel);
+ switch_mutex_unlock(_pvts_mutex);
+ return NULL;
+ }
+ if(status.CallStatus == kcsFree)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel (%d-%d) is free, let's check if the session is available ...\n", board, channel);
+ pvt = KhompPvt::khompPvt(board, channel);
+ if(pvt != NULL && pvt->session() == NULL)
+ {
+ pvt->session(new_session);
+ break;
+ }
+ pvt = NULL;
+ }
+ }
+ }
+
+ if(pvt != NULL)
+ {
+ *cause = SWITCH_CAUSE_SUCCESS;
+ }
+ else
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No channels available\n");
+ *cause = SWITCH_CAUSE_NORMAL_CIRCUIT_CONGESTION;
+ }
+
+ switch_mutex_unlock(_pvts_mutex);
+ return pvt;
+}
+
+/* Helper functions - based on code from chan_khomp */
+
+int32 KhompPvt::get_audio_dsp()
+{
+ switch (Globals::_k3lapi.device_type(_KDeviceId))
+ {
+ case kdtFXO:
+ case kdtFXOVoIP:
+ case kdtGSM:
+ case kdtGSMSpx:
+ return 0;
+ default:
+ return 1;
+ }
+}
+
+bool KhompPvt::obtain_both(void)
+{
+ /* estes buffers *NAO PODEM SER ESTATICOS*! */
+ char cmd1[] = { 0x3f, 0x03, 0xff, 0x00, 0x05, 0xff };
+ char cmd2[] = { 0x3f, 0x03, 0xff, 0x01, 0x00, 0xff };
+
+ cmd1[2] = cmd1[5] = cmd2[2] = cmd2[5] = _KChannelId;
+
+ int32 val = get_audio_dsp();
+
+ try
+ {
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd1, 6);
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd2, 6);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool KhompPvt::obtain_rx(bool with_delay)
+{
+ /* estes buffers *NAO PODEM SER ESTATICOS*! */
+ char cmd1[] = { 0x3f, 0x03, 0xff, 0x00, (with_delay ? 0x05 : 0x0a), 0xff };
+ char cmd2[] = { 0x3f, 0x03, 0xff, 0x01, 0x09, 0x0f };
+
+ cmd1[2] = cmd1[5] = cmd2[2] = _KChannelId;
+
+ int32 val = get_audio_dsp();
+
+ try
+ {
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd1, 6);
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd2, 6);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool KhompPvt::obtain_tx(void)
+{
+ /* estes buffers *NAO PODEM SER ESTATICOS*! */
+ char cmd1[] = { 0x3f, 0x03, 0xff, 0x00, 0x00, 0xff };
+ char cmd2[] = { 0x3f, 0x03, 0xff, 0x01, 0x09, 0x0f };
+
+ cmd1[2] = cmd1[5] = cmd2[2] = _KChannelId;
+
+ int32 val = get_audio_dsp();
+
+ try
+ {
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd1, 6);
+ Globals::_k3lapi.raw_command(_KDeviceId, val, cmd2, 6);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool KhompPvt::start_stream(void)
+{
+ if(switch_test_flag(this, TFLAG_STREAM))
+ return true;
+
+ try
+ {
+ Globals::_k3lapi.mixer(_KDeviceId, _KChannelId, 0, kmsPlay, _KChannelId);
+ Globals::_k3lapi.command(_KDeviceId, _KChannelId, CM_START_STREAM_BUFFER);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ switch_set_flag_locked(this, TFLAG_STREAM);
+
+ return true;
+}
+
+bool KhompPvt::stop_stream(void)
+{
+ if(!switch_test_flag(this, TFLAG_STREAM))
+ return true;
+
+ try
+ {
+ Globals::_k3lapi.mixer(_KDeviceId, _KChannelId, 0, kmsGenerator, kmtSilence);
+ Globals::_k3lapi.command(_KDeviceId, _KChannelId, CM_STOP_STREAM_BUFFER);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ switch_clear_flag_locked(this, TFLAG_STREAM);
+
+ return true;
+}
+
+bool KhompPvt::start_listen(bool conn_rx)
+{
+ if(switch_test_flag(this, TFLAG_LISTEN))
+ return true;
+
+ const size_t buffer_size = KHOMP_PACKET_SIZE;
+
+ if (conn_rx)
+ {
+ if (!obtain_rx(false)) // no delay, by default..
+ return false;
+ }
+
+ try
+ {
+ Globals::_k3lapi.command(_KDeviceId, _KChannelId, CM_LISTEN, (const char *) &buffer_size);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ switch_set_flag_locked(this, TFLAG_LISTEN);
+
+ return true;
+}
+
+bool KhompPvt::stop_listen(void)
+{
+ if(!switch_test_flag(this, TFLAG_LISTEN))
+ return true;
+
+ try
+ {
+ Globals::_k3lapi.command(_KDeviceId, _KChannelId, CM_STOP_LISTEN);
+ }
+ catch(...)
+ {
+ return false;
+ }
+
+ switch_clear_flag_locked(this, TFLAG_LISTEN);
+
+ return true;
+}
+
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/opt.cpp
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/opt.cpp (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/src/opt.cpp) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/opt.cpp (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/src/opt.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,91 @@
+#include "opt.h"
+
+#include "globals.h"
+
+
+bool Opt::_debug;
+char * Opt::_ip;
+int Opt::_port;
+
+char * Opt::_dialplan;
+char * Opt::_codec_string;
+char * Opt::_codec_order[SWITCH_MAX_CODECS];
+int Opt::_codec_order_last;
+char * Opt::_codec_rates_string;
+char * Opt::_codec_rates[SWITCH_MAX_CODECS];
+int Opt::_codec_rates_last;
+
+
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_dialplan, Opt::_dialplan);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, Opt::_codec_string);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_rates_string, Opt::_codec_rates_string);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_ip, Opt::_ip);
+
+
+
+void Opt::initialize(void)
+{
+ Globals::_options.add(config_option("debug", _debug, false));
+ //Globals::options.add(config_option("port", _port, ???));
+ //Globals::options.add(config_option("ip", _ip, ???));
+ //Globals::options.add(config_option("dialplan", _dialplan, ???));
+ //Globals::options.add(config_option("ip", _ip, ???));
+}
+
+void Opt::obtain(void)
+{
+ load_configuration("khomp.conf", NULL);
+}
+
+void Opt::load_configuration(const char *file_name, const char **section, bool show_errors)
+{
+ switch_xml_t cfg, xml, settings, param;
+
+ switch_mutex_init(&Globals::_mutex, SWITCH_MUTEX_NESTED, Globals::_module_pool);
+ if (!(xml = switch_xml_open_cfg(file_name, &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", file_name);
+ return;
+ }
+
+ if ((settings = switch_xml_child(cfg, "settings"))) {
+ for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+ char *var = (char *) switch_xml_attr_soft(param, "name");
+ char *val = (char *) switch_xml_attr_soft(param, "value");
+
+ if (!strcmp(var, "_debug")) {
+ Globals::_options.process(var, val);
+ //_debug = atoi(val);
+ } else if (!strcmp(var, "port")) {
+ _port = atoi(val);
+ } else if (!strcmp(var, "ip")) {
+ set_global_ip(val);
+ //} else if (!strcmp(var, "codec-master")) {
+ //if (!strcasecmp(val, "us")) {
+ // switch_set_flag(&globals, GFLAG_MY_CODEC_PREFS);
+ //}
+ } else if (!strcmp(var, "dialplan")) {
+ set_global_dialplan(val);
+ } else if (!strcmp(var, "codec-prefs")) {
+ set_global_codec_string(val);
+ _codec_order_last = switch_separate_string(_codec_string, ',', _codec_order, SWITCH_MAX_CODECS);
+ } else if (!strcmp(var, "codec-rates")) {
+ set_global_codec_rates_string(val);
+ _codec_rates_last = switch_separate_string(_codec_rates_string, ',', _codec_rates, SWITCH_MAX_CODECS);
+ }
+ }
+ }
+
+ if (!_dialplan) {
+ set_global_dialplan("default");
+ }
+
+ if (!_port) {
+ _port = 4569;
+ }
+
+ switch_xml_free(xml);
+
+}
+void Opt::clean_configuration(void){}
+
+
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/tools (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/tools)
Deleted: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/tools/generate-k3l-header.pl
Copied: freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/tools/generate-k3l-header.pl (from rev 14471, freeswitch/trunk/contrib/mod/endpoints/mod_khomp/tools/generate-k3l-header.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/tools/generate-k3l-header.pl (rev 0)
+++ freeswitch/branches/seven/contrib/mod/endpoints/mod_khomp/tools/generate-k3l-header.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,102 @@
+#!/usr/bin/perl
+
+my @files =
+ ( 'KTypeDefs.h', 'KVoIP.h', 'KDefs.h', 'KErrorDefs.h', 'KH100Defs.h',
+ 'KMixerDefs.h', 'KR2D.h', 'KISDN.h', 'KGSM.h', 'KStats.h', 'k3lVersion.h', 'k3l.h' );
+
+my $text = "";
+
+foreach my $file (@files)
+{
+ open FILE, ('api/' . $file);
+
+ while (<FILE>)
+ {
+ $text .= $_;
+ }
+
+ close (FILE);
+}
+
+$text =~ s/[\/][\*](.+?)[\*][\/]//smg;
+$text =~ s/[\/][\/](.+)//mg;
+$text =~ s/\#include.+\n//g;
+$text =~ s/\n\n/\n/mg;
+
+my $header =
+"/*
+ KHOMP endpoint provider for FreeSWITCH(tm)
+ Copyright (C) 2007-2009 Khomp Ind. & Com.
+
+ 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.
+
+ Alternatively, the contents of this file may be used under the terms of the
+ \"GNU Lesser General Public License 2.1\" license (the “LGPL\" License), in which
+ case the provisions of \"LGPL License\" are applicable instead of those above.
+
+ If you wish to allow use of your version of this file only under the terms of
+ the LGPL License and not to allow others to use your version of this file under
+ the MPL, indicate your decision by deleting the provisions above and replace them
+ with the notice and other provisions required by the LGPL License. If you do not
+ delete the provisions above, a recipient may use your version of this file under
+ either the MPL or the LGPL License.
+
+ The LGPL header follows below:
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+";
+
+my $footer =
+"
+enum KISDNDebugFlag
+{
+ kidfQ931 = 0x01,
+ kidfLAPD = 0x02,
+ kidfSystem = 0x04,
+ kidfInvalid = 0x08,
+};
+
+#define CM_VOIP_START_DEBUG 0x20
+#define CM_VOIP_STOP_DEBUG 0x21
+#define CM_VOIP_DUMP_STAT 0x22
+
+#define CM_ISDN_DEBUG 0x24
+
+#define CM_PING 0x123456
+#define EV_PONG 0x654321
+
+#define CM_LOG_REQUEST 0x100
+#define CM_LOG_CREATE_DISPATCHER 0x101
+#define CM_LOG_DESTROY_DISPATCHER 0x102
+
+";
+
+open FILE, '>', '../include/k3lDefs.h';
+print FILE $header;
+print FILE "#ifndef INCLUDED_K3LDEFS_H\n";
+print FILE "#define INCLUDED_K3LDEFS_H\n";
+print FILE $text;
+print FILE $footer;
+print FILE "#endif /* INCLUDED_K3LDEFS_H */\n";
+close FILE;
Copied: freeswitch/branches/seven/contrib/mod/event_handlers (from rev 14471, freeswitch/trunk/contrib/mod/event_handlers)
Copied: freeswitch/branches/seven/contrib/mod/event_handlers/mod_csta_socket (from rev 14471, freeswitch/trunk/contrib/mod/event_handlers/mod_csta_socket)
Copied: freeswitch/branches/seven/contrib/mod/event_handlers/mod_csta_socket/CSTAInsideCore (from rev 14471, freeswitch/trunk/contrib/mod/event_handlers/mod_csta_socket/CSTAInsideCore)
Copied: freeswitch/branches/seven/contrib/mod/formats (from rev 14471, freeswitch/trunk/contrib/mod/formats)
Copied: freeswitch/branches/seven/contrib/mod/languages (from rev 14471, freeswitch/trunk/contrib/mod/languages)
Copied: freeswitch/branches/seven/contrib/mod/loggers (from rev 14471, freeswitch/trunk/contrib/mod/loggers)
Copied: freeswitch/branches/seven/contrib/mod/say (from rev 14471, freeswitch/trunk/contrib/mod/say)
Copied: freeswitch/branches/seven/contrib/mod/timers (from rev 14471, freeswitch/trunk/contrib/mod/timers)
Copied: freeswitch/branches/seven/contrib/mod/xml_int (from rev 14471, freeswitch/trunk/contrib/mod/xml_int)
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc)
Property changes: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc
Name: svn:ignore
+ Makefile
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/mod_xml_odbc.c
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/mod_xml_odbc.c (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/mod_xml_odbc.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/mod_xml_odbc.c (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/mod_xml_odbc.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,646 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * All the FreeSWITCH contributors that I borrowed code from
+ * Leon de Rooij <leon@scarlet-internet.nl>
+ *
+ * Also thanks to:
+ * Scarlet Nederland for donating time and money
+ *
+ *
+ * mod_xml_odbc.c -- Simple templating that can use ODBC to generate XML at search-time
+ *
+ *
+ */
+#include <switch.h>
+
+typedef enum {
+ XML_ODBC_CONFIGURATION = 0,
+ XML_ODBC_DIRECTORY = 0,
+ XML_ODBC_DIALPLAN = 0,
+ XML_ODBC_PHRASES = 0
+} xml_odbc_query_type_t;
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_xml_odbc_load);
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_odbc_shutdown);
+SWITCH_MODULE_DEFINITION(mod_xml_odbc, mod_xml_odbc_load, mod_xml_odbc_shutdown, NULL);
+
+static struct {
+ char *odbc_dsn;
+ switch_xml_t templates_tag;
+ switch_mutex_t *mutex;
+ switch_memory_pool_t *pool;
+ switch_odbc_handle_t *master_odbc;
+ switch_bool_t debug;
+ switch_bool_t keep_files_around;
+ int max_render_template_count;
+} globals;
+
+typedef struct xml_odbc_session_helper {
+ switch_memory_pool_t *pool; /* memory pool that is destroyed at the end of the session to ease free'ing */
+ char *next_template_name; /* the name of the next template that has to be rendered */
+ switch_event_t *event; /* contains headers which is a hash that can easily be expanded ${var} to *chars */
+ switch_xml_t xml_in_cur; /* current tag in xml template that is rendered from */
+ switch_xml_t xml_out; /* root tag of xml that is rendered to */
+ switch_xml_t xml_out_cur; /* current tag in xml that is rendered to */
+ int xml_out_cur_off; /* depth counter of xml_out_cur */
+ int render_template_count; /* when this counter > globals.max_render_template_count then stop because there's probably a loop */
+ int tmp_i; /* temporary counter, used for counting rows in the callback */
+} xml_odbc_session_helper_t;
+
+static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper);
+static switch_status_t xml_odbc_render_children(xml_odbc_session_helper_t *helper);
+static switch_status_t xml_odbc_render_template(xml_odbc_session_helper_t *helper);
+
+#define XML_ODBC_SYNTAX "[debug_on|debug_off]"
+
+/* cli commands */
+SWITCH_STANDARD_API(xml_odbc_function)
+{
+ if (session) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if (switch_strlen_zero(cmd)) {
+ goto usage;
+ }
+
+ if (!strcasecmp(cmd, "debug_on")) {
+ globals.debug = SWITCH_TRUE;
+ } else if (!strcasecmp(cmd, "debug_off")) {
+ globals.debug = SWITCH_FALSE;
+ } else {
+ goto usage;
+ }
+
+ stream->write_function(stream, "OK\n");
+ return SWITCH_STATUS_SUCCESS;
+
+ usage:
+ stream->write_function(stream, "USAGE: %s\n", XML_ODBC_SYNTAX);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+typedef struct xml_binding {
+ char *bindings;
+} xml_binding_t;
+
+static char* switch_event_expand_headers_by_pool(switch_memory_pool_t *pool, switch_event_t *event, const char *in) /* perhaps it's handy if this is moved to switch_event.c ? */
+{
+ char *tmp, *out;
+
+ tmp = switch_event_expand_headers(event, in);
+ out = switch_core_strdup(pool, tmp);
+ if (tmp != in) switch_safe_free(tmp);
+
+ return out;
+}
+
+static int xml_odbc_query_callback(void *pArg, int argc, char **argv, char **columnName)
+{
+ xml_odbc_session_helper_t *helper = (xml_odbc_session_helper_t *) pArg;
+ int i;
+
+ if (!switch_strlen_zero(helper->next_template_name)) goto done;
+
+ /* up the row counter */
+ helper->tmp_i++; // TODO: WILL THIS GO WRONG FOR NESTED QUERIES ?? THINK ABOUT IT !!!
+
+ /* loop through all columns and store them in helper->event->headers */
+ for (i = 0; i < argc; i++) {
+ switch_event_del_header(helper->event, columnName[i]);
+ switch_event_add_header_string(helper->event, SWITCH_STACK_BOTTOM, columnName[i], argv[i]);
+ }
+
+ xml_odbc_render_children(helper);
+
+ done:
+ return 0;
+}
+
+static switch_status_t xml_odbc_do_break_to(xml_odbc_session_helper_t *helper)
+{
+ char *value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "value");
+ char *new_value = switch_event_expand_headers_by_pool(helper->pool, helper->event, value);
+
+ helper->next_template_name = new_value;
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t xml_odbc_do_check_event_header(xml_odbc_session_helper_t *helper)
+{
+ char *name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "name");
+ char *if_name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-name");
+ char *if_value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-value");
+ char *tmp_value;
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ if (switch_strlen_zero(if_name)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Ignoring xml-odbc-do name=[%s] because no if-name is given\n", name);
+ goto done;
+ }
+
+ if ((tmp_value = switch_event_get_header(helper->event, if_name))) {
+ if (!switch_strlen_zero(tmp_value)) {
+ if (switch_strlen_zero(if_value) || !strcasecmp(if_value, tmp_value)) {
+ status = xml_odbc_render_children(helper);
+ }
+ }
+ }
+
+ done:
+ return status;
+}
+
+static switch_status_t xml_odbc_do_set_event_header(xml_odbc_session_helper_t *helper)
+{
+ char *name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "name");
+ char *if_name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-name");
+ char *if_value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-value");
+ char *old_value = NULL;
+ char *to_value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "to-value");
+ char *new_to_value = switch_event_expand_headers_by_pool(helper->pool, helper->event, to_value);
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ if (switch_strlen_zero(to_value)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Ignoring xml-odbc-do name=[%s] because no to-value is given\n", name);
+ goto done;
+ }
+
+ if ((old_value = switch_event_get_header(helper->event, if_name))) {
+ if (switch_strlen_zero(if_value) || !strcasecmp(if_value, old_value)) {
+ switch_event_del_header(helper->event, if_name);
+ switch_event_add_header_string(helper->event, SWITCH_STACK_BOTTOM, if_name, new_to_value);
+ }
+ }
+
+ status = SWITCH_STATUS_SUCCESS;
+
+ done:
+ return status;
+}
+
+static switch_status_t xml_odbc_do_query(xml_odbc_session_helper_t *helper)
+{
+ char *value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "value");
+ char *empty_result_break_to = (char *) switch_xml_attr_soft(helper->xml_in_cur, "on-empty-result-break-to");
+ char *new_value = switch_event_expand_headers_by_pool(helper->pool, helper->event, value);
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ if (globals.debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG Performing Query:\n%s\n", new_value);
+ }
+
+ if (switch_odbc_handle_callback_exec(globals.master_odbc, new_value, xml_odbc_query_callback, helper) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error running this query: [%s]\n", new_value);
+ goto done;
+ }
+
+ if (!switch_strlen_zero(empty_result_break_to) && helper->tmp_i == 0) {
+ helper->next_template_name = empty_result_break_to;
+ }
+
+ status = SWITCH_STATUS_SUCCESS;
+
+ done:
+ return status;
+}
+
+/* render tag helper->xml_in_cur */
+static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper)
+{
+ switch_status_t status = SWITCH_STATUS_FALSE;
+ int i;
+
+ /* special case xml-odbc-do */
+ if (!strcasecmp(helper->xml_in_cur->name, "xml-odbc-do")) {
+ char *name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "name");
+
+ if (switch_strlen_zero(name)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Ignoring xml-odbc-do because no name is given\n");
+ goto done;
+ }
+
+ if (!strcasecmp(name, "break-to")) {
+ status = xml_odbc_do_break_to(helper);
+ } else if (!strcasecmp(name, "check-event-header")) {
+ status = xml_odbc_do_check_event_header(helper);
+ } else if (!strcasecmp(name, "set-event-header")) {
+ status = xml_odbc_do_set_event_header(helper);
+ } else if (!strcasecmp(name, "query")) {
+ status = xml_odbc_do_query(helper);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Ignoring invalid xml-odbc-do name=[%s]\n", name);
+ }
+
+ goto done;
+ }
+
+ /* just copy xml_in_cur to xml_out */
+ if (switch_strlen_zero(helper->xml_out_cur->name)) {
+ helper->xml_out_cur->name = switch_core_strdup(helper->pool, helper->xml_in_cur->name);
+
+ } else if (!(helper->xml_out_cur = switch_xml_add_child_d(helper->xml_out_cur, helper->xml_in_cur->name, helper->xml_out_cur_off++))) {
+ goto done;
+ }
+
+ /* copy all expanded attrs */
+ for (i=0; helper->xml_in_cur->attr[i]; i+=2) {
+ char *tmp_value = switch_event_expand_headers_by_pool(helper->pool, helper->event, helper->xml_in_cur->attr[i+1]);
+ switch_xml_set_attr(helper->xml_out_cur, helper->xml_in_cur->attr[i], tmp_value);
+ }
+
+ status = xml_odbc_render_children(helper);
+
+ done:
+ return status;
+}
+
+/* render all children of helper->xml_in_cur */
+static switch_status_t xml_odbc_render_children(xml_odbc_session_helper_t *helper)
+{
+ switch_xml_t xml_in_cur_tmp, xml_out_cur_tmp, xml_in_cur_child;
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ /* temporarily save helper->xml_in_cur and helper->xml_out_cur so they can be restored later */
+ xml_in_cur_tmp = helper->xml_in_cur;
+ xml_out_cur_tmp = helper->xml_out_cur;
+
+ /* render all children of xml_in_cur */
+ for (xml_in_cur_child = helper->xml_in_cur->child; xml_in_cur_child; xml_in_cur_child = xml_in_cur_child->ordered) {
+ helper->xml_in_cur = xml_in_cur_child;
+
+ xml_odbc_render_tag(helper);
+
+ /* restore helper->xml_out_cur in case it was changed during render_tag */
+ helper->xml_out_cur = xml_out_cur_tmp;
+
+ if (!switch_strlen_zero(helper->next_template_name)) goto done;
+ }
+
+ status = SWITCH_STATUS_SUCCESS;
+
+ done:
+ /* restore helper->xml_in_cur in case it was changed during render_tag */
+ helper->xml_in_cur = xml_in_cur_tmp;
+
+ return status;
+}
+
+/* free xml_out and render template given by name helper->next_template_name */
+static switch_status_t xml_odbc_render_template(xml_odbc_session_helper_t *helper)
+{
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ if (globals.debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG GOING TO RENDER TEMPLATE [%s]\n", helper->next_template_name);
+ }
+
+ /* up the helper->render_template_count and check whether it's > globals.max_render_template_count */
+ helper->render_template_count++;
+ if (helper->render_template_count > globals.max_render_template_count) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
+ "Stopped rendering template, called xml_odbc_render_template more than [%i] times, probably looping.\n", globals.max_render_template_count);
+ goto done;
+ }
+
+ /* free helper -> xml_out */
+ switch_xml_free(helper->xml_out);
+
+ /* init helper-> xml_out xml_out_cur to the same address */
+ if (!(helper->xml_out = helper->xml_out_cur = switch_xml_new(""))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Allocation Error!\n");
+ helper->next_template_name = "";
+ goto done;
+ }
+
+ /* reset helper->xml_out_cur_off */
+ helper->xml_out_cur_off = 0;
+
+ /* render children */
+ if ((helper->xml_in_cur = switch_xml_find_child(globals.templates_tag, "template", "name", helper->next_template_name))) {
+ helper->next_template_name = "";
+ status = xml_odbc_render_children(helper);
+ if (!switch_strlen_zero(helper->next_template_name)) goto reset;
+ } else {
+ helper->next_template_name = "not-found";
+ goto reset;
+ }
+
+ goto done;
+
+ reset:
+ status = xml_odbc_render_template(helper);
+
+ done:
+ return status;
+}
+
+static switch_xml_t xml_odbc_search(const char *section, const char *tag_name, const char *key_name, const char *key_value, switch_event_t *event, void *user_data)
+{
+ xml_binding_t *binding = (xml_binding_t *) user_data;
+ switch_event_header_t *hi;
+ switch_uuid_t uuid;
+ char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
+ char *xml_char; /* a char representation of the generated xml that will be written to temp file */
+ switch_memory_pool_t *pool; /* for easy memory cleanup */
+ xml_odbc_session_helper_t helper; /* this helper is sent through all other functions to generate the xml */
+ switch_xml_t xml_out = NULL; /* the xml that will be returned by this function */
+ char filename[512] = ""; /* the temporary, uuid-based filename */
+ int fd;
+
+ if (!binding) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No bindings... sorry bud returning now\n");
+ return NULL;
+ }
+
+ /* create a new memory pool for this session and put it in the helper */
+ switch_core_new_memory_pool(&pool);
+ helper.pool = pool;
+
+ /* set the render_template_count to 0 */
+ helper.render_template_count = 0;
+
+ /* set the default template to render */
+ helper.next_template_name = "default";
+
+ /* add some headers to event and put it in the helper */
+ switch_event_add_header_string(event, SWITCH_STACK_TOP, "section", switch_str_nil(section));
+ switch_event_add_header_string(event, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name));
+ switch_event_add_header_string(event, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name));
+ switch_event_add_header_string(event, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value));
+ helper.event = event;
+
+ /* debug print all switch_event_t event headers */
+ if (globals.debug == SWITCH_TRUE) {
+ if ((hi = event->headers)) {
+ for (; hi; hi = hi->next) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "DEBUG in xml_odbc_search, header [%s]=[%s]\n", hi->name, hi->value);
+ }
+ }
+ }
+
+ /* render xml to helper.xml_out */
+ if (xml_odbc_render_template(&helper) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Something went horribly wrong while generating an XML template!\n");
+ goto cleanup;
+ }
+
+ /* dump the generated file to *xml_char */
+ xml_char = switch_xml_toxml(helper.xml_out, SWITCH_FALSE);
+
+ /* debug dump the generated xml to console */
+ if (globals.debug == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Debug dump of generated XML:\n%s", xml_char);
+ }
+
+ /* generate a new uuid */
+ switch_uuid_get(&uuid);
+ switch_uuid_format(uuid_str, &uuid);
+
+ /* generate a temporary filename to store the generated xml in */
+ // use switch_core_sprintf here ?!?!
+ switch_snprintf(filename, sizeof(filename), "%s%s.tmp.xml", SWITCH_GLOBAL_dirs.temp_dir, uuid_str);
+
+ /* open (temporary) file */
+ if ((fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR| S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) < 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening temp file [%s]!\n", filename);
+ switch_safe_free(xml_char);
+ goto cleanup;
+ }
+
+ /* dump xml_char to (temporary) file */
+ if (!write(fd, xml_char, (unsigned) strlen(xml_char))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error writing generated XML to temp file [%s]!\n", filename);
+ close(fd);
+ switch_safe_free(xml_char);
+ goto cleanup;
+ }
+
+ /* close (temporary) file */
+ close(fd);
+ fd = -1;
+
+ /* free xml_char */
+ switch_safe_free(xml_char);
+
+ /* copy the (temporary) file to switch_xml_t xml_out - this should never go wrong */
+ if (!(xml_out = switch_xml_parse_file(filename))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Parsing Result!\n");
+ }
+
+ /* debug by leaving the file behind for review */
+ if (globals.keep_files_around == SWITCH_TRUE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Generated XML is in [%s]\n", filename);
+ } else {
+ if (unlink(filename) != 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Generated XML file [%s] delete failed\n", filename);
+ }
+ }
+
+ cleanup:
+ switch_xml_free(helper.xml_out);
+ switch_core_destroy_memory_pool(&pool);
+ /* free helper ?? */
+ /* free filename */
+
+ //done:
+ return xml_out;
+}
+
+
+static switch_status_t do_config()
+{
+ char *cf = "xml_odbc.conf";
+ switch_xml_t cfg, xml, settings_tag, templates_tag, param;
+ xml_binding_t *binding = NULL;
+
+ switch_status_t status = SWITCH_STATUS_FALSE;
+
+ char *odbc_user = NULL;
+ char *odbc_pass = NULL;
+ int binding_count = 0;
+
+ if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
+ return SWITCH_STATUS_TERM;
+ }
+
+ if (!(settings_tag = switch_xml_child(cfg, "settings"))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing <settings> tag!\n");
+ goto done;
+ }
+
+ if (!(templates_tag = switch_xml_child(cfg, "templates"))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing <templates> tag!\n");
+ goto done;
+ }
+
+ /* copy the templates to globals.templates_tag */
+ memcpy(&globals.templates_tag, &templates_tag, sizeof(templates_tag));
+
+ /* set a default globals.max_render_template_count to avoid loops in render_template */
+ globals.max_render_template_count = 32;
+
+ /* get all the settings */
+ for (param = switch_xml_child(settings_tag, "param"); param; param = param->next) {
+ char *var = NULL;
+ char *val = NULL;
+
+ var = (char *) switch_xml_attr_soft(param, "name");
+ val = (char *) switch_xml_attr_soft(param, "value");
+
+ if (!strcasecmp(var, "binding") && !switch_strlen_zero(val)) {
+ if (!(binding = malloc(sizeof(*binding)))) {
+ goto done;
+ }
+ memset(binding, 0, sizeof(*binding));
+ binding->bindings = strdup(val); // use switch_core_strdup globals.pool for this ?
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Binding XML Search Function [%s]\n", val);
+
+ switch_xml_bind_search_function(xml_odbc_search, switch_xml_parse_section_string(binding->bindings), binding);
+
+ binding_count++;
+ binding = NULL;
+
+ // change odbc-dsn to something like odbc-handle with name=default and dsn=a:b:c
+ // so a linked list or something is created with multiple handles that can be
+ // selected from xml-odbc-do name=query !!! that would be COOL !!!
+ } else if (!strcasecmp(var, "odbc-dsn") && !switch_strlen_zero(val)) {
+ globals.odbc_dsn = switch_core_strdup(globals.pool, val);
+ if ((odbc_user = strchr(globals.odbc_dsn, ':'))) {
+ *odbc_user++ = '\0';
+ if ((odbc_pass = strchr(odbc_user, ':'))) {
+ *odbc_pass++ = '\0';
+ }
+ }
+ } else if (!strcasecmp(var, "debug") && !switch_strlen_zero(val)) {
+ if (!strcasecmp(val, "true") || !strcasecmp(val, "on")) {
+ globals.debug = SWITCH_TRUE;
+ } else {
+ globals.debug = SWITCH_FALSE;
+ }
+ } else if (!strcasecmp(var, "keep-files-around") && !switch_strlen_zero(val)) {
+ if (!strcasecmp(val, "true") || !strcasecmp(val, "on")) {
+ globals.keep_files_around = SWITCH_TRUE;
+ } else {
+ globals.keep_files_around = SWITCH_FALSE;
+ }
+ }
+ }
+
+ /* check if any bindings were done */
+ if (binding_count == 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No bindings are set, is this really what you want?\n");
+ }
+
+ /* check if odbc_dsn is set */
+ if (!globals.odbc_dsn) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No odbc-dsn setting is set!\n");
+ goto done;
+ }
+
+ /* make odbc connection */
+ if (switch_odbc_available() && globals.odbc_dsn) {
+
+ if (!(globals.master_odbc = switch_odbc_handle_new(globals.odbc_dsn, odbc_user, odbc_pass))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Database!\n");
+ status = SWITCH_STATUS_FALSE;
+ goto done;
+ }
+
+ if (switch_odbc_handle_connect(globals.master_odbc) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Database!\n");
+ status = SWITCH_STATUS_FALSE;
+ goto done;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected ODBC DSN: %s\n", globals.odbc_dsn);
+ }
+
+ /* all went fine */
+ status = SWITCH_STATUS_SUCCESS;
+
+ done:
+ switch_xml_free(xml);
+ return status;
+}
+
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_xml_odbc_load)
+{
+ switch_api_interface_t *xml_odbc_api_interface;
+
+ switch_core_new_memory_pool(&globals.pool);
+ switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, globals.pool);
+
+ if (!switch_odbc_available()) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "You must have ODBC support in FreeSWITCH to use this module\n");
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "\t./configure --enable-core-odbc-support\n");
+ return SWITCH_STATUS_FALSE;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "XML ODBC module loading...\n");
+
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+
+ if (do_config() != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to load xml_odbc config file\n");
+ return SWITCH_STATUS_FALSE;
+ }
+
+ SWITCH_ADD_API(xml_odbc_api_interface, "xml_odbc", "XML ODBC", xml_odbc_function, XML_ODBC_SYNTAX);
+ switch_console_set_complete("add xml_odbc debug_on");
+ switch_console_set_complete("add xml_odbc debug_off");
+ switch_console_set_complete("add xml_odbc render_template");
+
+ /* indicate that the module should continue to be loaded */
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_odbc_shutdown)
+{
+ switch_odbc_handle_disconnect(globals.master_odbc);
+ switch_odbc_handle_destroy(&globals.master_odbc);
+
+ switch_xml_unbind_search_function_ptr(xml_odbc_search);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/structure.mysql.sql
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/structure.mysql.sql (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/structure.mysql.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/structure.mysql.sql (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/structure.mysql.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,71 @@
+CREATE TABLE `dir_domains` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `name` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `dir_domains_name` (`name`)
+);
+
+CREATE TABLE `dir_domain_params` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `dir_domain_id` INT NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `value` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ FOREIGN KEY (`dir_domain_id`) REFERENCES `dir_domains` (`id`)
+);
+
+CREATE TABLE `dir_domain_variables` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `dir_domain_id` INT NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `value` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ FOREIGN KEY (`dir_domain_id`) REFERENCES `dir_domains` (`id`)
+);
+
+CREATE TABLE `dir_groups` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `name` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`)
+);
+
+CREATE TABLE `dir_groups_users` (
+ `dir_group_id` INT NOT NULL,
+ `dir_user_id` INT NOT NULL,
+ FOREIGN KEY (`dir_group_id`) REFERENCES `dir_groups` (`id`),
+ FOREIGN KEY (`dir_user_id`) REFERENCES `dir_users` (`id`)
+);
+
+CREATE TABLE `dir_users` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `dir_domain_id` INT NOT NULL,
+ `enabled` TINYINT(1) NOT NULL,
+ `username` VARCHAR(255) NOT NULL,
+ `cidr` VARCHAR(255),
+ `mailbox` VARCHAR(255),
+ `number-alias` VARCHAR(255),
+ PRIMARY KEY (`id`),
+ KEY `dir_users_username` (`username`),
+ KEY `dir_users_cidr` (`cidr`),
+ KEY `dir_users_mailbox` (`mailbox`),
+ KEY `dir_users_number-alias` (`number-alias`),
+ FOREIGN KEY (`dir_domain_id`) REFERENCES `dir_domains` (`id`)
+);
+
+CREATE TABLE `dir_user_params` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `dir_user_id` INT NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `value` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ FOREIGN KEY (`dir_user_id`) REFERENCES `dir_users` (`id`)
+);
+
+CREATE TABLE `dir_user_variables` (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `dir_user_id` INT NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `value` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ FOREIGN KEY (`dir_user_id`) REFERENCES `dir_users` (`id`)
+);
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/testdata.mysql.sql
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/testdata.mysql.sql (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/testdata.mysql.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/testdata.mysql.sql (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/testdata.mysql.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+INSERT INTO `dir_domains` (`id`, `name`) VALUES (1, '172.31.0.76');
+INSERT INTO `dir_domain_params` (`id`, `dir_domain_id`, `name`, `value`) VALUES (1, 1, 'dom_param_name', 'dom_param_value');
+INSERT INTO `dir_domain_variables` (`id`, `dir_domain_id`, `name`, `value`) VALUES (1, 1, 'dom_variable_name', 'dom_variable_value');
+INSERT INTO `dir_groups` (`id`, `name`) VALUES (1, 'prepay'), (2, 'annoying_customers');
+INSERT INTO `dir_groups_users` (`dir_group_id`, `dir_user_id`) VALUES (1, 1), (2, 1);
+INSERT INTO `dir_users` (`id`, `dir_domain_id`, `username`, `enabled`, `cidr`, `mailbox`, `number-alias`) VALUES (1, 1, 'someuser', 1, NULL, 'test@test.com', '1234');
+INSERT INTO `dir_user_params` (`id`, `dir_user_id`, `name`, `value`) VALUES (1, 1, 'password', 'topsecret'), (2, 1, 'vm-password', '0000');
+INSERT INTO `dir_user_variables` (`id`, `dir_user_id`, `name`, `value`) VALUES (1, 1, 'accountcode', '1234'), (2, 1, 'user_context', 'default'), (3, 1, 'vm_extension', '1234');
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc.conf.xml
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc.conf.xml (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc.conf.xml (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+<configuration name="xml_odbc.conf" description="XML ODBC Configuration">
+
+ <settings>
+ <param name="binding" value="directory"/>
+ <param name="odbc-dsn" value="freeswitch:freeswitch:secret"/>
+ <param name="debug" value="true"/>
+ <param name="keep_files_around" value="true"/>
+ </settings>
+
+ <templates>
+
+ <template name="default">
+ <xml-odbc-do name="break-to" value="${section}"/>
+ </template>
+
+ <template name="directory"> -->
+ <xml-odbc-do name="check-event-header" if-name="purpose">
+ <!-- catches purpose gateways and network-list (any more?) -->
+ <xml-odbc-do name="break-to" value="directory-${purpose}"/>
+ </xml-odbc-do>
+ <xml-odbc-do name="break-to" value="directory-user"/>
+ </template>
+
+ <template name="configuration">
+ <xml-odbc-do name="check-event-header" if-name="tag_name" if-value="configuration">
+ <xml-odbc-do name="check-event-header" if-name="key_name" if-value="name">
+ <xml-odbc-do name="break-to" value="${key_value}" on-no-template-break-to="simple-configuration"/>
+ </xml-odbc-do>
+ </xml-odbc-do>
+ </template>
+
+ <template name="simple_configuration">
+ <document type="freeswitch/xml">
+ <configuration name="${key_value}">
+ <settings>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ cnf_settings
+ WHERE
+ hostname = '${FreeSWITCH-Hostname}' AND
+ section = '${section}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </settings>
+ </configuration>
+ </document>
+ </template>
+
+ <template name="not_found">
+ <document type="freeswitch/xml">
+ <section name="result">
+ <result status="not found"/>
+ </section>
+ </document>
+ </template>
+
+ <X-PRE-PROCESS cmd="include" data="xml_odbc_templates/*.xml"/>
+
+ </templates>
+
+</configuration>
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates)
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/console.conf.xml
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/console.conf.xml (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/console.conf.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/console.conf.xml (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/console.conf.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+<include>
+ <template name="console.conf">
+ <document type="freeswitch/xml">
+ <configuration name="console.conf" description="Console Logger">
+ <mappings>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ cnf_console_mappings
+ WHERE
+ hostname = '${FreeSWITCH-Hostname}';">
+ <mapping name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </mappings>
+ <settings>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ cnf_settings
+ WHERE
+ hostname = '${FreeSWITCH-Hostname}' AND
+ section = '${section}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </settings>
+ </configuration>
+ </document>
+ </template>
+</include>
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/dialplan.xml
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/dialplan.xml (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/dialplan.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/dialplan.xml (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/dialplan.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,5 @@
+<include> <!-- NOT FINISHED ! -->
+ <template name="dialplan">
+ <xml-odbc-do name="break-to" value="not-found"/>
+ </template>
+</include>
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory-user.xml
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory-user.xml (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory-user.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory-user.xml (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory-user.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,91 @@
+<include>
+ <template name="directory-user">
+ <document type="freeswitch/xml">
+ <xml-odbc-do name="set-event-header" if-name="key" if-value="id" to-value="username"/>
+ <xml-odbc-do name="query" on-empty-result-break-to="not-found" value="
+ SELECT
+ dir_domains.id AS domain_id,
+ dir_users.id AS user_id,
+ dir_users.cidr,
+ dir_users.mailbox,
+ dir_users.`number-alias`
+ FROM
+ dir_domains,
+ dir_users
+ WHERE
+ dir_users.${key} = '${user}' AND
+ dir_domains.name = '${domain}' AND
+ dir_users.dir_domain_id = dir_domains.id AND
+ dir_users.enabled = '1';"/>
+ <section name="directory">
+ <domain name="${domain}">
+ <params>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ dir_domain_params
+ WHERE
+ dir_domain_id = '${domain_id}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </params>
+ <variables>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ dir_domain_variables
+ WHERE
+ dir_domain_id = '${domain_id}';">
+ <variable name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </variables>
+ <groups>
+ <group name="default">
+ <users>
+ <user id="${user}" mailbox="${mailbox}" cidr="${cidr}" number-alias="${number-alias}">
+ <params>
+ <xml-odbc-do name="query" on-empty-result-break-to="not-found" value="
+ SELECT
+ name, value
+ FROM
+ dir_user_params
+ WHERE
+ dir_user_id = '${user_id}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </params>
+ <variables>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ dir_user_variables
+ WHERE
+ dir_user_id = '${user_id}';">
+ <variable name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </variables>
+ </user>
+ </users>
+ </group>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name AS group_name
+ FROM
+ dir_groups,
+ dir_groups_users
+ WHERE
+ dir_groups_users.dir_group_id = dir_groups.id AND
+ dir_user_id = '${user_id}';">
+ <group name="${group_name}">
+ <user id="${user}" type="pointer"/>
+ </group>
+ </xml-odbc-do>
+ </groups>
+ </domain>
+ </section>
+ </document>
+ </template>
+</include>
Deleted: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory_swk.xml
Copied: freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory_swk.xml (from rev 14471, freeswitch/trunk/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory_swk.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory_swk.xml (rev 0)
+++ freeswitch/branches/seven/contrib/mod/xml_int/mod_xml_odbc/xml_odbc_templates/directory_swk.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,93 @@
+<include>
+ <template name="directory_swk" description="based on swk's shipment sql">
+ <document type="freeswitch/xml">
+ <xml-odbc-do name="replace_header_value" when-name="key" when-value="id" value="username"/>
+ <xml-odbc-do name="query" on-empty-result-break-to="not_found" value="
+ SELECT
+ domains.uid AS domains_uid,
+ users.uid AS users_uid,
+ users.cidr,
+ users.mailbox
+ FROM
+ domains,
+ users
+ WHERE
+ users.${key} = '${user}' AND
+ domains.name = '${domain}' AND
+ users.domains_uid = domains.uid AND
+ domains.enabled = '1' AND
+ users.enabled = '1';"/>
+ <section name="directory">
+ <domain name="${domain}">
+ <params>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ domain_params
+ WHERE
+ domains_uid = '${domains_uid}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </params>
+ <variables>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ domain_variables
+ WHERE
+ domains_uid = '${domains_uid}';">
+ <variable name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </variables>
+ <groups>
+ <group name="default">
+ <users>
+ <user id="${user}" mailbox="${mailbox}" cidr="${cidr}">
+ <params>
+ <xml-odbc-do name="query" on-empty-result-break-to="not_found" value="
+ SELECT
+ name, value
+ FROM
+ user_params
+ WHERE
+ users_uid = '${users_uid}';">
+ <param name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </params>
+ <variables>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name, value
+ FROM
+ user_variables
+ WHERE
+ users_uid = '${users_uid}';">
+ <variable name="${name}" value="${value}"/>
+ </xml-odbc-do>
+ </variables>
+ </user>
+ </users>
+ </group>
+ <xml-odbc-do name="query" value="
+ SELECT
+ name AS group_name
+ FROM
+ groups,
+ group_members
+ WHERE
+ group_members.groups_uid = groups.uid AND
+ users_uid = '${users_uid}';">
+ <group name="${group_name}">
+ <users>
+ <user id="${user}" type="pointer"/>
+ </users>
+ </group>
+ </xml-odbc-do>
+ </groups>
+ </domain>
+ </section>
+ </document>
+ </template>
+</include>
Copied: freeswitch/branches/seven/contrib/mrene (from rev 14471, freeswitch/trunk/contrib/mrene)
Copied: freeswitch/branches/seven/contrib/mrene/fshost (from rev 14471, freeswitch/trunk/contrib/mrene/fshost)
Deleted: freeswitch/branches/seven/contrib/mrene/fshost/Makefile
Copied: freeswitch/branches/seven/contrib/mrene/fshost/Makefile (from rev 14471, freeswitch/trunk/contrib/mrene/fshost/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/fshost/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/fshost/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+CC=gcc
+FS_PATH=../../../
+FS_INCLUDES=-I$(FS_PATH)/src/include -I$(FS_PATH)/libs/apr/include -I$(FS_PATH)/libs/libteletone/src
+FS_LDFLAGS = -L$(FS_PATH)/.libs -lfreeswitch
+CFLAGS=-ggdb3 $(FS_INCLUDES) -Wall -Werror
+LIBS=$(FS_LDFLAGS)
+
+all: fshost
+
+clean:
+ rm -rf fshost fshost.dSYM
+
+fshost: main.c
+ $(CC) -o fshost main.c $(CFLAGS) $(LIBS)
Deleted: freeswitch/branches/seven/contrib/mrene/fshost/main.c
Copied: freeswitch/branches/seven/contrib/mrene/fshost/main.c (from rev 14471, freeswitch/trunk/contrib/mrene/fshost/main.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/fshost/main.c (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/fshost/main.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,98 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Mathieu Rene <mathieu.rene@gmail.com>
+ *
+ *
+ * fshost - Example on how to host freeswitch within your own programs
+ *
+ */
+
+#include <stdio.h>
+#include <switch.h>
+
+int main(int argc, char *argv[])
+{
+ switch_core_flag_t flags = SCF_USE_SQL;
+ const char *err = NULL;
+ switch_bool_t console = SWITCH_TRUE;
+ switch_status_t destroy_status;
+ int ret = 0;
+
+ /* Initialize libs & globals */
+ printf("Initializing globals...\n");
+ switch_core_setrlimits();
+ switch_core_set_globals();
+
+ /* If you need to override configuration directories, you need to change them in the SWITCH_GLOBAL_dirs global structure */
+ printf("Initializing core...\n");
+ /* Initialize the core and load modules, that will startup FS completely */
+ if (switch_core_init_and_modload(flags, console, &err) != SWITCH_STATUS_SUCCESS) {
+ fprintf(stderr, "Failed to initialize FreeSWITCH's core: %s\n", err);
+ return 1;
+ }
+
+ printf("Everything OK, Entering runtime loop.\n");
+
+ fflush(stdout);
+
+ /* Go into the runtime loop. If the argument is true, this basically sets runtime.running = 1 and loops while that is set
+ * If its false, it initializes the libedit for the console, then does the same thing
+ */
+ switch_core_runtime_loop(!console);
+
+ /* When the runtime loop exits, its time to shutdown */
+ destroy_status = switch_core_destroy();
+
+ /* If we get SWITCH_STATUS_RESTART, it means the core received an fsctl shutdown restart command */
+ if (destroy_status == SWITCH_STATUS_RESTART) {
+ char buf[1024] = "";
+ int i = 0;
+
+ switch_assert(argv[0]);
+ switch_sleep(1000000);
+ ret = (int)execv(argv[0], argv);
+ fprintf(stderr, "Restart Failed [%s] resorting to plan b\n", strerror(errno));
+
+ for(i = 0; i < argc; i++) {
+ switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s ", argv[i]);
+ }
+
+ ret = system(buf);
+ }
+
+ return ret;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/mrene/textmate (from rev 14471, freeswitch/trunk/contrib/mrene/textmate)
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle)
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets)
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_API.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_API.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_API.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_API.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_API.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>SWITCH_ADD_API(api_interface, "${1:app name}", "${2:description}",${3:function ptr}, "${4:syntax}");
+</string>
+ <key>name</key>
+ <string>SWITCH_ADD_API</string>
+ <key>tabTrigger</key>
+ <string>addapi</string>
+ <key>uuid</key>
+ <string>63A39832-470E-4839-8098-4CC537FAA46D</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_APP.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_APP.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_APP.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_APP.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_ADD_APP.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>SWITCH_ADD_APP(app_interface, "${1:name}", "${2:short description}", "${3:long description}", ${4:function}, "${5:syntax}", ${6:SAF_NONE});
+</string>
+ <key>name</key>
+ <string>SWITCH_ADD_APP</string>
+ <key>tabTrigger</key>
+ <string>addapp</string>
+ <key>uuid</key>
+ <string>1D16269D-A544-4909-867E-70028ED7961B</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_CONFIG_ITEM.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_CONFIG_ITEM.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_CONFIG_ITEM.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_CONFIG_ITEM.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_CONFIG_ITEM.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>SWITCH_CONFIG_ITEM("${1:key}", SWITCH_CONFIG_${2:}, 0, &${3:globals.item}, (void*)$4, ${5:NULL}, "${6:syntax}", "${7:documentation}")</string>
+ <key>name</key>
+ <string>SWITCH_CONFIG_ITEM</string>
+ <key>tabTrigger</key>
+ <string>configitem</string>
+ <key>uuid</key>
+ <string>154CD9B8-6383-41C1-9F6E-A574AC6867D2</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_FALSE.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_FALSE.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_FALSE.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_FALSE.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_FALSE.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>SWITCH_STATUS_FALSE</string>
+ <key>name</key>
+ <string>SWITCH_STATUS_FALSE</string>
+ <key>tabTrigger</key>
+ <string>ssf</string>
+ <key>uuid</key>
+ <string>19295878-37A1-4234-8035-38DA07E17CAA</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_SUCCESS.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_SUCCESS.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_SUCCESS.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_SUCCESS.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/SWITCH_STATUS_SUCCESS.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>SWITCH_STATUS_SUCCESS</string>
+ <key>name</key>
+ <string>SWITCH_STATUS_SUCCESS</string>
+ <key>tabTrigger</key>
+ <string>sss</string>
+ <key>uuid</key>
+ <string>3F544B00-2D0B-4C60-804E-EF63C609E7D8</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/stream-write_function.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/stream-write_function.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/stream-write_function.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/stream-write_function.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/stream-write_function.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>${1:stream}->write_function($1, "$2",$3);
+$0</string>
+ <key>name</key>
+ <string>stream->write_function</string>
+ <key>tabTrigger</key>
+ <string>streamw</string>
+ <key>uuid</key>
+ <string>EC0B951A-D6C9-4137-AB5E-0DBA1D666B5A</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_get_channel.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_get_channel.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_get_channel.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_get_channel.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_get_channel.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>if (${2:session} && (${1:channel} = switch_core_session_get_channel(${2:session}))) {
+ $0
+}</string>
+ <key>name</key>
+ <string>switch_core_session_get_channel</string>
+ <key>tabTrigger</key>
+ <string>getchan</string>
+ <key>uuid</key>
+ <string>8107A427-59E7-4FB0-AA1B-28F4A15A2B63</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_locate.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_locate.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_locate.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_locate.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_core_session_locate.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>if ((${1:session} = switch_core_session_locate($2)) {
+ $0
+ switch_core_session_rwunlock($1);
+}</string>
+ <key>name</key>
+ <string>switch_core_session_locate</string>
+ <key>tabTrigger</key>
+ <string>slocate</string>
+ <key>uuid</key>
+ <string>8940F795-2A0A-411F-AB98-48DEAB07AD69</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_log_printf.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_log_printf.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_log_printf.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_log_printf.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_log_printf.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_${1:DEBUG}, "$2"$3);
+</string>
+ <key>name</key>
+ <string>switch_log_printf</string>
+ <key>tabTrigger</key>
+ <string>log</string>
+ <key>uuid</key>
+ <string>CCE4CE1C-2E71-4EDB-9733-1CDE38FA831E</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_lock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_lock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_lock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_lock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_lock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_mutex_lock($1);</string>
+ <key>name</key>
+ <string>switch_mutex_lock</string>
+ <key>tabTrigger</key>
+ <string>mlock</string>
+ <key>uuid</key>
+ <string>BC5BFA60-002A-40F2-A6FE-72CEE4AAE330</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_unlock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_unlock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_unlock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_unlock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_mutex_unlock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_mutex_unlock($1);</string>
+ <key>name</key>
+ <string>switch_mutex_unlock</string>
+ <key>tabTrigger</key>
+ <string>munlock</string>
+ <key>uuid</key>
+ <string>C41EC675-F09C-4596-8C14-662403B27D54</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_rdlock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_rdlock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_rdlock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_rdlock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_rdlock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_thread_rwlock_rdlock($1);</string>
+ <key>name</key>
+ <string>switch_thread_rwlock_rdlock</string>
+ <key>tabTrigger</key>
+ <string>rdlock</string>
+ <key>uuid</key>
+ <string>FB9588B8-3540-41F6-BC2D-7A6F3083BDA4</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_tryrdlock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_tryrdlock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_tryrdlock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_tryrdlock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_tryrdlock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>if (switch_thread_rwlock_tryrdlock($1) != SWITCH_STATUS_SUCCESS) {
+ $2
+}
+$0</string>
+ <key>name</key>
+ <string>switch_thread_rwlock_tryrdlock</string>
+ <key>tabTrigger</key>
+ <string>tryrdlock</string>
+ <key>uuid</key>
+ <string>091C4224-A49A-4C68-AEA1-A25FEEAB0DE8</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_unlock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_unlock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_unlock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_unlock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_unlock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_thread_rwlock_unlock($1);</string>
+ <key>name</key>
+ <string>switch_thread_rwlock_unlock</string>
+ <key>tabTrigger</key>
+ <string>rwunlock</string>
+ <key>uuid</key>
+ <string>D7C796FB-389A-4D1B-A64B-BCAE45B4CEAF</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_wrlock.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_wrlock.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_wrlock.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_wrlock.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/switch_thread_rwlock_wrlock.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>switch_thread_rwlock_wrlock($1);</string>
+ <key>name</key>
+ <string>switch_thread_rwlock_wrlock</string>
+ <key>tabTrigger</key>
+ <string>wrlock</string>
+ <key>uuid</key>
+ <string>86B6BF3F-C2C5-413C-A2FD-58D02D4B0AC0</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/untitled.tmSnippet
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/untitled.tmSnippet (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/untitled.tmSnippet) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/untitled.tmSnippet (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/Snippets/untitled.tmSnippet 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>content</key>
+ <string>if (switch_thread_rwlock_trywrlock($1) != SWITCH_STATUS_SUCCESS) {
+ $2
+}
+$0</string>
+ <key>name</key>
+ <string>switch_thread_rwlock_trywrlock</string>
+ <key>tabTrigger</key>
+ <string>trywrlock</string>
+ <key>uuid</key>
+ <string>40D09664-79B0-4983-84FB-8007DD80E0D5</string>
+</dict>
+</plist>
Deleted: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/info.plist
Copied: freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/info.plist (from rev 14471, freeswitch/trunk/contrib/mrene/textmate/FreeSWITCH.tmbundle/info.plist) (0 => 14472)
--- freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/info.plist (rev 0)
+++ freeswitch/branches/seven/contrib/mrene/textmate/FreeSWITCH.tmbundle/info.plist 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>FreeSWITCH</string>
+ <key>ordering</key>
+ <array>
+ <string>CCE4CE1C-2E71-4EDB-9733-1CDE38FA831E</string>
+ <string>40D09664-79B0-4983-84FB-8007DD80E0D5</string>
+ <string>3F544B00-2D0B-4C60-804E-EF63C609E7D8</string>
+ <string>19295878-37A1-4234-8035-38DA07E17CAA</string>
+ <string>BC5BFA60-002A-40F2-A6FE-72CEE4AAE330</string>
+ <string>C41EC675-F09C-4596-8C14-662403B27D54</string>
+ <string>8940F795-2A0A-411F-AB98-48DEAB07AD69</string>
+ <string>63A39832-470E-4839-8098-4CC537FAA46D</string>
+ <string>091C4224-A49A-4C68-AEA1-A25FEEAB0DE8</string>
+ <string>D7C796FB-389A-4D1B-A64B-BCAE45B4CEAF</string>
+ <string>86B6BF3F-C2C5-413C-A2FD-58D02D4B0AC0</string>
+ <string>FB9588B8-3540-41F6-BC2D-7A6F3083BDA4</string>
+ <string>1D16269D-A544-4909-867E-70028ED7961B</string>
+ <string>8107A427-59E7-4FB0-AA1B-28F4A15A2B63</string>
+ <string>154CD9B8-6383-41C1-9F6E-A574AC6867D2</string>
+ </array>
+ <key>uuid</key>
+ <string>5A009C17-72DB-453A-8BF9-02AFD085B5B8</string>
+</dict>
+</plist>
Copied: freeswitch/branches/seven/contrib/nmartin (from rev 14471, freeswitch/trunk/contrib/nmartin)
Copied: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory (from rev 14471, freeswitch/trunk/contrib/nmartin/dial_by_name_directory)
Deleted: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/README
Copied: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/README (from rev 14471, freeswitch/trunk/contrib/nmartin/dial_by_name_directory/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/README (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,64 @@
+Dial By Name Directory
+Nik Martin
+For support, contact me at freeswitch@servercorps.com
+
+=======================
+Nostly From the Original Code:
+Original Code Author: John Wehle
+Date: November 6, 2008
+Copyright (c) 2008 Feith Systems and Software, Inc.
+All Rights Reserved
+=======================
+
+
+================================================================================
+Copyright (c) 2008 Feith Systems and Software, Inc.
+and
+Copyright (c) 2009 Nik Martin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+The original authors of this work, John Wehle, then Nik Martin, must be credited
+as the original authors of this work.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+================================================================================
+
+dial_by_name_directory.xml is a phrase macro for the beginning of the directory app.
+dial_by_name_directory.js is the directory app itself.
+
+Place dial_by_name_directory somewhere in conf/lang/en/ maybe in a folder named directory?
+edit en.xml in conf/lang/en to include the directory/ directory (uh-oh, bad name)
+
+drop dial_by_name_directpry.js in scripts/
+
+in the dial plan, execute the dial by name directory like:
+
+<extension name="dial_by_name">
+ <condition field="destination_number" expression="^6000$">
+ <action application="javascript" data="dial_by_name_directory.js" />
+ </condition>
+</extension>
+
+or, from an IVR:
+
+<entry action="menu-exec-app" digits="9" param="javascript dial_by_name_directory.js"/>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.js
Copied: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.js (from rev 14471, freeswitch/trunk/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.js (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,215 @@
+/**
+=======================
+Mostly From the Original Code aadir.js:
+Original Code Author: John Wehle
+Date: November 6, 2008
+Copyright (c) 2008 Feith Systems and Software, Inc.
+All Rights Reserved
+=======================
+
+
+================================================================================
+Copyright (c) 2008 Feith Systems and Software, Inc.
+and
+Copyright (c) 2009 Nik Martin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+The original authors of this work, John Wehle, then Nik Martin, must be credited
+as the original authors of this work.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+================================================================================
+*/
+
+var digitTimeOut = 3000;
+var interDigitTimeOut = 1000;
+var absoluteTimeOut = 10000;
+var base_dir = session.getVariable ("base_dir");
+var domain = session.getVariable ("domain");
+var voicemail_path = base_dir + "/storage/voicemail/default/" + domain + "/";
+var file_exts = [ ".wav", ".mp3" ];
+var extRE = /^1[0-9][0-9][0-9]$/g;
+var operator = "operator";
+var directory;
+
+var translations = [ "0",
+ "QZ", "ABC", "DEF",
+ "GHI", "JKL", "MNO",
+ "PQRS", "TUV", "WXYZ" ];
+var extension = "";
+var dtmf_digits = "";
+
+
+/**
+ * Build an array of [last_namefirst_name,extension].
+ * matches will then start at last name and go until
+ * a unique match emerges:
+ * martinnik and martinmatt match until the a in matt and i in nik
+ *
+ * @return the image at the specified URL
+ */
+
+function build_directory_list() {
+ var i;
+ var name;
+ var number;
+ var dir = apiExecute ("xml_locate", "directory domain name " + domain);
+ var re = /\s+$/g;
+ var length = dir.search (re);
+ if (length == -1)
+ length = dir.length;
+ dir = dir.substring (0, length);
+ var xdir = new XML (dir);
+ directory = new Array ();
+ i = 0;
+ re = /[^A-Z0-9\s]/gi;
+ for each (var variables in xdir.groups.group.users.user.variables) {
+
+ name = "";
+ number = "";
+ for each (variable in variables.variable) {
+ if (variable.@name.toString() == "effective_caller_id_name")
+ name = variable.@value.toString();
+
+ //clean up the name string, letters and numbers only
+ name = name.replace (re, "");
+ if (variable.@name.toString() == "effective_caller_id_number")
+ number = variable.@value.toString();
+ }
+ if (name.length == 0 || number.length == 0 || number.search (extRE) == -1)
+ continue;
+ directory[i] = new Array (2);
+ //make the name look like LastnameFirstname
+ name = name.split(" ")[1] + name.split(" ")[0];
+ directory[i][0] = name;
+ directory[i][1] = number;
+ console_log ("debug", directory[i][0] + ":" + directory[i][1] + "\n");
+ i++;
+ }
+}
+
+function directory_lookup (digits) {
+ var i;
+ var match = "";
+ var pattern = "^";
+ var re;
+ if (digits.length && digits[0] == 0)
+ return 0;
+ for (i = 0; i < digits.length; i++) {
+ if (isNaN (parseInt (digits[i], 10)))
+ return -1;
+ //build a regex pattern to match against
+ pattern += "[" + translations[parseInt (digits[i], 10)] + "]";
+ console_log("debug", "pattern: " + pattern + "\n");
+ }
+ re = new RegExp (pattern, "i");
+ for (i = 0; i < directory.length; i++)
+ if (directory[i][0].search (re) != -1) {
+ if (! isNaN (parseInt (match, 10)))
+ return "";
+ match = directory[i][1];
+ }
+ if (isNaN (parseInt (match, 10)))
+ return -1;
+ return match;
+}
+function on_dtmf (session, type, obj, arg) {
+ if (type == "dtmf") {
+ dtmf_digits += obj.digit;
+ extension = directory_lookup (dtmf_digits)
+ return false;
+ }
+ return true;
+}
+function directory_prompt () {
+ var choice;
+ var index;
+ var repeat;
+ extension = "";
+ choice = "";
+ repeat = 0;
+ while (session.ready() && repeat < 3) {
+ /* play phrase - if digit keyed while playing callback will catch them*/
+ session.sayPhrase ("dial_by_name_directory", "#", "", on_dtmf, "");
+ choice = dtmf_digits;
+ while ( isNaN (parseInt (extension, 10)) ) {
+ if (! session.ready ())
+ return "";
+ dtmf_digits = session.getDigits (1, '#', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+ choice += dtmf_digits;
+ console_log ("debug", "choice: " + choice + "\n");
+ extension = directory_lookup(choice);
+ }
+ if (parseInt (extension, 10) >= 0)
+ break;
+ session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, "");
+ dtmf_digits = "";
+ extension = "";
+ choice = "";
+ repeat++;
+ session.flushDigits ();
+ }
+ return extension;
+}
+var choice = "";
+var fd;
+var i;
+var recorded_name;
+session.answer ();
+session.execute("sleep", "1000");
+console_log("info", "loading dial-by-name directory\n");
+build_directory_list();
+dtmf_digits = "";
+session.flushDigits ();
+choice = directory_prompt ();
+
+if (! session.ready ()) {
+ session.hangup();
+ exit();
+}
+
+//this must try to determine if the extension is a number, but it seems that
+//non-integer extension are ok in FS. Leftover from original code
+if ( isNaN (parseInt (choice, 10)) || parseInt (choice, 10) <= 0) {
+ session.execute ("transfer", operator + " XML default");
+ exit();
+}
+
+for (i = 0; i < file_exts.length; i++) {
+ recorded_name = voicemail_path + choice + "/recorded_name" + file_exts[i];
+ fd = new File (recorded_name);
+ if (fd.exists) {
+ session.streamFile (recorded_name);
+ break;
+ }
+//TODO: say <module_name> <say_type> <say_method> <text> << spell out the name if they have not recorded one yet
+
+}
+
+
+session.execute ("phrase", "spell," + choice);
+//TODO: prompt to see if they REALLY want this person, then go back up if not.
+
+session.execute ("transfer", choice + " XML features");
+exit();
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.xml
Copied: freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.xml (from rev 14471, freeswitch/trunk/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.xml (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/dial_by_name_directory/dial_by_name_directory.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+
+<macro name="dial_by_name_directory">
+ <input pattern="^(.*)$">
+ <match>
+ <action function="play-file" data="ivr/ivr-use_telephone_keypad.wav"/>
+ <!--<action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
+ <action function="play-file" data="ivr/ivr-spell_name.wav"/>
+ <action function="play-file" data="ivr/ivr-last_name_first.wav"/>
+ </match>
+ </input>
+ </macro>
+
+
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
Copied: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_address_book_dial)
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/README.txt
Copied: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/README.txt (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_address_book_dial/README.txt) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/README.txt (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/README.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,43 @@
+README
+
+For support, contact me at freeswitch@servercorps.com
+
+==============================================================
+Copyright (c) 2009 Nik Martin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+The original author of this work, Nik Martin, must be credited
+as the original author of this work.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+==============================================================
+
+
+Drop all files in ~/Library/Address Book Scripts
+
+Edit fsdial.py to set up your server information and phone number
+
+Start Address Book. You should now have a FS Dial entry on the popup menu on phone numbers now.
+
+These scripts depend on ESL libs to be loaded on the machine that the scripts run on. These should be
+built on a dev machice and loaded on the client machine in the proper locations (python libs)
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.py
Copied: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.py (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_address_book_dial/fsdial.py) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.py (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+
+#==============================================================
+#Copyright (c) 2009 Nik Martin
+#
+#Permission is hereby granted, free of charge, to any person
+#obtaining a copy of this software and associated documentation
+#files (the "Software"), to deal in the Software without
+#restriction, including without limitation the rights to use,
+#copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the
+#Software is furnished to do so, subject to the following
+#conditions:
+#
+#The above copyright notice and this permission notice shall be
+#included in all copies or substantial portions of the Software.
+#
+#The original author of this work, Nik Martin, must be credited
+#as the original author of this work.
+#
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+#OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+#NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+#WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+#FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#OTHER DEALINGS IN THE SOFTWARE.
+#
+#
+#==============================================================
+
+import string
+import sys
+from optparse import OptionParser
+from ESL import *
+
+
+def main(argv):
+ # change these to match your configuration
+ my_number = "1000" #@mydomain.com
+ server_addr = "fs.ip.add.ress"
+ server_port = "8021"
+ server_auth = "ClueCon"
+
+
+ try:
+
+ parser = OptionParser()
+ parser.add_option("-n", "--number", dest="number",
+ help="number to dial")
+
+ (options, args) = parser.parse_args()
+
+
+ if not options.number:
+ print "ERROR: destination number required"
+ sys.exit(2)
+
+ cmd = "api originate {ignore_early_media=true,origination_caller_id_number=" + options.number + ",effective_caller_id_number=" + my_number + "}user/" + my_number + " &transfer(" + options.number + " XML default)"
+ print cmd
+
+ con = ESLconnection(server_addr, server_port, server_auth)
+ #are we connected?
+
+ if con.connected:
+
+ e=con.sendRecv(cmd)
+ print e.getBody()
+
+ else:
+
+ print "Not Connected"
+ sys.exit(2)
+
+ except:
+ print "Unexpected error:", sys.exc_info()[0]
+ raise
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.scpt
Copied: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/fsdial.scpt (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_address_book_dial/fsdial.scpt)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/test.scpt
Copied: freeswitch/branches/seven/contrib/nmartin/osx_address_book_dial/test.scpt (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_address_book_dial/test.scpt)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/nmartin/osx_click2dial (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_click2dial)
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/README.txt
Copied: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/README.txt (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_click2dial/README.txt) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/osx_click2dial/README.txt (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/osx_click2dial/README.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,50 @@
+README
+
+Client Side Click2Dial
+
+For support, contact me at freeswitch@servercorps.com
+
+==============================================================
+Copyright (c) 2009 Nik Martin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+The original author of this work, Nik Martin, must be credited
+as the original author of this work.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+==============================================================
+
+Setup:
+
+Unzip Click2Dial.zip.
+
+Inside fs_dial.app, edit Contents/Resources/fsdial.py to set up your server information and phone number
+
+Import linkify.user.js into greasemonkey (http://www.greasespot.net/)
+
+Double Click fs_dial.app to register it as the handler for dial:// urls
+
+The greasemonkey script will linkify any text on a web page that looks like a phone number.
+You can edit the reg-ex inside the greasemonkey script to match different types of numbers.
+
+The fsdial.py script assumes you have a default context, and outbound calls should go to this context
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/click2dial.zip
Copied: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/click2dial.zip (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_click2dial/click2dial.zip)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/linkify.user.js
Copied: freeswitch/branches/seven/contrib/nmartin/osx_click2dial/linkify.user.js (from rev 14471, freeswitch/trunk/contrib/nmartin/osx_click2dial/linkify.user.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/nmartin/osx_click2dial/linkify.user.js (rev 0)
+++ freeswitch/branches/seven/contrib/nmartin/osx_click2dial/linkify.user.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,78 @@
+// FreeSWITCH Dial Linkify
+// Author: Nik Martin
+// License: MIT
+//
+//This script was taken from another script here: http://userscripts.org/scripts/show/1003
+//
+// Matches these patterns:
+// 800-555-1212
+// (800) 555-1212
+// (800)555-1212
+// 8005551212
+// Weak since it does any 10+ digit number
+// 800.555.1212
+// Tested with:
+// www.yellowpages.com
+// local.google.com
+// a9.com
+//
+// International calling sure would be neat
+// ==UserScript==
+// @name FreeSWITCH Dial Linkify
+// @namespace
+// @description Looks for phone numbers in pages and makes hyperlinks out of them. When clicking on the link, FS will connect your phone to the number you clicked
+// @include *
+// ==/UserScript==
+
+(function () {
+
+//this is the test to see if the number looks like a phone number or not
+ const trackRegex = /(\+\d\d?)?[\-\s\/\.]?[\(]?(\d){2,4}[\)]?[\-\s\/\.]?\d\d\d[\-\s\/\.]?(\d){3,5}\b/ig;
+
+ function trackUrl(t) {
+ return "dial://org.FreeSWITCH.Dialer?number=" + String(t).replace(/[\(\)\- \.]/g, "");
+ }
+
+ // tags we will scan looking for un-hyperlinked urls
+ var allowedParents = [
+ "abbr", "acronym", "address", "applet", "b", "bdo", "big", "blockquote", "body",
+ "caption", "center", "cite", "code", "dd", "del", "div", "dfn", "dt", "em",
+ "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6", "i", "iframe",
+ "ins", "kdb", "li", "object", "nobr", "pre", "p", "q", "samp", "small", "span", "strike",
+ "s", "strong", "sub", "sup", "td", "th", "tt", "u", "var"
+ ];
+
+ var xpath = "//text()[(parent::" + allowedParents.join(" or parent::") + ")" +
+ //" and contains(translate(., 'HTTP', 'http'), 'http') + " +
+ "]";
+
+ var candidates = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ //var t0 = new Date().getTime();
+ for (var cand = null, i = 0; (cand = candidates.snapshotItem(i)); i++) {
+ if (trackRegex.test(cand.nodeValue)) {
+ var span = document.createElement("span");
+ var source = cand.nodeValue;
+
+ cand.parentNode.replaceChild(span, cand);
+
+ trackRegex.lastIndex = 0;
+ for (var match = null, lastLastIndex = 0; (match = trackRegex.exec(source)); ) {
+ span.appendChild(document.createTextNode(source.substring(lastLastIndex, match.index)));
+
+ var a = document.createElement("a");
+ a.setAttribute("href", trackUrl(match[0]));
+ a.appendChild(document.createTextNode(match[0]));
+ span.appendChild(a);
+
+ lastLastIndex = trackRegex.lastIndex;
+ }
+
+ span.appendChild(document.createTextNode(source.substring(lastLastIndex)));
+ span.normalize();
+ }
+ }
+ // var t1 = new Date().getTime();
+ // alert("X-Lite Dial linkify took " + ((t1 - t0) / 1000) + " seconds");
+
+})();
Copied: freeswitch/branches/seven/contrib/seven (from rev 14471, freeswitch/trunk/contrib/seven)
Deleted: freeswitch/branches/seven/contrib/seven/README
Copied: freeswitch/branches/seven/contrib/seven/README (from rev 14471, freeswitch/trunk/contrib/seven/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/README (rev 0)
+++ freeswitch/branches/seven/contrib/seven/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+fsair - FreeSWITCH Air http://wiki.freeswitch.org/wiki/FsAir
Copied: freeswitch/branches/seven/contrib/seven/fsair (from rev 14471, freeswitch/trunk/contrib/seven/fsair)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/.actionScriptProperties
Copied: freeswitch/branches/seven/contrib/seven/fsair/.actionScriptProperties (from rev 14471, freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/.actionScriptProperties (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/.actionScriptProperties 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<actionScriptProperties mainApplicationPath="fsair.mxml" version="3">
+<compiler additionalCompilerArguments="-locale en_US" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.124" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" useApolloConfig="true" verifyDigests="true" warn="true">
+<compilerSourcePath/>
+<libraryPath defaultLinkType="1">
+<libraryPathEntry kind="4" path=""/>
+<libraryPathEntry kind="1" linkType="1" path="libs"/>
+</libraryPath>
+<sourceAttachmentPath/>
+</compiler>
+<applications>
+<application path="fsair.as"/>
+<application path="fsair.mxml"/>
+</applications>
+<modules/>
+<buildCSSFiles/>
+</actionScriptProperties>
Deleted: freeswitch/branches/seven/contrib/seven/fsair/.flexProperties
Copied: freeswitch/branches/seven/contrib/seven/fsair/.flexProperties (from rev 14471, freeswitch/trunk/contrib/seven/fsair/.flexProperties) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/.flexProperties (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/.flexProperties 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
Deleted: freeswitch/branches/seven/contrib/seven/fsair/.project
Copied: freeswitch/branches/seven/contrib/seven/fsair/.project (from rev 14471, freeswitch/trunk/contrib/seven/fsair/.project) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/.project (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/.project 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>fsair</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.adobe.flexbuilder.apollo.apollobuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.adobe.flexbuilder.apollo.apollonature</nature>
+ <nature>com.adobe.flexbuilder.project.flexnature</nature>
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+ </natures>
+</projectDescription>
Copied: freeswitch/branches/seven/contrib/seven/fsair/.settings (from rev 14471, freeswitch/trunk/contrib/seven/fsair/.settings)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs
Copied: freeswitch/branches/seven/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs (from rev 14471, freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+#Fri Jul 10 22:37:21 CST 2009
+eclipse.preferences.version=1
+encoding/<project>=utf-8
Deleted: freeswitch/branches/seven/contrib/seven/fsair/FreeSWITCH-Air.air
Copied: freeswitch/branches/seven/contrib/seven/fsair/FreeSWITCH-Air.air (from rev 14471, freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/seven/fsair/bin-debug (from rev 14471, freeswitch/trunk/contrib/seven/fsair/bin-debug)
Copied: freeswitch/branches/seven/contrib/seven/fsair/icons (from rev 14471, freeswitch/trunk/contrib/seven/fsair/icons)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/icons/fsair_16.png
Copied: freeswitch/branches/seven/contrib/seven/fsair/icons/fsair_16.png (from rev 14471, freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/icons/fsair_32.png
Copied: freeswitch/branches/seven/contrib/seven/fsair/icons/fsair_32.png (from rev 14471, freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/seven/fsair/libs (from rev 14471, freeswitch/trunk/contrib/seven/fsair/libs)
Copied: freeswitch/branches/seven/contrib/seven/fsair/src (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/MessageWindow.mxml
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/MessageWindow.mxml (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/MessageWindow.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/MessageWindow.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="70">
+ <mx:Label x="39" y="19" text="Incoming Call ..." id="MessageLabel" width="220"/>
+ <mx:Button x="71" y="36" label="Accept"/>
+ <mx:Button x="217" y="36" label="Reject"/>
+
+
+</mx:Window>
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com)
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH)
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/XML (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,55 @@
+// ActionScript file
+
+
+package com.FreeSWITCH.XML {
+ import flash.errors.*;
+ import flash.events.*;
+ import flash.utils.Dictionary;
+
+ public class ESL_event extends Object
+ {
+ private var xml:XML;
+ private var plain:Dictionary;
+ private var type:String;
+
+
+ public function ESL_event(event_type:String, str:String="<xml></xml>"):void{
+ type = event_type;
+
+ if (type == "xml") {
+ xml = new XML(str);
+ } else {
+ plain = new Dictionary;
+ for each( var line:String in str.split("\n") ) {
+ var a:Array = line.split(": ");
+ plain[a[0]] = a[1];
+ }
+ }
+ }
+
+ public function toString():String {
+ if (type == "xml" ) {
+ return xml.toString();
+ } else {
+ return plain.toString();
+ }
+ }
+
+ public function event_name():String{
+ return get_value("Event-Name");
+ }
+
+ public function event_subclass():String{
+ return get_value("Event-Subclass");
+ }
+
+ public function get_value(element:String):String{
+ if ( type == "xml" ) {
+ return unescape(xml.headers.elements(element));
+ } else {
+ return unescape(plain[element]);
+ }
+ }
+ }
+
+}
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,153 @@
+// ActionScript file
+
+
+package com.FreeSWITCH.socket {
+ import com.FreeSWITCH.XML.ESL_event;
+
+ import flash.errors.*;
+ import flash.events.*;
+ import flash.net.Socket;
+ import flash.utils.ByteArray;
+ import flash.utils.Dictionary;
+
+
+ public class ESL extends Socket
+ {
+
+ private var last_data:String;
+
+ private var event_callback:Dictionary = new Dictionary();
+ private var api_callback:Function;
+ private var command_callback:Function;
+ private var esl_password:String;
+
+ public function ESL(password:String = "ClueCon"):void {
+ trace("init");
+ esl_password = password;
+ addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
+ }
+
+ public function addEventCallback(key:String, func:Function):void{
+ event_callback[key] = func;
+ }
+
+ public function dataHandler(event:ProgressEvent):void {
+
+ var str:String = readUTFBytes(event.bytesLoaded);
+ var header:ESL_header;
+ var body:String;
+
+ var head_end:int;
+
+ if (last_data != null) {
+ str = last_data + str;
+ last_data = null;
+ }
+
+ while (str != null && str.length > 0) {
+
+ head_end = str.indexOf("\n\n");
+ if (head_end < 0) {
+ last_data = str;
+ break;
+ }
+
+ header = new ESL_header(str.substring(0, head_end));
+ body = str.substr(head_end + 2, header.content_length());
+
+ if (body.length < header.content_length() ) {
+ last_data = str;
+ trace("last_date: " + last_data);
+ break;
+ }
+
+ str = str.substr(head_end + 2 + header.content_length() );
+//trace(str);
+// trace(header.content_type());
+
+ if(header.content_type() == "auth/request") {
+ auth(esl_password);
+ }else if(header.content_type() == "api/response") {
+
+ if (api_callback != null) {
+ api_callback(body);
+ api_callback = null;
+ }
+ }else if(header.content_type() == "command/reply") {
+ if (command_callback != null) {
+ command_callback(header.getHeader("Reply-Text"));
+ command_callback = null;
+ }
+ }else if(header.content_type().indexOf("text/event-") >= 0) {
+
+ var event_type:String = header.content_type() == "text/event-xml" ? "xml" : "plain";
+
+ var eslev:ESL_event = new ESL_event(event_type, body);
+
+ for (var key:Object in event_callback)
+ {
+ trace(key + ", " + event_callback[key]);
+
+ var event_name:String, event_subclass:String;
+ var a:Array = key.toString().split('|');
+ event_name = a[0];
+ event_subclass = a[1];
+
+ trace("event_name: " + eslev.event_name());
+ trace("event_subclass: " + eslev.event_subclass());
+
+ if ( eslev.event_name() == event_name &&
+ (event_subclass == '-' || eslev.event_subclass() == event_subclass)) {
+ event_callback[key](eslev);
+ }
+
+ }
+
+ }
+ }
+
+ }
+
+
+ public function esl_send(str:String, callback:Function=null):void {
+ var ba:ByteArray = new ByteArray();
+ ba.writeMultiByte(str + "\n\n", "UTF-8");
+
+ command_callback = callback;
+ writeBytes(ba);
+ flush();
+ }
+
+ public function auth(pass:String, callback:Function=null):void {
+ esl_send("Auth " + pass, callback);
+ }
+
+ public function esl_event(events:String, type:String="plain"):void {
+ esl_send("event " + type + " " + events);
+ }
+
+ public function esl_filter(header:String, value:String, del:String=""):void {
+ esl_send("filter " + del + " header " + "value");
+ }
+
+ public function api(str:String, callback:Function=null):void {
+ api_callback = callback;
+ esl_send("api " + str);
+ }
+
+ public function bgapi(str:String, callback:Function=null):void{
+ api_callback = callback;
+ esl_send("bgapi " + str);
+ }
+
+ public function execute(app:String, app_arg:String, uuid:String):void{
+ var str:String = "sendmsg " + uuid + "\n\n";
+ str += "call-command: execute";
+ str += "execute-app-name: " + app;
+ str += "execute-app-arg: " + app_arg;
+
+ esl_send(str);
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,37 @@
+// ActionScript file
+
+package com.FreeSWITCH.socket {
+ import flash.utils.Dictionary;
+
+ public class ESL_header
+ {
+
+ private var header:Dictionary = new Dictionary;
+
+ public function ESL_header(str:String):void {
+
+ for each( var line:String in str.split("\n") ) {
+ var a:Array = line.split(": ");
+ if(a.length != 2) {
+ continue;
+ }
+ header[a[0]] = a[1];
+ }
+
+ }
+
+ public function content_type():String {
+ return header["Content-Type"];
+ }
+
+ public function content_length():int {
+ return (int)(header["Content-Length"]) ;
+ }
+
+ public function getHeader(key:String):String {
+ return header[key];
+ }
+
+ }
+
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/fsair-app.xml
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/fsair-app.xml (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/fsair-app.xml (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/fsair-app.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+ Specifies parameters for identifying, installing, and launching AIR applications.
+
+ xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+ The last segment of the namespace specifies the version
+ of the AIR runtime required for this application to run.
+
+ minimumPatchLevel - The minimum patch level of the AIR runtime required to run
+ the application. Optional.
+-->
+
+ <!-- The application identifier string, unique to this application. Required. -->
+ <id>fsair</id>
+
+ <!-- Used as the filename for the application. Required. -->
+ <filename>fsair</filename>
+
+ <!-- The name that is displayed in the AIR application installer.
+ May have multiple values for each language. See samples or xsd schema file. Optional. -->
+ <name>
+ <text xml:lang="en">FreeSWITCH Air SoftPhone</text>
+ <text xml:lang="fr">FreeSWITCH Air SoftPhone</text>
+ <text xml:lang="zh">FreeSWITCH Air 软电话</text>
+ </name>
+
+ <!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+ <version>Ver 0.0.1</version>
+
+ <!-- Description, displayed in the AIR application installer.
+ May have multiple values for each language. See samples or xsd schema file. Optional. -->
+ <!-- <description></description> -->
+
+ <!-- Copyright information. Optional -->
+ <!-- <copyright></copyright> -->
+
+ <!-- Settings for the application's initial window. Required. -->
+ <initialWindow>
+ <!-- The main SWF or HTML file of the application. Required. -->
+ <!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+ <content>[This value will be overwritten by Flex Builder in the output app.xml]</content>
+
+ <!-- The title of the main window. Optional. -->
+ <!-- <title></title> -->
+
+ <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+ <systemChrome>none</systemChrome>
+
+ <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+ <transparent>true</transparent>
+
+ <!-- Whether the window is initially visible. Optional. Default false. -->
+ <!-- <visible></visible> -->
+
+ <!-- Whether the user can minimize the window. Optional. Default true. -->
+ <!-- <minimizable></minimizable> -->
+
+ <!-- Whether the user can maximize the window. Optional. Default true. -->
+ <!-- <maximizable></maximizable> -->
+
+ <!-- Whether the user can resize the window. Optional. Default true. -->
+ <resizable>false</resizable>
+
+ <!-- The window's initial width. Optional. -->
+ <width>400</width>
+
+ <!-- The window's initial height. Optional. -->
+ <height>460</height>
+
+ <!-- The window's initial x position. Optional. -->
+ <!-- <x></x> -->
+
+ <!-- The window's initial y position. Optional. -->
+ <!-- <y></y> -->
+
+ <!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+ <!-- <minSize></minSize> -->
+
+ <!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+ <!-- <maxSize></maxSize> -->
+ </initialWindow>
+
+ <!-- The subpath of the standard default installation location to use. Optional. -->
+ <!-- <installFolder></installFolder> -->
+
+ <!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+ <!-- <programMenuFolder></programMenuFolder> -->
+
+ <!-- The icon the system uses for the application. For at least one resolution,
+ specify the path to a PNG file included in the AIR package. Optional. -->
+ <icon>
+ <image16x16>icons/fsair_16.png</image16x16>
+ <image32x32>icons/fsair_32.png</image32x32>
+ <!--<image48x48></image48x48>
+ <image128x128></image128x128>-->
+ </icon>
+
+ <!-- Whether the application handles the update when a user double-clicks an update version
+ of the AIR file (true), or the default AIR application installer handles the update (false).
+ Optional. Default false. -->
+ <!-- <customUpdateUI></customUpdateUI> -->
+
+ <!-- Whether the application can be launched when the user clicks a link in a web browser.
+ Optional. Default false. -->
+ <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+ <!-- Listing of file types for which the application can register. Optional. -->
+ <!-- <fileTypes> -->
+
+ <!-- Defines one file type. Optional. -->
+ <!-- <fileType> -->
+
+ <!-- The name that the system displays for the registered file type. Required. -->
+ <!-- <name></name> -->
+
+ <!-- The extension to register. Required. -->
+ <!-- <extension></extension> -->
+
+ <!-- The description of the file type. Optional. -->
+ <!-- <description></description> -->
+
+ <!-- The MIME content type. -->
+ <!-- <contentType></contentType> -->
+
+ <!-- The icon to display for the file type. Optional. -->
+ <!-- <icon>
+ <image16x16></image16x16>
+ <image32x32></image32x32>
+ <image48x48></image48x48>
+ <image128x128></image128x128>
+ </icon> -->
+
+ <!-- </fileType> -->
+ <!-- </fileTypes> -->
+
+</application>
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/fsair.as
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/fsair.as (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/fsair.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/fsair.as (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/fsair.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,352 @@
+
+ import com.FreeSWITCH.XML.ESL_event;
+ import com.FreeSWITCH.socket.ESL;
+
+ import flash.events.*;
+ import flash.utils.Dictionary;
+ import flash.utils.Timer;
+
+ var uuids:Dictionary = new Dictionary();
+
+ var esl:ESL;
+
+ var ring_win:MessageWindow = new MessageWindow();
+
+ var connect_timer:Timer = new Timer(2000);
+ var re_connect_timer:Timer = new Timer(2000);
+
+ function initApp():void {
+ trace(NativeApplication.nativeApplication.runtimeVersion);
+ ringBox.visible = false;
+ getSettings();
+ esl = new ESL(esl_pass.text);
+
+ connect_timer.addEventListener(TimerEvent.TIMER, post_connect);
+ re_connect_timer.addEventListener(TimerEvent.TIMER, re_connect);
+
+ connect();
+
+ }
+
+ function connect():void {
+ try
+ {
+ if (esl.connected ) {
+ msg("Already Connected");
+ return;
+ }
+
+ esl.connect(esl_addr.text, (int)(esl_port.text));
+ esl.addEventListener(Event.CONNECT, connectHandler);
+ esl.addEventListener(Event.CLOSE, closeHandler);
+ esl.addEventListener(ErrorEvent.ERROR, errorHandler);
+ esl.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
+// esl.addListener(ProgressEvent.SOCKET_DATA, dataHandler);
+ esl.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
+
+ esl.addEventCallback("CUSTOM|portaudio::ringing", onRing);
+ esl.addEventCallback("CHANNEL_HANGUP|-", onHangup);
+
+ connect_timer.start();
+ msg("timer started");
+ }
+
+ catch (error:Error)
+ {
+ msg(error.message + "\n");
+ esl.close();
+ }
+
+ }
+
+ function re_connect(event:TimerEvent):void {
+
+ event.target.stop();
+
+ event.target.delay += 2000;
+
+ if (event.target.delay > 120000) {
+ event.target.delay = 2000;
+ }
+
+ msg("Connect faild. will reconnect in " + event.target.delay + " seconds" );
+ connect();
+
+ }
+
+ function post_connect(event:TimerEvent):void {
+
+ event.target.stop();
+
+ if (!esl.connected) {
+ event.target.stop();
+ re_connect_timer.start();
+ return;
+ }
+
+ msg("timer stoped");
+ initDevList();
+// esl.esl_event("ALL");
+ esl.esl_event("CHANNEL_HANGUP CUSTOM portaudio::ringing");
+
+ }
+
+ function setTitle(title:String):void {
+ this.title = "FreeSWITCH Air - [" + title + ']';
+ }
+
+ function msg(message:String):void
+ {
+ logBox.text += message + "\n";
+ logBox.verticalScrollPosition = logBox.maxVerticalScrollPosition;
+ }
+
+ function clearLogs():void {
+ logBox.text = logBox.text.substr(-1, 40);
+ }
+
+ function connectHandler(event:Event):void {
+ setTitle('Connected');
+ msg("Connected: " + esl_addr.text + ":" + esl_port.text);
+ }
+ function closeHandler(event:Event):void {
+ //msg(event.type + ' ' + event.toString());
+ setTitle('Disconnected');
+ }
+ function errorHandler(event:Event):void {
+ msg(event.type + ' ' + event.toString());
+ setTitle('Error');
+ }
+ function ioErrorHandler(event:IOErrorEvent):void {
+ msg(event.type + ' ' + event.toString());
+ setTitle('IOError');
+
+ if (!esl.connected) {
+ connect();
+ }
+ }
+ function securityErrorHandler(event:SecurityErrorEvent):void {
+ msg(event.type + ' ' + event.toString());
+ setTitle('SecurityError');
+
+ if (!esl.connected) {
+ connect();
+ }
+
+ }
+
+ function onRing(eslev:ESL_event):void {
+
+ var uuid:String = eslev.get_value("Unique-ID");
+ var caller_id_name:String = eslev.get_value("Caller-Caller-ID-Name");
+ var caller_id_number:String = eslev.get_value("Caller-Caller-ID-Number");
+ var call_id:String = eslev.get_value("call_id");
+
+ uuids[uuid] = call_id;
+
+ callerID.text = caller_id_name + ' <' + caller_id_number + '>';
+ ringBox.visible = true;
+
+
+ msg('Incoming call: ' + caller_id_name + '<' + caller_id_number + '>');
+ msg(uuid);
+
+ //how to make this work?
+ //this.stage.nativeWindow.icon.bounce();
+
+// NativeApplication.nativeApplication.icon.bounce(NotificationType.CRITICAL)
+ stage.nativeWindow.notifyUser(NotificationType.CRITICAL);
+
+ //show a ring window?
+// ring_win.MessageLabel.text = "Incoming Call";
+// ring_win.open();
+
+ }
+
+ function onHangup(eslev:ESL_event):void {
+
+ var uuid:String = eslev.get_value("Unique-ID");
+
+ if (uuids[uuid] != null) {
+ msg("hangup");
+ callerID.text = "Hangup";
+ delete uuids[uuid];
+ }
+
+ }
+
+ function sendDtmf(dtmf:String):void {
+ esl.api("pa dtmf " + dtmf);
+ }
+
+ function switchPA():void {
+ esl.api("pa switch");
+ }
+
+ function sendCommand():void
+ {
+
+ msg('>>> ' + command.text);
+
+ if (command.text.substr(0,1) == '/') {
+ esl.esl_send(command.text.substr(1), commandCallback);
+ } else {
+ esl.api(command.text, commandCallback)
+ }
+
+ }
+
+ function commandCallback(data:String):void {
+ msg(data);
+ }
+
+ function answer():void{
+ esl.api("pa answer");
+ ringBox.visible = false;
+ }
+
+ function hangup():void{
+ esl.api("pa hangup");
+ ringBox.visible = false;
+ }
+
+ function call():void{
+ esl.api("pa call " + number.text, updateUUID);
+ msg("Calling " + number.text);
+
+ if( number.dataProvider.length < 1) {
+ number.dataProvider.addItemAt(number.text, 0);
+ } else if (number.dataProvider.getItemAt(0) != number.text ){
+ number.dataProvider.addItemAt(number.text, 0);
+ }
+
+ }
+
+ function updateUUID(data:String):void {
+
+ var a:Array = new Array();
+ a = data.split(":");
+
+ trace(data);
+
+ if (a.length == 3 && a[0] == "SUCCESS") {
+ uuids[a[2].substr(0, a[2].length - 1) ] = a[1];
+ }
+
+ }
+
+ function initDevList():void {
+ esl.api("pa devlist xml", devlistCallback);
+ }
+
+ function reloadDevList():void {
+// esl.api("pa rescan");
+ esl.api("pa devlist xml", devlistCallback);
+ }
+
+ function devlistCallback(data:String):void {
+// msg(data);
+
+ var xml:XML = new XML(data);
+
+ inDev.dataProvider.removeAll();
+ outDev.dataProvider.removeAll();
+ ringDev.dataProvider.removeAll();
+
+ for each (var d:XML in xml.devices.device){
+
+ if (d.@inputs > 0) {
+ inDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+
+ }else if(d.@outputs > 0) {
+ outDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+ ringDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+
+ }
+
+ if (d.@id == xml.bindings.input.@device) {
+ inDev.selectedIndex = inDev.dataProvider.length - 1;
+ } else if (d.@id == xml.bindings.output.@device) {
+ outDev.selectedIndex = outDev.dataProvider.length - 1;
+ if (d.@id == xml.bindings.ring.@device) {
+ ringDev.selectedIndex = ringDev.dataProvider.length - 1;
+
+ }
+ }
+
+
+
+ }
+
+ }
+
+ function setPaDev():void{
+ esl.api("pa indev #" + inDev.selectedItem.value);
+ esl.api("pa outdev #" + outDev.selectedItem.value);
+ esl.api("pa ringdev #" + ringDev.selectedItem.value);
+ }
+
+ function unloadPA():void {
+ esl.api("unload mod_portaudio");
+ }
+
+ function loadPA():void {
+ esl.api("load mod_portaudio");
+ }
+
+ function loopPA():void {
+ esl.api("pa looptest");
+ }
+
+ function toggleAdvanced():void {
+ if (this.width == 260 ) {
+ this.width = 620;
+ advancedButton.label = "Advanced <<<";
+ } else {
+ this.width = 260;
+ advancedButton.label = "Advanced >>>";
+ }
+
+
+ }
+
+ function _save_settings(key:String, val:String):void {
+ var bytes:ByteArray = new ByteArray();
+ bytes.writeUTFBytes(val);
+ EncryptedLocalStore.setItem(key, bytes);
+ }
+ function _get_settings(key:String):String {
+ var storedValue:ByteArray = EncryptedLocalStore.getItem(key);
+
+ if (storedValue == null) {
+ return null;
+ }
+
+ return storedValue.readUTFBytes(storedValue.length);
+ }
+
+ function saveSettings():void {
+
+ _save_settings("freeswitch_install_path", freeswitch_install_path.text);
+ _save_settings("esl_addr", esl_addr.text);
+ _save_settings("esl_port", esl_port.text);
+ _save_settings("esl_pass", esl_pass.text);
+
+ }
+
+ function getSettings():void {
+ freeswitch_install_path.text = _get_settings("freeswitch_install_path") || "/usr/local/freeswitch";
+ esl_addr.text = _get_settings("esl_addr") || "127.0.0.1";
+ esl_port.text = _get_settings("esl_port") || "8021";
+ esl_pass.text = _get_settings("esl_pass") || "ClueCon";
+ }
+
+ function runFS():void {
+
+ }
+
+ function shutdownFS():void {
+ esl.api("fsctl shutdown");
+ }
+
+
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/seven/fsair/src/fsair.mxml
Copied: freeswitch/branches/seven/contrib/seven/fsair/src/fsair.mxml (from rev 14471, freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/src/fsair.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/src/fsair.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
+ layout="absolute" title="FreeSWITCH Air" height="408" width="622"
+ creationComplete = "initApp()">
+
+ <mx:Script source="fsair.as"/>
+
+ <mx:Style>
+ WindowedApplication
+ {
+ background-color:"0x999999";
+ background-alpha:"0.5";
+ }
+ </mx:Style>
+ <mx:Label text="Hello World" enabled="true" horizontalCenter="-232" verticalCenter="14" id="label1"/>
+ <mx:Button x="137" y="10" label="Advanced <<<" click="toggleAdvanced()" width="114" id="advancedButton"/>
+ <mx:Panel x="0" y="40" width="251" height="219" layout="absolute" color="#3232C0" barColor="#3FB92B" headerHeight="10" headerColors="2">
+ <mx:Button x="176" y="135" label="Call" click="call()" width="51" color="#00FF00"/>
+ <mx:Button x="176" y="105" label="Hup" click="hangup()" id="btnHangup" width="50" color="#FF0000"/>
+ <mx:Button x="11.5" y="8" label="1" width="30" height="24" click="sendDtmf('1')"/>
+ <mx:Button x="49.5" y="8" label="2" width="30" height="24" click="sendDtmf('2')"/>
+ <mx:Button x="87.5" y="8" label="3" width="30" height="24" click="sendDtmf('3')"/>
+ <mx:Button x="11.5" y="40" label="4" width="30" height="24" click="sendDtmf('4')"/>
+ <mx:Button x="49.5" y="40" label="5" width="30" height="24" click="sendDtmf('5')"/>
+ <mx:Button x="87.5" y="72" label="9" width="30" height="24" click="sendDtmf('9')"/>
+ <mx:Button x="49.5" y="72" label="8" width="30" height="24" click="sendDtmf('8')"/>
+ <mx:Button x="11.5" y="72" label="7" width="30" height="24" click="sendDtmf('7')"/>
+ <mx:Button x="87.5" y="40" label="6" width="30" height="24" click="sendDtmf('6')"/>
+ <mx:Button x="87.5" y="104" label="#" width="30" height="24" click="sendDtmf('#')"/>
+ <mx:Button x="125.5" y="9" label="A" width="30" height="24" click="sendDtmf('A')"/>
+ <mx:Button x="125.5" y="73" label="C" width="30" height="24" click="sendDtmf('C')"/>
+ <mx:Button x="125.5" y="41" label="B" width="30" height="24" click="sendDtmf('B')"/>
+ <mx:Button x="125.5" y="104" label="D" width="30" height="24" click="sendDtmf('D')"/>
+ <mx:Button x="49.5" y="104" label="0" width="30" height="24" click="sendDtmf('0')"/>
+ <mx:Button x="11.5" y="104" label="*" width="30" height="24" click="sendDtmf('*')"/>
+ <mx:Button x="176" y="74" label="sw" click="switchPA()" width="51"/>
+ <mx:ComboBox x="10" y="135" editable="true" width="145.5" id="number"></mx:ComboBox>
+ <mx:Label x="10" y="169" text="_" id="callerID"/>
+ </mx:Panel>
+ <mx:TabNavigator x="259" y="10" width="352" height="311" id="tn1" creationPolicy="all">
+ <mx:Canvas label="Devices" width="100%" height="100%">
+ <mx:Button x="23" y="128" label="Get" click="reloadDevList()"/>
+ <mx:Button x="68" y="128" label="Set" click="setPaDev()"/>
+ <mx:Button x="182" y="128" label="UnLoad" click="unloadPA()"/>
+ <mx:Button x="248" y="128" label="Load" click="loadPA()"/>
+ <mx:Button x="112" y="127" label="Loop" click="loopPA()" width="53" height="23"/>
+ <mx:ComboBox x="95" y="28" id="inDev" width="206"></mx:ComboBox>
+ <mx:ComboBox x="95" y="54" id="outDev" width="206"></mx:ComboBox>
+ <mx:ComboBox x="95" y="84" id="ringDev" width="206"></mx:ComboBox>
+ <mx:Label x="23" y="30" text="Sound In"/>
+ <mx:Label x="23" y="56" text="Sound Out"/>
+ <mx:Label x="23" y="86" text="Ring Dev"/>
+ </mx:Canvas>
+ <mx:Canvas label="Settings" width="100%" height="100%">
+ <mx:Label x="10" y="24" text="FreeSWITCH Install Path" width="169"/>
+ <mx:TextInput x="10" y="50" width="315" text="/usr/local/freeswitch" id="freeswitch_install_path"/>
+ <mx:TextInput x="10" y="106" width="107" text="127.0.0.1" id="esl_addr"/>
+ <mx:TextInput x="125" y="106" width="42" text="8021" id="esl_port"/>
+ <mx:Label x="10" y="80" text="Event Socket Addr" width="120"/>
+ <mx:Label x="125" y="80" text="Port" width="32"/>
+ <mx:Button x="254" y="106" label="connect" click="connect()"/>
+ <mx:Button x="271" y="182" label="Save" click="saveSettings()"/>
+ <mx:Label x="175" y="80" text="Password" width="58"/>
+ <mx:TextInput x="175" y="106" width="71" text="ClueCon" id="esl_pass"/>
+ <mx:Button x="10" y="182" label="Shutdown FS" click="shutdownFS()"/>
+
+ </mx:Canvas>
+ <mx:Panel label="Logs" width="100%" height="100%" layout="absolute">
+ <mx:TextArea width="326" height="196" id="logBox" x="0" y="2"/>
+ <mx:TextInput width="246" id="command" y="206"/>
+ <mx:Button label="Send" click="sendCommand()" x="254" y="206"/>
+ <mx:Button label="Clear" click="clearLogs" x="254" y="-28"/>
+ </mx:Panel>
+
+ </mx:TabNavigator>
+ <mx:Panel x="0" y="258" width="251" height="63" layout="absolute" headerHeight="5" id="ringBox">
+ <mx:Button x="10" y="11" label="Answer" click="answer()" id="btnAnswer" color="#FFFFFF" fillColors="#00FF00"/>
+ <mx:Button x="138" y="10" label="Reject" click="hangup()" color="#FFFFFF" fillColors="#FF0000"/>
+ </mx:Panel>
+
+</mx:WindowedApplication>
Copied: freeswitch/branches/seven/contrib/seven/fsair/tools (from rev 14471, freeswitch/trunk/contrib/seven/fsair/tools)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/tools/Makefile
Copied: freeswitch/branches/seven/contrib/seven/fsair/tools/Makefile (from rev 14471, freeswitch/trunk/contrib/seven/fsair/tools/Makefile) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/tools/Makefile (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/tools/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+all:
+ gcc -o tee2 tee2.c
+
+install: tee2
+ install tee2 /usr/local/bin
+ #install tee2 /usr/bin
+ #cp tee2 /usr/local/bin/
+
+clean:
+ rm -f tee2
Deleted: freeswitch/branches/seven/contrib/seven/fsair/tools/mm.sh
Copied: freeswitch/branches/seven/contrib/seven/fsair/tools/mm.sh (from rev 14471, freeswitch/trunk/contrib/seven/fsair/tools/mm.sh) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/tools/mm.sh (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/tools/mm.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+echo > /tmp/a
+echo > /tmp/b
+#tail -f /tmp/b &
+tail -f /tmp/a | nc localhost 8021 | tee2 /tmp/b | nc -l -k 8022 | tee /tmp/a
+
Deleted: freeswitch/branches/seven/contrib/seven/fsair/tools/tee2
Copied: freeswitch/branches/seven/contrib/seven/fsair/tools/tee2 (from rev 14471, freeswitch/trunk/contrib/seven/fsair/tools/tee2)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/seven/fsair/tools/tee2.c
Copied: freeswitch/branches/seven/contrib/seven/fsair/tools/tee2.c (from rev 14471, freeswitch/trunk/contrib/seven/fsair/tools/tee2.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/fsair/tools/tee2.c (rev 0)
+++ freeswitch/branches/seven/contrib/seven/fsair/tools/tee2.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,50 @@
+/* tee2 - read from standard input and write to standard output,
+ standard error and a file.
+ Useful when you redirect the stdout but still want to keep an eye on
+ the output. Like a B2BSocket:
+
+ $ echo > /tmp/a
+ $ echo > /tmp/b
+ $ tail -f /tmp/a | nc localhost 8021 | tee2 /tmp/b | nc -l -k 8022 | tee /tmp/a
+
+ Want to write to more than one file? Just using the UNIX art
+ $ echo blah | tee2 /tmp/1 | tee /tmp/{2,3,4,5,6}
+
+/* Author: Seven Du */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (int argc, char **argv)
+{
+ char c;
+ char *file_name;
+ FILE *file;
+ if (argc < 2) {
+ fprintf(stderr, "Usage: tee2 <file_name>\n");
+ exit(1);
+ }
+
+ file_name = argv[1];
+
+ if(! (file = fopen(file_name, "w")) ){
+ fprintf(stderr, "Error write file %s !\n", file_name);
+ exit(2);
+ }
+
+ while((c = fgetc(stdin)) != EOF) {
+ putc(c, file);
+ putc(c, stdout);
+ putc(c, stderr);
+
+ if(c == '\n') {
+ fflush(file);
+ fflush(stdout);
+ fflush(stderr);
+ }
+
+ }
+
+ fclose(file);
+ exit(0);
+}
Copied: freeswitch/branches/seven/contrib/seven/sip (from rev 14471, freeswitch/trunk/contrib/seven/sip)
Deleted: freeswitch/branches/seven/contrib/seven/sip/sip2db.rb
Copied: freeswitch/branches/seven/contrib/seven/sip/sip2db.rb (from rev 14471, freeswitch/trunk/contrib/seven/sip/sip2db.rb) (0 => 14472)
--- freeswitch/branches/seven/contrib/seven/sip/sip2db.rb (rev 0)
+++ freeswitch/branches/seven/contrib/seven/sip/sip2db.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,207 @@
+#!/usr/bin/env ruby
+
+# read SIP messages from a plain text file(FreeSWITCH with TPORT_DUMP=/tmp/xxxx.log),
+# and write to a Mysql database
+#
+# There are lots of ways to monitor sip messages. However, not all of them are convinient
+# as we want. Let's say a simple example:
+#
+# FreeSWITCH :> originate sofia/gateways/carrier1/5550000|sofia/gateways/carrier2/5550000|sofia/carrier3...
+#
+# It's hard to tell what happend if the call fails. Because it's different sip sessions.
+# The idea is to group them in one super session and see what happend. I do this by
+# adding an arbitary sip header to do cross reference. And by parse the sip messages to
+# a DB we can easily show it as html. I even can build a simple graph based on the DB data:
+#
+# http://skitch.com/seven1240/b8xj2/voip-master-idapted
+#
+# You can easily add a sip header to INVITE by(I use x_interaction):
+# FreeSWITCH :> originate {sip_h_x_interaction=TEST0001}sofia/gateways/.....
+#
+# And I can get all the messages from DB:
+# SELECT * FROM `sip_messages` WHERE (call_id IN
+# (SELECT distinct call_id FROM sip_messages WHERE x_interaction = 'TEST0001')) ORDER BY created_at;
+#
+# There are two aproches to get sip packets:
+# 1) tcpdump/tshark
+# 2) FreeSWITCH
+#
+# I use the second. Note, there is no way to actually get sip messages from FS currently, but sofia-sip
+# has the ability to log all sip messages to a disk file by using TPORT_DUMP
+#
+# And you can use this script to parse them to a DB. I know it hurt performance,
+# but we don't have tons of traffic and you know there are only 5-10 messages for each
+# sip call. While we get about 1G bytes each day in the sip log, most of them are OPTIONS/NOTIFY etc.
+# I filtered them before inserting to DB, but it will be better if sofia-sip can filter that :)
+#
+# The script will monitor the log file and parse and insert to DB in real time. It's written in
+# the Ruby on Rails framework, however, I think it can run out of Rails with or without
+# modification. But you still need ruby and rubygems if you want to use it.
+#
+# on Ubuntu/Debian
+# # apt-get install ruby rubygems
+# # gem install mysql file-tail yaml
+#
+# It's just an idea, you may like to write your own tools to parse the sip log file. Also
+# the log file need to be rotated regularly. And I think it maybe possible to store the log
+# file on a memory disk, whatever... :)
+#
+# By default, it will go to the end of a log file and follow(like tail),
+# if you want to parse the existing part, comment line: f.backward(0)
+#
+# Sample mysql DB DDL:
+# CREATE TABLE `sip_messages` (
+# `id` int(11) NOT NULL auto_increment,
+# `message_type` varchar(255) default NULL,
+# `sip_to` varchar(255) default NULL,
+# `call_id` varchar(255) default NULL,
+# `message_bytes` int(11) default NULL,
+# `content_length` int(11) default NULL,
+# `message_body` text,
+# `created_at` datetime default NULL,
+# `x_interaction` varchar(255) default NULL,
+# PRIMARY KEY (`id`),
+# KEY `index_sip_messages_on_x_interaction` (`x_interaction`)
+# ) ENGINE=InnoDB;
+#
+# Author: seven_at_idapted.com
+# Lisense: Free of use
+
+require 'rubygems'
+require "file/tail"
+require "mysql"
+require "yaml"
+
+
+RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
+# Uncomment the following line and comment the above to make it work withouth rails framework
+# RAILS_ROOT = "."
+DB_CONFIG_FILENAME = File.join(RAILS_ROOT, "config/database.yml")
+LOG_FILE = File.join(RAILS_ROOT, 'log/sip2db.log')
+# FILENAME="/tmp/tport_sip.log"
+FILENAME="/usr/local/freeswitch/log/tport_sip.log"
+@debug = true
+
+if File.writable?(LOG_FILE)
+ @log_file = File.open(LOG_FILE, "a+")
+ puts "Writing logs to #{LOG_FILE}"
+else
+ @log_file = STDOUT
+end
+
+def log(msg)
+ @log_file.puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}: #{msg}"
+end
+
+def db_config
+ if File.readable?(DB_CONFIG_FILENAME)
+ conf = YAML.load_file(DB_CONFIG_FILENAME)
+ return conf["production"]
+ else
+ conf["host"] = "localhost"
+ conf["username"] = "root"
+ conf["password"] = ""
+ conf["database"] = "freeswitch_sip_db"
+ end
+end
+
+#connect to Mysql
+@dbh = nil
+@debug = true
+@call_id_array = [] #use as a queue to filter related messages
+
+def mysql_connect
+ Mysql.real_connect(db_config["host"] || db_config["server"], db_config["username"], db_config["password"], db_config["database"])
+end
+
+def ignore_message?(call_id, message_type)
+ #we do not care about certain types of messages and it's related ones
+
+ # log @call_id_array.size.to_s
+ @call_id_array.shift if @call_id_array.size > 10000
+ return true if @call_id_array.include?(call_id)
+ if message_type =~ /(REGISTER|OPTIONS|NOTIFY)/
+ @call_id_array << call_id
+ return true
+ end
+ return false
+end
+
+def insert_to_db(message_body)
+
+ # puts message_body
+ message_body =~ /(recv|sent) (\d+)[^\n]*\n(\S+).*To: ([^\n]+).*Call-ID: (\S+).*Content-Length: (\d+)[^(x_int)]*(x_interaction: ([A-Z0-9]+))*/m
+ message_bytes, message_type, sip_to, call_id, content_length, x_interaction = $2, $3, $4, $5, $6, $8
+ sip_to.sub!(/^.*<([^;>]+).*/, '\1') unless sip_to.nil?
+
+ return if call_id.nil?
+
+ call_id = call_id[0,100] + "_TRUNCATED" if call_id.length > 100
+ return if ignore_message?(call_id, message_type)
+
+ message_body = @dbh.escape_string(message_body)
+ sql = "INSERT INTO sip_messages (message_type, sip_to, call_id, message_bytes, x_interaction, content_length, message_body, created_at)
+ VALUES('#{message_type}', '#{sip_to}', '#{call_id}', '#{message_bytes}', '#{x_interaction}', #{content_length || 0 }, '#{message_body}', now())"
+ log sql if @debug
+
+ begin
+ @dbh.query(sql)
+ rescue Mysql::Error => e
+ log "Error code #{e.errno}"
+ log "Error message: #{e.error}"
+ log "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
+ end
+end
+
+
+#start here
+begin
+ # connect to the MySQL server
+ # get server version string and display it
+ @dbh = mysql_connect
+ log "Server version: " + @dbh.get_server_info
+rescue Mysql::Error => e
+ log "Error code: #{e.errno}"
+ log "Error message: #{e.error}"
+ log "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
+ensure
+ # disconnect from server
+ # @dbh.close if @dbh
+end
+
+
+
+File.open(FILENAME) do |f|
+ message_type_expecting = true
+ message_body = ''
+ message_started = false
+ call_id = nil
+ line_count = 0
+
+ f.extend(File::Tail)
+ f.interval = 10
+ f.backward(0)
+ f.tail do |line|
+
+ if line_count > 1000 # crazy?
+ line_count = 0
+ message_started = false
+ end
+
+ if !message_started && line =~ /^(recv|sent) (\d+)/
+ message_started = true
+ end
+
+ if line =~ /\013/ # \v - seperator in dump file
+ insert_to_db message_body
+ message_body = ''
+ message_started = false
+ else
+ message_body << line
+ end
+
+ end
+end
+
+
+
Copied: freeswitch/branches/seven/contrib/shahzad (from rev 14471, freeswitch/trunk/contrib/shahzad)
Copied: freeswitch/branches/seven/contrib/swk (from rev 14471, freeswitch/trunk/contrib/swk)
Deleted: freeswitch/branches/seven/contrib/swk/README
Copied: freeswitch/branches/seven/contrib/swk/README (from rev 14471, freeswitch/trunk/contrib/swk/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/README (rev 0)
+++ freeswitch/branches/seven/contrib/swk/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,52 @@
+This Software is licensed under the MPL.
+
+REQUIREMENTS:
+
+To Use:
+Flash9 or Flash10
+PHP 5
+AMFPHP http://www.amfphp.org/
+FreeSWITCH ESL PHP Extensions
+And of course a WebServer
+
+To Develop:
+All of the Above
+Adobe Flex Development Environment. (This is available from Adobe's website in both paid and free formats.)
+
+
+To Install:
+
+Install AMFPHP as per http://www.amfphp.org/docs/installingamfphp.html
+Rename the 'amfphp' directory to feeder. This is done to avoid robot scanners, bu I am sure that eventually they'll start looking for that.
+
+copy the freeswitch.php file into the AMFPHP services directory.
+
+make the files in amf-test1/bin-debug available on your webserver and point a browser at it.
+
+copy the php/xml_curl directory to your webserver
+
+make sure you have mod_xml_curl built and installed and enabled
+ uncomment it in the modules.conf in your source tree
+ uncomment it in your modules.conf.xml in the conf/autoload_configs/modules.conf.xml
+
+
+edit the gateway_url param in conf/autoload_configs/xml_curl.conf.xml to enabale the directory binding
+EXAMPLE:
+ <param name="gateway-url" value="http://localhost/xml_curl/directory.php" bindings="directory"/>
+
+
+rename conf/directory/default.xml to conf/directory/default.xml.NOLOAD
+ this is no longer required as we are now loading the directory using xml_curl
+
+
+If you are developing in flex you need to load the swf from your development webserver so that it can properly locate the service.
+
+Any questions, feel free to find me as SwK via IRC at #freeswitch on irc.freenode.net or krice AT freeswitch DOT org
+
+
+TODO:
+Fix Groups and Group Editing
+Fix Conference Controls
+Rework PHP Class Files for both the amfphp service and the xml_curl there is no need to maintain these seperately as they share a fair ammount of code
+anything else I can come up with
+
Copied: freeswitch/branches/seven/contrib/swk/flex (from rev 14471, freeswitch/trunk/contrib/swk/flex)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1 (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.actionScriptProperties
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.actionScriptProperties (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/.actionScriptProperties) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/.actionScriptProperties (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/.actionScriptProperties 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<actionScriptProperties mainApplicationPath="main.mxml" version="3">
+<compiler additionalCompilerArguments="-locale en_US" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" useApolloConfig="false" verifyDigests="true" warn="true">
+<compilerSourcePath/>
+<libraryPath defaultLinkType="1">
+<libraryPathEntry kind="4" path=""/>
+<libraryPathEntry kind="1" linkType="1" path="libs"/>
+</libraryPath>
+<sourceAttachmentPath/>
+</compiler>
+<applications>
+<application path="main.mxml"/>
+</applications>
+<modules/>
+<buildCSSFiles/>
+</actionScriptProperties>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.flexProperties
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.flexProperties (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/.flexProperties) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/.flexProperties (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/.flexProperties 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<flexProperties flexServerType="16" serverContextRoot="" serverRoot="/Users/krice/Documents/amf-test1" serverRootURL="http://192.168.1.140/amf-test1/" toolCompile="true" useServerFlexSDK="false" version="1"/>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.project
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.project (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/.project) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/.project (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/.project 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>amf-test1</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.adobe.flexbuilder.project.flexnature</nature>
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+ </natures>
+</projectDescription>
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.settings (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/.settings)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.settings/org.eclipse.core.resources.prefs
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/.settings/org.eclipse.core.resources.prefs (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/.settings/org.eclipse.core.resources.prefs) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/.settings/org.eclipse.core.resources.prefs (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/.settings/org.eclipse.core.resources.prefs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+#Sat Mar 07 02:10:09 CST 2009
+eclipse.preferences.version=1
+encoding/<project>=utf-8
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/AC_OETags.js
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/AC_OETags.js (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/AC_OETags.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/AC_OETags.js (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/AC_OETags.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,276 @@
+// Flash Player Version Detection - Rev 1.6
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ var versionRevision = descArray[3];
+ if (versionRevision == "") {
+ versionRevision = descArray[4];
+ }
+ if (versionRevision[0] == "d") {
+ versionRevision = versionRevision.substring(1);
+ } else if (versionRevision[0] == "r") {
+ versionRevision = versionRevision.substring(1);
+ if (versionRevision.indexOf("d") > 0) {
+ versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
+ }
+ }
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+ if (src.indexOf('?') != -1)
+ return src.replace(/\?/, ext+'?');
+ else
+ return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ str += '>';
+ for (var i in params)
+ str += '<param name="' + i + '" value="' + params[i] + '" /> ';
+ str += '</object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "id":
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ai.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ai.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ai.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/air.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/air.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/air.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fl.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fl.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fl.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fw.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fw.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fw.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fx.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fx.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/fx.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ps.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ps.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/icons/ps.jpg)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/images (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/images)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/images/tab_selected.png)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/xml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/xml)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/xml/listData.xml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/xml/listData.xml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/assets/xml/listData.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/xml/listData.xml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/assets/xml/listData.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<items>
+ <item>
+ <image>assets/icons/fx.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/ai.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/ps.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/fw.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/fl.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/air.jpg</image>
+ </item>
+</items>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/history)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.css
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.css (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/history/history.css) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.css (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.js
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.js (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/history/history.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.js (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/history.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,645 @@
+BrowserHistoryUtils = {
+ addEvent: function(elm, evType, fn, useCapture) {
+ useCapture = useCapture || false;
+ if (elm.addEventListener) {
+ elm.addEventListener(evType, fn, useCapture);
+ return true;
+ }
+ else if (elm.attachEvent) {
+ var r = elm.attachEvent('on' + evType, fn);
+ return r;
+ }
+ else {
+ elm['on' + evType] = fn;
+ }
+ }
+}
+
+BrowserHistory = (function() {
+ // type of browser
+ var browser = {
+ ie: false,
+ firefox: false,
+ safari: false,
+ opera: false,
+ version: -1
+ };
+
+ // if setDefaultURL has been called, our first clue
+ // that the SWF is ready and listening
+ //var swfReady = false;
+
+ // the URL we'll send to the SWF once it is ready
+ //var pendingURL = '';
+
+ // Default app state URL to use when no fragment ID present
+ var defaultHash = '';
+
+ // Last-known app state URL
+ var currentHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHash = document.location.hash;
+
+ // History frame source URL prefix (used only by IE)
+ var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+ // History maintenance (used only by Safari)
+ var currentHistoryLength = -1;
+
+ var historyHash = [];
+
+ var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
+
+ var backStack = [];
+ var forwardStack = [];
+
+ var currentObjectId = null;
+
+ //UserAgent detection
+ var useragent = navigator.userAgent.toLowerCase();
+
+ if (useragent.indexOf("opera") != -1) {
+ browser.opera = true;
+ } else if (useragent.indexOf("msie") != -1) {
+ browser.ie = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+ } else if (useragent.indexOf("safari") != -1) {
+ browser.safari = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+ } else if (useragent.indexOf("gecko") != -1) {
+ browser.firefox = true;
+ }
+
+ if (browser.ie == true && browser.version == 7) {
+ window["_ie_firstload"] = false;
+ }
+
+ // Accessor functions for obtaining specific elements of the page.
+ function getHistoryFrame()
+ {
+ return document.getElementById('ie_historyFrame');
+ }
+
+ function getAnchorElement()
+ {
+ return document.getElementById('firefox_anchorDiv');
+ }
+
+ function getFormElement()
+ {
+ return document.getElementById('safari_formDiv');
+ }
+
+ function getRememberElement()
+ {
+ return document.getElementById("safari_remember_field");
+ }
+
+ /* Get the Flash player object for performing ExternalInterface callbacks. */
+ function getPlayer(objectId) {
+ var objectId = objectId || null;
+ var player = null; /* AJH, needed? = document.getElementById(getPlayerId()); */
+ if (browser.ie && objectId != null) {
+ player = document.getElementById(objectId);
+ }
+ if (player == null) {
+ player = document.getElementsByTagName('object')[0];
+ }
+
+ if (player == null || player.object == null) {
+ player = document.getElementsByTagName('embed')[0];
+ }
+
+ return player;
+ }
+
+ function getPlayers() {
+ var players = [];
+ if (players.length == 0) {
+ var tmp = document.getElementsByTagName('object');
+ players = tmp;
+ }
+
+ if (players.length == 0 || players[0].object == null) {
+ var tmp = document.getElementsByTagName('embed');
+ players = tmp;
+ }
+ return players;
+ }
+
+ function getIframeHash() {
+ var doc = getHistoryFrame().contentWindow.document;
+ var hash = String(doc.location.search);
+ if (hash.length == 1 && hash.charAt(0) == "?") {
+ hash = "";
+ }
+ else if (hash.length >= 2 && hash.charAt(0) == "?") {
+ hash = hash.substring(1);
+ }
+ return hash;
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function getHash() {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ var idx = document.location.href.indexOf('#');
+ return (idx >= 0) ? document.location.href.substr(idx+1) : '';
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function setHash(hash) {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ if (hash == '') hash = '#'
+ document.location.hash = hash;
+ }
+
+ function createState(baseUrl, newUrl, flexAppUrl) {
+ return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
+ }
+
+ /* Add a history entry to the browser.
+ * baseUrl: the portion of the location prior to the '#'
+ * newUrl: the entire new URL, including '#' and following fragment
+ * flexAppUrl: the portion of the location following the '#' only
+ */
+ function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+ //delete all the history entries
+ forwardStack = [];
+
+ if (browser.ie) {
+ //Check to see if we are being asked to do a navigate for the first
+ //history entry, and if so ignore, because it's coming from the creation
+ //of the history iframe
+ if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
+ currentHref = initialHref;
+ return;
+ }
+ if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
+ newUrl = baseUrl + '#' + defaultHash;
+ flexAppUrl = defaultHash;
+ } else {
+ // for IE, tell the history frame to go somewhere without a '#'
+ // in order to get this entry into the browser history.
+ getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+ }
+ setHash(flexAppUrl);
+ } else {
+
+ //ADR
+ if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
+ initialState = createState(baseUrl, newUrl, flexAppUrl);
+ } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+ backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
+ }
+
+ if (browser.safari) {
+ // for Safari, submit a form whose action points to the desired URL
+ if (browser.version <= 419.3) {
+ var file = window.location.pathname.toString();
+ file = file.substring(file.lastIndexOf("/")+1);
+ getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
+ //get the current elements and add them to the form
+ var qs = window.location.search.substring(1);
+ var qs_arr = qs.split("&");
+ for (var i = 0; i < qs_arr.length; i++) {
+ var tmp = qs_arr[i].split("=");
+ var elem = document.createElement("input");
+ elem.type = "hidden";
+ elem.name = tmp[0];
+ elem.value = tmp[1];
+ document.forms.historyForm.appendChild(elem);
+ }
+ document.forms.historyForm.submit();
+ } else {
+ top.location.hash = flexAppUrl;
+ }
+ // We also have to maintain the history by hand for Safari
+ historyHash[history.length] = flexAppUrl;
+ _storeStates();
+ } else {
+ // Otherwise, write an anchor into the page and tell the browser to go there
+ addAnchor(flexAppUrl);
+ setHash(flexAppUrl);
+ }
+ }
+ backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+ }
+
+ function _storeStates() {
+ if (browser.safari) {
+ getRememberElement().value = historyHash.join(",");
+ }
+ }
+
+ function handleBackButton() {
+ //The "current" page is always at the top of the history stack.
+ var current = backStack.pop();
+ if (!current) { return; }
+ var last = backStack[backStack.length - 1];
+ if (!last && backStack.length == 0){
+ last = initialState;
+ }
+ forwardStack.push(current);
+ }
+
+ function handleForwardButton() {
+ //summary: private method. Do not call this directly.
+
+ var last = forwardStack.pop();
+ if (!last) { return; }
+ backStack.push(last);
+ }
+
+ function handleArbitraryUrl() {
+ //delete all the history entries
+ forwardStack = [];
+ }
+
+ /* Called periodically to poll to see if we need to detect navigation that has occurred */
+ function checkForUrlChange() {
+
+ if (browser.ie) {
+ if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
+ //This occurs when the user has navigated to a specific URL
+ //within the app, and didn't use browser back/forward
+ //IE seems to have a bug where it stops updating the URL it
+ //shows the end-user at this point, but programatically it
+ //appears to be correct. Do a full app reload to get around
+ //this issue.
+ if (browser.version < 7) {
+ currentHref = document.location.href;
+ document.location.reload();
+ } else {
+ if (getHash() != getIframeHash()) {
+ // this.iframe.src = this.blankURL + hash;
+ var sourceToSet = historyFrameSourcePrefix + getHash();
+ getHistoryFrame().src = sourceToSet;
+ }
+ }
+ }
+ }
+
+ if (browser.safari) {
+ // For Safari, we have to check to see if history.length changed.
+ if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
+ //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
+ // If it did change, then we have to look the old state up
+ // in our hand-maintained array since document.location.hash
+ // won't have changed, then call back into BrowserManager.
+ currentHistoryLength = history.length;
+ var flexAppUrl = historyHash[currentHistoryLength];
+ if (flexAppUrl == '') {
+ //flexAppUrl = defaultHash;
+ }
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ _storeStates();
+ }
+ }
+ if (browser.firefox) {
+ if (currentHref != document.location.href) {
+ var bsl = backStack.length;
+
+ var urlActions = {
+ back: false,
+ forward: false,
+ set: false
+ }
+
+ if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
+ urlActions.back = true;
+ // FIXME: could this ever be a forward button?
+ // we can't clear it because we still need to check for forwards. Ugg.
+ // clearInterval(this.locationTimer);
+ handleBackButton();
+ }
+
+ // first check to see if we could have gone forward. We always halt on
+ // a no-hash item.
+ if (forwardStack.length > 0) {
+ if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {
+ urlActions.forward = true;
+ handleForwardButton();
+ }
+ }
+
+ // ok, that didn't work, try someplace back in the history stack
+ if ((bsl >= 2) && (backStack[bsl - 2])) {
+ if (backStack[bsl - 2].flexAppUrl == getHash()) {
+ urlActions.back = true;
+ handleBackButton();
+ }
+ }
+
+ if (!urlActions.back && !urlActions.forward) {
+ var foundInStacks = {
+ back: -1,
+ forward: -1
+ }
+
+ for (var i = 0; i < backStack.length; i++) {
+ if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.back = i;
+ }
+ }
+ for (var i = 0; i < forwardStack.length; i++) {
+ if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.forward = i;
+ }
+ }
+ handleArbitraryUrl();
+ }
+
+ // Firefox changed; do a callback into BrowserManager to tell it.
+ currentHref = document.location.href;
+ var flexAppUrl = getHash();
+ if (flexAppUrl == '') {
+ //flexAppUrl = defaultHash;
+ }
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ }
+ }
+ //setTimeout(checkForUrlChange, 50);
+ }
+
+ /* Write an anchor into the page to legitimize it as a URL for Firefox et al. */
+ function addAnchor(flexAppUrl)
+ {
+ if (document.getElementsByName(flexAppUrl).length == 0) {
+ getAnchorElement().innerHTML += "<a name='" + flexAppUrl + "'>" + flexAppUrl + "</a>";
+ }
+ }
+
+ var _initialize = function () {
+ if (browser.ie)
+ {
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
+ }
+ }
+ historyFrameSourcePrefix = iframe_location + "?";
+ var src = historyFrameSourcePrefix;
+
+ var iframe = document.createElement("iframe");
+ iframe.id = 'ie_historyFrame';
+ iframe.name = 'ie_historyFrame';
+ //iframe.src = historyFrameSourcePrefix;
+ try {
+ document.body.appendChild(iframe);
+ } catch(e) {
+ setTimeout(function() {
+ document.body.appendChild(iframe);
+ }, 0);
+ }
+ }
+
+ if (browser.safari)
+ {
+ var rememberDiv = document.createElement("div");
+ rememberDiv.id = 'safari_rememberDiv';
+ document.body.appendChild(rememberDiv);
+ rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
+
+ var formDiv = document.createElement("div");
+ formDiv.id = 'safari_formDiv';
+ document.body.appendChild(formDiv);
+
+ var reloader_content = document.createElement('div');
+ reloader_content.id = 'safarireloader';
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ html = (new String(s.src)).replace(".js", ".html");
+ }
+ }
+ reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
+ document.body.appendChild(reloader_content);
+ reloader_content.style.position = 'absolute';
+ reloader_content.style.left = reloader_content.style.top = '-9999px';
+ iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+ if (document.getElementById("safari_remember_field").value != "" ) {
+ historyHash = document.getElementById("safari_remember_field").value.split(",");
+ }
+
+ }
+
+ if (browser.firefox)
+ {
+ var anchorDiv = document.createElement("div");
+ anchorDiv.id = 'firefox_anchorDiv';
+ document.body.appendChild(anchorDiv);
+ }
+
+ //setTimeout(checkForUrlChange, 50);
+ }
+
+ return {
+ historyHash: historyHash,
+ backStack: function() { return backStack; },
+ forwardStack: function() { return forwardStack },
+ getPlayer: getPlayer,
+ initialize: function(src) {
+ _initialize(src);
+ },
+ setURL: function(url) {
+ document.location.href = url;
+ },
+ getURL: function() {
+ return document.location.href;
+ },
+ getTitle: function() {
+ return document.title;
+ },
+ setTitle: function(title) {
+ try {
+ backStack[backStack.length - 1].title = title;
+ } catch(e) { }
+ //if on safari, set the title to be the empty string.
+ if (browser.safari) {
+ if (title == "") {
+ try {
+ var tmp = window.location.href.toString();
+ title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));
+ } catch(e) {
+ title = "";
+ }
+ }
+ }
+ document.title = title;
+ },
+ setDefaultURL: function(def)
+ {
+ defaultHash = def;
+ def = getHash();
+ //trailing ? is important else an extra frame gets added to the history
+ //when navigating back to the first page. Alternatively could check
+ //in history frame navigation to compare # and ?.
+ if (browser.ie)
+ {
+ window['_ie_firstload'] = true;
+ var sourceToSet = historyFrameSourcePrefix + def;
+ var func = function() {
+ getHistoryFrame().src = sourceToSet;
+ window.location.replace("#" + def);
+ setInterval(checkForUrlChange, 50);
+ }
+ try {
+ func();
+ } catch(e) {
+ window.setTimeout(function() { func(); }, 0);
+ }
+ }
+
+ if (browser.safari)
+ {
+ currentHistoryLength = history.length;
+ if (historyHash.length == 0) {
+ historyHash[currentHistoryLength] = def;
+ var newloc = "#" + def;
+ window.location.replace(newloc);
+ } else {
+ //alert(historyHash[historyHash.length-1]);
+ }
+ //setHash(def);
+ setInterval(checkForUrlChange, 50);
+ }
+
+
+ if (browser.firefox || browser.opera)
+ {
+ var reg = new RegExp("#" + def + "$");
+ if (window.location.toString().match(reg)) {
+ } else {
+ var newloc ="#" + def;
+ window.location.replace(newloc);
+ }
+ setInterval(checkForUrlChange, 50);
+ //setHash(def);
+ }
+
+ },
+
+ /* Set the current browser URL; called from inside BrowserManager to propagate
+ * the application state out to the container.
+ */
+ setBrowserURL: function(flexAppUrl, objectId) {
+ if (browser.ie && typeof objectId != "undefined") {
+ currentObjectId = objectId;
+ }
+ //fromIframe = fromIframe || false;
+ //fromFlex = fromFlex || false;
+ //alert("setBrowserURL: " + flexAppUrl);
+ //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+ var pos = document.location.href.indexOf('#');
+ var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
+ var newUrl = baseUrl + '#' + flexAppUrl;
+
+ if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
+ currentHref = newUrl;
+ addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+ currentHistoryLength = history.length;
+ }
+
+ return false;
+ },
+
+ browserURLChange: function(flexAppUrl) {
+ var objectId = null;
+ if (browser.ie && currentObjectId != null) {
+ objectId = currentObjectId;
+ }
+ pendingURL = '';
+
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ try {
+ pl[i].browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+ } else {
+ try {
+ getPlayer(objectId).browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+
+ currentObjectId = null;
+ }
+
+ }
+
+})();
+
+// Initialization
+
+// Automated unit testing and other diagnostics
+
+function setURL(url)
+{
+ document.location.href = url;
+}
+
+function backButton()
+{
+ history.back();
+}
+
+function forwardButton()
+{
+ history.forward();
+}
+
+function goForwardOrBackInHistory(step)
+{
+ history.go(step);
+}
+
+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
+(function(i) {
+ var u =navigator.userAgent;var e=/*@cc_on!@*/false;
+ var st = setTimeout;
+ if(/webkit/i.test(u)){
+ st(function(){
+ var dr=document.readyState;
+ if(dr=="loaded"||dr=="complete"){i()}
+ else{st(arguments.callee,10);}},10);
+ } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
+ document.addEventListener("DOMContentLoaded",i,false);
+ } else if(e){
+ (function(){
+ var t=document.createElement('doc:rdy');
+ try{t.doScroll('left');
+ i();t=null;
+ }catch(e){st(arguments.callee,0);}})();
+ } else{
+ window.onload=i;
+ }
+})( function() {BrowserHistory.initialize();} );
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/historyFrame.html
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/historyFrame.html (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/history/historyFrame.html) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/historyFrame.html (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/history/historyFrame.html 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,29 @@
+<html>
+ <head>
+ <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+ <META HTTP-EQUIV="Expires" CONTENT="-1">
+ </head>
+ <body>
+ <script>
+ function processUrl()
+ {
+
+ var pos = url.indexOf("?");
+ url = pos != -1 ? url.substr(pos + 1) : "";
+ if (!parent._ie_firstload) {
+ parent.BrowserHistory.setBrowserURL(url);
+ try {
+ parent.BrowserHistory.browserURLChange(url);
+ } catch(e) { }
+ } else {
+ parent._ie_firstload = false;
+ }
+ }
+
+ var url = document.location.href;
+ processUrl();
+ document.write(url);
+ </script>
+ Hidden frame for Browser History support.
+ </body>
+</html>
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/images (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/images)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.html
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.html (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/main.html) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.html (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.html 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,121 @@
+<!-- saved from url=(0014)about:internet -->
+<html lang="en">
+
+<!--
+Smart developers always View Source.
+
+This application was built using Adobe Flex, an open source framework
+for building rich Internet applications that get delivered via the
+Flash Player or to desktops via Adobe AIR.
+
+Learn more about Flex at http://flex.org
+// -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+<!-- BEGIN Browser History required section -->
+<link rel="stylesheet" type="text/css" href="history/history.css" />
+<!-- END Browser History required section -->
+
+<title></title>
+<script src="AC_OETags.js" language="javascript"></script>
+
+<!-- BEGIN Browser History required section -->
+<script src="history/history.js" language="javascript"></script>
+<!-- END Browser History required section -->
+
+<style>
+body { margin: 0px; overflow:hidden }
+</style>
+<script language="JavaScript" type="text/javascript">
+<!--
+// -----------------------------------------------------------------------------
+// Globals
+// Major version of Flash required
+var requiredMajorVersion = 9;
+// Minor version of Flash required
+var requiredMinorVersion = 0;
+// Minor version of Flash required
+var requiredRevision = 28;
+// -----------------------------------------------------------------------------
+// -->
+</script>
+</head>
+
+<body scroll="no">
+<script language="JavaScript" type="text/javascript">
+<!--
+// Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
+var hasProductInstall = DetectFlashVer(6, 0, 65);
+
+// Version check based upon the values defined in globals
+var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
+
+if ( hasProductInstall && !hasRequestedVersion ) {
+ // DO NOT MODIFY THE FOLLOWING FOUR LINES
+ // Location visited after installation is complete if installation is required
+ var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
+ var MMredirectURL = window.location;
+ document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+ var MMdoctitle = document.title;
+
+ AC_FL_RunContent(
+ "src", "playerProductInstall",
+ "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
+ "width", "100%",
+ "height", "100%",
+ "align", "middle",
+ "id", "main",
+ "quality", "high",
+ "bgcolor", "#869ca7",
+ "name", "main",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ );
+} else if (hasRequestedVersion) {
+ // if we've detected an acceptable version
+ // embed the Flash Content SWF when all tests are passed
+ AC_FL_RunContent(
+ "src", "main",
+ "width", "100%",
+ "height", "100%",
+ "align", "middle",
+ "id", "main",
+ "quality", "high",
+ "bgcolor", "#869ca7",
+ "name", "main",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ );
+ } else { // flash is too old or we can't detect the plugin
+ var alternateContent = 'Alternate HTML content should be placed here. '
+ + 'This content requires the Adobe Flash Player. '
+ + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
+ document.write(alternateContent); // insert non-flash content
+ }
+// -->
+</script>
+<noscript>
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ id="main" width="100%" height="100%"
+ codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
+ <param name="movie" value="main.swf" />
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="#869ca7" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <embed src="main.swf" quality="high" bgcolor="#869ca7"
+ width="100%" height="100%" name="main" align="middle"
+ play="true"
+ loop="false"
+ quality="high"
+ allowScriptAccess="sameDomain"
+ type="application/x-shockwave-flash"
+ pluginspage="http://www.adobe.com/go/getflashplayer">
+ </embed>
+ </object>
+</noscript>
+</body>
+</html>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.swf
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/main.swf (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/main.swf)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/map (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/map)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/playerProductInstall.swf
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/bin-debug/playerProductInstall.swf (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/bin-debug/playerProductInstall.swf)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/AC_OETags.js
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/AC_OETags.js (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/AC_OETags.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/AC_OETags.js (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/AC_OETags.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,276 @@
+// Flash Player Version Detection - Rev 1.6
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ var versionRevision = descArray[3];
+ if (versionRevision == "") {
+ versionRevision = descArray[4];
+ }
+ if (versionRevision[0] == "d") {
+ versionRevision = versionRevision.substring(1);
+ } else if (versionRevision[0] == "r") {
+ versionRevision = versionRevision.substring(1);
+ if (versionRevision.indexOf("d") > 0) {
+ versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
+ }
+ }
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+ if (src.indexOf('?') != -1)
+ return src.replace(/\?/, ext+'?');
+ else
+ return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ str += '>';
+ for (var i in params)
+ str += '<param name="' + i + '" value="' + params[i] + '" /> ';
+ str += '</object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "id":
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/history)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.css
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.css (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/history/history.css) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.css (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.js
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.js (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/history/history.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.js (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/history.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,645 @@
+BrowserHistoryUtils = {
+ addEvent: function(elm, evType, fn, useCapture) {
+ useCapture = useCapture || false;
+ if (elm.addEventListener) {
+ elm.addEventListener(evType, fn, useCapture);
+ return true;
+ }
+ else if (elm.attachEvent) {
+ var r = elm.attachEvent('on' + evType, fn);
+ return r;
+ }
+ else {
+ elm['on' + evType] = fn;
+ }
+ }
+}
+
+BrowserHistory = (function() {
+ // type of browser
+ var browser = {
+ ie: false,
+ firefox: false,
+ safari: false,
+ opera: false,
+ version: -1
+ };
+
+ // if setDefaultURL has been called, our first clue
+ // that the SWF is ready and listening
+ //var swfReady = false;
+
+ // the URL we'll send to the SWF once it is ready
+ //var pendingURL = '';
+
+ // Default app state URL to use when no fragment ID present
+ var defaultHash = '';
+
+ // Last-known app state URL
+ var currentHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHash = document.location.hash;
+
+ // History frame source URL prefix (used only by IE)
+ var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+ // History maintenance (used only by Safari)
+ var currentHistoryLength = -1;
+
+ var historyHash = [];
+
+ var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
+
+ var backStack = [];
+ var forwardStack = [];
+
+ var currentObjectId = null;
+
+ //UserAgent detection
+ var useragent = navigator.userAgent.toLowerCase();
+
+ if (useragent.indexOf("opera") != -1) {
+ browser.opera = true;
+ } else if (useragent.indexOf("msie") != -1) {
+ browser.ie = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+ } else if (useragent.indexOf("safari") != -1) {
+ browser.safari = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+ } else if (useragent.indexOf("gecko") != -1) {
+ browser.firefox = true;
+ }
+
+ if (browser.ie == true && browser.version == 7) {
+ window["_ie_firstload"] = false;
+ }
+
+ // Accessor functions for obtaining specific elements of the page.
+ function getHistoryFrame()
+ {
+ return document.getElementById('ie_historyFrame');
+ }
+
+ function getAnchorElement()
+ {
+ return document.getElementById('firefox_anchorDiv');
+ }
+
+ function getFormElement()
+ {
+ return document.getElementById('safari_formDiv');
+ }
+
+ function getRememberElement()
+ {
+ return document.getElementById("safari_remember_field");
+ }
+
+ /* Get the Flash player object for performing ExternalInterface callbacks. */
+ function getPlayer(objectId) {
+ var objectId = objectId || null;
+ var player = null; /* AJH, needed? = document.getElementById(getPlayerId()); */
+ if (browser.ie && objectId != null) {
+ player = document.getElementById(objectId);
+ }
+ if (player == null) {
+ player = document.getElementsByTagName('object')[0];
+ }
+
+ if (player == null || player.object == null) {
+ player = document.getElementsByTagName('embed')[0];
+ }
+
+ return player;
+ }
+
+ function getPlayers() {
+ var players = [];
+ if (players.length == 0) {
+ var tmp = document.getElementsByTagName('object');
+ players = tmp;
+ }
+
+ if (players.length == 0 || players[0].object == null) {
+ var tmp = document.getElementsByTagName('embed');
+ players = tmp;
+ }
+ return players;
+ }
+
+ function getIframeHash() {
+ var doc = getHistoryFrame().contentWindow.document;
+ var hash = String(doc.location.search);
+ if (hash.length == 1 && hash.charAt(0) == "?") {
+ hash = "";
+ }
+ else if (hash.length >= 2 && hash.charAt(0) == "?") {
+ hash = hash.substring(1);
+ }
+ return hash;
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function getHash() {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ var idx = document.location.href.indexOf('#');
+ return (idx >= 0) ? document.location.href.substr(idx+1) : '';
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function setHash(hash) {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ if (hash == '') hash = '#'
+ document.location.hash = hash;
+ }
+
+ function createState(baseUrl, newUrl, flexAppUrl) {
+ return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
+ }
+
+ /* Add a history entry to the browser.
+ * baseUrl: the portion of the location prior to the '#'
+ * newUrl: the entire new URL, including '#' and following fragment
+ * flexAppUrl: the portion of the location following the '#' only
+ */
+ function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+ //delete all the history entries
+ forwardStack = [];
+
+ if (browser.ie) {
+ //Check to see if we are being asked to do a navigate for the first
+ //history entry, and if so ignore, because it's coming from the creation
+ //of the history iframe
+ if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
+ currentHref = initialHref;
+ return;
+ }
+ if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
+ newUrl = baseUrl + '#' + defaultHash;
+ flexAppUrl = defaultHash;
+ } else {
+ // for IE, tell the history frame to go somewhere without a '#'
+ // in order to get this entry into the browser history.
+ getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+ }
+ setHash(flexAppUrl);
+ } else {
+
+ //ADR
+ if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
+ initialState = createState(baseUrl, newUrl, flexAppUrl);
+ } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+ backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
+ }
+
+ if (browser.safari) {
+ // for Safari, submit a form whose action points to the desired URL
+ if (browser.version <= 419.3) {
+ var file = window.location.pathname.toString();
+ file = file.substring(file.lastIndexOf("/")+1);
+ getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
+ //get the current elements and add them to the form
+ var qs = window.location.search.substring(1);
+ var qs_arr = qs.split("&");
+ for (var i = 0; i < qs_arr.length; i++) {
+ var tmp = qs_arr[i].split("=");
+ var elem = document.createElement("input");
+ elem.type = "hidden";
+ elem.name = tmp[0];
+ elem.value = tmp[1];
+ document.forms.historyForm.appendChild(elem);
+ }
+ document.forms.historyForm.submit();
+ } else {
+ top.location.hash = flexAppUrl;
+ }
+ // We also have to maintain the history by hand for Safari
+ historyHash[history.length] = flexAppUrl;
+ _storeStates();
+ } else {
+ // Otherwise, write an anchor into the page and tell the browser to go there
+ addAnchor(flexAppUrl);
+ setHash(flexAppUrl);
+ }
+ }
+ backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+ }
+
+ function _storeStates() {
+ if (browser.safari) {
+ getRememberElement().value = historyHash.join(",");
+ }
+ }
+
+ function handleBackButton() {
+ //The "current" page is always at the top of the history stack.
+ var current = backStack.pop();
+ if (!current) { return; }
+ var last = backStack[backStack.length - 1];
+ if (!last && backStack.length == 0){
+ last = initialState;
+ }
+ forwardStack.push(current);
+ }
+
+ function handleForwardButton() {
+ //summary: private method. Do not call this directly.
+
+ var last = forwardStack.pop();
+ if (!last) { return; }
+ backStack.push(last);
+ }
+
+ function handleArbitraryUrl() {
+ //delete all the history entries
+ forwardStack = [];
+ }
+
+ /* Called periodically to poll to see if we need to detect navigation that has occurred */
+ function checkForUrlChange() {
+
+ if (browser.ie) {
+ if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
+ //This occurs when the user has navigated to a specific URL
+ //within the app, and didn't use browser back/forward
+ //IE seems to have a bug where it stops updating the URL it
+ //shows the end-user at this point, but programatically it
+ //appears to be correct. Do a full app reload to get around
+ //this issue.
+ if (browser.version < 7) {
+ currentHref = document.location.href;
+ document.location.reload();
+ } else {
+ if (getHash() != getIframeHash()) {
+ // this.iframe.src = this.blankURL + hash;
+ var sourceToSet = historyFrameSourcePrefix + getHash();
+ getHistoryFrame().src = sourceToSet;
+ }
+ }
+ }
+ }
+
+ if (browser.safari) {
+ // For Safari, we have to check to see if history.length changed.
+ if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
+ //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
+ // If it did change, then we have to look the old state up
+ // in our hand-maintained array since document.location.hash
+ // won't have changed, then call back into BrowserManager.
+ currentHistoryLength = history.length;
+ var flexAppUrl = historyHash[currentHistoryLength];
+ if (flexAppUrl == '') {
+ //flexAppUrl = defaultHash;
+ }
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ _storeStates();
+ }
+ }
+ if (browser.firefox) {
+ if (currentHref != document.location.href) {
+ var bsl = backStack.length;
+
+ var urlActions = {
+ back: false,
+ forward: false,
+ set: false
+ }
+
+ if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
+ urlActions.back = true;
+ // FIXME: could this ever be a forward button?
+ // we can't clear it because we still need to check for forwards. Ugg.
+ // clearInterval(this.locationTimer);
+ handleBackButton();
+ }
+
+ // first check to see if we could have gone forward. We always halt on
+ // a no-hash item.
+ if (forwardStack.length > 0) {
+ if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {
+ urlActions.forward = true;
+ handleForwardButton();
+ }
+ }
+
+ // ok, that didn't work, try someplace back in the history stack
+ if ((bsl >= 2) && (backStack[bsl - 2])) {
+ if (backStack[bsl - 2].flexAppUrl == getHash()) {
+ urlActions.back = true;
+ handleBackButton();
+ }
+ }
+
+ if (!urlActions.back && !urlActions.forward) {
+ var foundInStacks = {
+ back: -1,
+ forward: -1
+ }
+
+ for (var i = 0; i < backStack.length; i++) {
+ if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.back = i;
+ }
+ }
+ for (var i = 0; i < forwardStack.length; i++) {
+ if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.forward = i;
+ }
+ }
+ handleArbitraryUrl();
+ }
+
+ // Firefox changed; do a callback into BrowserManager to tell it.
+ currentHref = document.location.href;
+ var flexAppUrl = getHash();
+ if (flexAppUrl == '') {
+ //flexAppUrl = defaultHash;
+ }
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ }
+ }
+ //setTimeout(checkForUrlChange, 50);
+ }
+
+ /* Write an anchor into the page to legitimize it as a URL for Firefox et al. */
+ function addAnchor(flexAppUrl)
+ {
+ if (document.getElementsByName(flexAppUrl).length == 0) {
+ getAnchorElement().innerHTML += "<a name='" + flexAppUrl + "'>" + flexAppUrl + "</a>";
+ }
+ }
+
+ var _initialize = function () {
+ if (browser.ie)
+ {
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
+ }
+ }
+ historyFrameSourcePrefix = iframe_location + "?";
+ var src = historyFrameSourcePrefix;
+
+ var iframe = document.createElement("iframe");
+ iframe.id = 'ie_historyFrame';
+ iframe.name = 'ie_historyFrame';
+ //iframe.src = historyFrameSourcePrefix;
+ try {
+ document.body.appendChild(iframe);
+ } catch(e) {
+ setTimeout(function() {
+ document.body.appendChild(iframe);
+ }, 0);
+ }
+ }
+
+ if (browser.safari)
+ {
+ var rememberDiv = document.createElement("div");
+ rememberDiv.id = 'safari_rememberDiv';
+ document.body.appendChild(rememberDiv);
+ rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
+
+ var formDiv = document.createElement("div");
+ formDiv.id = 'safari_formDiv';
+ document.body.appendChild(formDiv);
+
+ var reloader_content = document.createElement('div');
+ reloader_content.id = 'safarireloader';
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ html = (new String(s.src)).replace(".js", ".html");
+ }
+ }
+ reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
+ document.body.appendChild(reloader_content);
+ reloader_content.style.position = 'absolute';
+ reloader_content.style.left = reloader_content.style.top = '-9999px';
+ iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+ if (document.getElementById("safari_remember_field").value != "" ) {
+ historyHash = document.getElementById("safari_remember_field").value.split(",");
+ }
+
+ }
+
+ if (browser.firefox)
+ {
+ var anchorDiv = document.createElement("div");
+ anchorDiv.id = 'firefox_anchorDiv';
+ document.body.appendChild(anchorDiv);
+ }
+
+ //setTimeout(checkForUrlChange, 50);
+ }
+
+ return {
+ historyHash: historyHash,
+ backStack: function() { return backStack; },
+ forwardStack: function() { return forwardStack },
+ getPlayer: getPlayer,
+ initialize: function(src) {
+ _initialize(src);
+ },
+ setURL: function(url) {
+ document.location.href = url;
+ },
+ getURL: function() {
+ return document.location.href;
+ },
+ getTitle: function() {
+ return document.title;
+ },
+ setTitle: function(title) {
+ try {
+ backStack[backStack.length - 1].title = title;
+ } catch(e) { }
+ //if on safari, set the title to be the empty string.
+ if (browser.safari) {
+ if (title == "") {
+ try {
+ var tmp = window.location.href.toString();
+ title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));
+ } catch(e) {
+ title = "";
+ }
+ }
+ }
+ document.title = title;
+ },
+ setDefaultURL: function(def)
+ {
+ defaultHash = def;
+ def = getHash();
+ //trailing ? is important else an extra frame gets added to the history
+ //when navigating back to the first page. Alternatively could check
+ //in history frame navigation to compare # and ?.
+ if (browser.ie)
+ {
+ window['_ie_firstload'] = true;
+ var sourceToSet = historyFrameSourcePrefix + def;
+ var func = function() {
+ getHistoryFrame().src = sourceToSet;
+ window.location.replace("#" + def);
+ setInterval(checkForUrlChange, 50);
+ }
+ try {
+ func();
+ } catch(e) {
+ window.setTimeout(function() { func(); }, 0);
+ }
+ }
+
+ if (browser.safari)
+ {
+ currentHistoryLength = history.length;
+ if (historyHash.length == 0) {
+ historyHash[currentHistoryLength] = def;
+ var newloc = "#" + def;
+ window.location.replace(newloc);
+ } else {
+ //alert(historyHash[historyHash.length-1]);
+ }
+ //setHash(def);
+ setInterval(checkForUrlChange, 50);
+ }
+
+
+ if (browser.firefox || browser.opera)
+ {
+ var reg = new RegExp("#" + def + "$");
+ if (window.location.toString().match(reg)) {
+ } else {
+ var newloc ="#" + def;
+ window.location.replace(newloc);
+ }
+ setInterval(checkForUrlChange, 50);
+ //setHash(def);
+ }
+
+ },
+
+ /* Set the current browser URL; called from inside BrowserManager to propagate
+ * the application state out to the container.
+ */
+ setBrowserURL: function(flexAppUrl, objectId) {
+ if (browser.ie && typeof objectId != "undefined") {
+ currentObjectId = objectId;
+ }
+ //fromIframe = fromIframe || false;
+ //fromFlex = fromFlex || false;
+ //alert("setBrowserURL: " + flexAppUrl);
+ //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+ var pos = document.location.href.indexOf('#');
+ var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
+ var newUrl = baseUrl + '#' + flexAppUrl;
+
+ if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
+ currentHref = newUrl;
+ addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+ currentHistoryLength = history.length;
+ }
+
+ return false;
+ },
+
+ browserURLChange: function(flexAppUrl) {
+ var objectId = null;
+ if (browser.ie && currentObjectId != null) {
+ objectId = currentObjectId;
+ }
+ pendingURL = '';
+
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ try {
+ pl[i].browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+ } else {
+ try {
+ getPlayer(objectId).browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+
+ currentObjectId = null;
+ }
+
+ }
+
+})();
+
+// Initialization
+
+// Automated unit testing and other diagnostics
+
+function setURL(url)
+{
+ document.location.href = url;
+}
+
+function backButton()
+{
+ history.back();
+}
+
+function forwardButton()
+{
+ history.forward();
+}
+
+function goForwardOrBackInHistory(step)
+{
+ history.go(step);
+}
+
+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
+(function(i) {
+ var u =navigator.userAgent;var e=/*@cc_on!@*/false;
+ var st = setTimeout;
+ if(/webkit/i.test(u)){
+ st(function(){
+ var dr=document.readyState;
+ if(dr=="loaded"||dr=="complete"){i()}
+ else{st(arguments.callee,10);}},10);
+ } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
+ document.addEventListener("DOMContentLoaded",i,false);
+ } else if(e){
+ (function(){
+ var t=document.createElement('doc:rdy');
+ try{t.doScroll('left');
+ i();t=null;
+ }catch(e){st(arguments.callee,0);}})();
+ } else{
+ window.onload=i;
+ }
+})( function() {BrowserHistory.initialize();} );
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/historyFrame.html
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/historyFrame.html (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/history/historyFrame.html) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/historyFrame.html (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/history/historyFrame.html 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,29 @@
+<html>
+ <head>
+ <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+ <META HTTP-EQUIV="Expires" CONTENT="-1">
+ </head>
+ <body>
+ <script>
+ function processUrl()
+ {
+
+ var pos = url.indexOf("?");
+ url = pos != -1 ? url.substr(pos + 1) : "";
+ if (!parent._ie_firstload) {
+ parent.BrowserHistory.setBrowserURL(url);
+ try {
+ parent.BrowserHistory.browserURLChange(url);
+ } catch(e) { }
+ } else {
+ parent._ie_firstload = false;
+ }
+ }
+
+ var url = document.location.href;
+ processUrl();
+ document.write(url);
+ </script>
+ Hidden frame for Browser History support.
+ </body>
+</html>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/index.template.html
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/index.template.html (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/index.template.html) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/index.template.html (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/index.template.html 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,121 @@
+<!-- saved from url=(0014)about:internet -->
+<html lang="en">
+
+<!--
+Smart developers always View Source.
+
+This application was built using Adobe Flex, an open source framework
+for building rich Internet applications that get delivered via the
+Flash Player or to desktops via Adobe AIR.
+
+Learn more about Flex at http://flex.org
+// -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+<!-- BEGIN Browser History required section -->
+<link rel="stylesheet" type="text/css" href="history/history.css" />
+<!-- END Browser History required section -->
+
+<title>${title}</title>
+<script src="AC_OETags.js" language="javascript"></script>
+
+<!-- BEGIN Browser History required section -->
+<script src="history/history.js" language="javascript"></script>
+<!-- END Browser History required section -->
+
+<style>
+body { margin: 0px; overflow:hidden }
+</style>
+<script language="JavaScript" type="text/javascript">
+<!--
+// -----------------------------------------------------------------------------
+// Globals
+// Major version of Flash required
+var requiredMajorVersion = ${version_major};
+// Minor version of Flash required
+var requiredMinorVersion = ${version_minor};
+// Minor version of Flash required
+var requiredRevision = ${version_revision};
+// -----------------------------------------------------------------------------
+// -->
+</script>
+</head>
+
+<body scroll="no">
+<script language="JavaScript" type="text/javascript">
+<!--
+// Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
+var hasProductInstall = DetectFlashVer(6, 0, 65);
+
+// Version check based upon the values defined in globals
+var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
+
+if ( hasProductInstall && !hasRequestedVersion ) {
+ // DO NOT MODIFY THE FOLLOWING FOUR LINES
+ // Location visited after installation is complete if installation is required
+ var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
+ var MMredirectURL = window.location;
+ document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+ var MMdoctitle = document.title;
+
+ AC_FL_RunContent(
+ "src", "playerProductInstall",
+ "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
+ "width", "${width}",
+ "height", "${height}",
+ "align", "middle",
+ "id", "${application}",
+ "quality", "high",
+ "bgcolor", "${bgcolor}",
+ "name", "${application}",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ );
+} else if (hasRequestedVersion) {
+ // if we've detected an acceptable version
+ // embed the Flash Content SWF when all tests are passed
+ AC_FL_RunContent(
+ "src", "${swf}",
+ "width", "${width}",
+ "height", "${height}",
+ "align", "middle",
+ "id", "${application}",
+ "quality", "high",
+ "bgcolor", "${bgcolor}",
+ "name", "${application}",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ );
+ } else { // flash is too old or we can't detect the plugin
+ var alternateContent = 'Alternate HTML content should be placed here. '
+ + 'This content requires the Adobe Flash Player. '
+ + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
+ document.write(alternateContent); // insert non-flash content
+ }
+// -->
+</script>
+<noscript>
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ id="${application}" width="${width}" height="${height}"
+ codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
+ <param name="movie" value="${swf}.swf" />
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="${bgcolor}" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <embed src="${swf}.swf" quality="high" bgcolor="${bgcolor}"
+ width="${width}" height="${height}" name="${application}" align="middle"
+ play="true"
+ loop="false"
+ quality="high"
+ allowScriptAccess="sameDomain"
+ type="application/x-shockwave-flash"
+ pluginspage="http://www.adobe.com/go/getflashplayer">
+ </embed>
+ </object>
+</noscript>
+</body>
+</html>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/playerProductInstall.swf
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/html-template/playerProductInstall.swf (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/html-template/playerProductInstall.swf)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/libs (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/libs)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/libs/CSSPlus.swc
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/libs/CSSPlus.swc (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/libs/CSSPlus.swc)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/libs/Degrafa_.2.11.swc
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/libs/Degrafa_.2.11.swc (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/libs/Degrafa_.2.11.swc)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/css (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/css)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/css/Main.css
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/css/Main.css (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/css/Main.css) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/css/Main.css (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/css/Main.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,325 @@
+/* CSS file */
+Application
+{
+ backgroundColor:#f9f6d9;
+ borderSkin: ClassReference("com.degrafa.skins.CSSSkin");
+ background-repeat:repeat;
+ background-image: Embed(source='assets/images/main_bg.png');
+ fontFamily: "Lucida Grande";
+ color: #000000;
+ fontSize: 12;
+ themeColor:#288bca;
+}
+MenuBar
+{
+ background-skin: ClassReference("com.degrafa.skins.CSSSkin");
+ background-image: Embed(source='assets/images/header_bg.png');
+ background-repeat:repeat-x;
+ menuStyleName: menuStyleName;
+ selectionColor:#4385d9;
+ rollOverColor:#4385d9;
+ textRollOverColor:#ffffff;
+ textSelectedColor:#ffffff;
+}
+
+.menuStyleName
+{
+
+}
+Panel{
+ titleStyleName: "panelTitle";
+ contentStyleName: contentStyleName;
+ headerHeight:35;
+
+ border-skin:ClassReference("assets.skins.SmartPanelSkin");
+ background-skin: ClassReference("assets.skins.PanelBackgroundSkin");
+ backgroundRepeat:repeat;
+ border-background-image:Embed(source='assets/images/panel_bg.png');
+ cornerRadius:8;
+ bottomCornerRadius: 3;
+ filters:dropShadow;
+ borderColor:#dddddd;
+ border-style: none;
+ paddingTop:20;
+ paddingLeft:20;
+ paddingRight:20;
+ paddingBottom:20;
+}
+.panelTitle{
+ textAlign:center;
+ fontSize:13;
+}
+.contentStyleName
+{
+ skin: ClassReference("assets.skins.PanelContentSkin");
+ filters: contentDropShadow;
+ cornerRadius: 0;
+}
+
+Alert
+{
+ color:#333333;
+ paddingBottom: 10;
+}
+Button
+{
+ upSkin:Embed(source='assets/images/glass_btn_up.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ downSkin:Embed(source='assets/images/glass_btn_over.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ overSkin:Embed(source='assets/images/glass_btn_over.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ selectedUpSkin:Embed(source='assets/images/glass_btn_over.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ selectedOverSkin:Embed(source='assets/images/glass_btn_over.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ disabledSkin:Embed(source='assets/images/glass_btn_disable.png', scaleGridLeft=10, scaleGridRight=11, scaleGridTop=10,scaleGridBottom=11);
+ color:#000000;
+ textRollOverColor:#000000;
+}
+
+
+ScrollBar{
+ trackSkin:Embed(source='assets/images/track_skin.png');
+ thumbUpSkin:Embed(source='assets/images/thum_skin.png', scaleGridLeft=8, scaleGridRight=9, scaleGridTop=11,scaleGridBottom=12);
+ thumbOverSkin:Embed(source='assets/images/thum_skin.png', scaleGridLeft=8, scaleGridRight=9, scaleGridTop=11,scaleGridBottom=12);
+ thumbDownSkin:Embed(source='assets/images/thum_skin.png', scaleGridLeft=8, scaleGridRight=9, scaleGridTop=11,scaleGridBottom=12);
+ upArrowUpSkin:Embed(source='assets/images/scroll_arrow_up_up.png');
+ upArrowDownSkin:Embed(source='assets/images/scroll_arrow_up_over.png');
+ upArrowOverSkin:Embed(source='assets/images/scroll_arrow_up_over.png');
+ downArrowUpSkin:Embed(source='assets/images/scroll_arrow_down_up.png');
+ downArrowDownSkin:Embed(source='assets/images/scroll_arrow_down_over.png');
+ downArrowOverSkin:Embed(source='assets/images/scroll_arrow_down_over.png');
+}
+
+DataGrid{
+ headerColors:#7ab8ef,#c6fdff;
+ selectionColor:#4385d9;
+ rollOverColor:#4385d9;
+ textRollOverColor:#ffffff;
+ textSelectedColor:#ffffff;
+}
+.searchInput{
+ borderSkin:Embed(source='assets/images/search_input.png', scaleGridLeft=22, scaleGridRight=65, scaleGridTop=18,scaleGridBottom=19);
+ cornerRadius:12;
+ textIndent:18;
+ fontSize:12;
+ fontFamily:Verdana;
+ borderThikness:1;
+ borderStyle:solid;
+}
+TabNavigator, TabBar
+{
+ tabStyleName: tabStyleName;
+ firstTabStyleName: firstTab;
+ lastTabStyleName: lastTab;
+ fontSize: 12;
+}
+.tabStyleName
+{
+ upSkin:Embed(source='assets/images/tab_middle.png', scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ downSkin: Embed(source='assets/images/tab_middle_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ overSkin: Embed(source='assets/images/tab_middle_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedUpSkin: Embed(source='assets/images/tab_middle_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedOverSkin: Embed(source='assets/images/tab_middle_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ paddingBottom: 3;
+ paddingTop: 5;
+ paddingLeft: 9;
+ paddingRight: 9;
+}
+
+.firstTab {
+ upSkin:Embed(source='assets/images/tab_first.png', scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ downSkin:Embed(source='assets/images/tab_first_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ overSkin:Embed(source='assets/images/tab_first_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedUpSkin:Embed(source='assets/images/tab_first_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedOverSkin:Embed(source='assets/images/tab_first_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ paddingBottom: 3;
+ paddingTop: 5;
+ paddingLeft: 9;
+ paddingRight: 9;
+}
+
+.lastTab {
+ upSkin:Embed(source='assets/images/tab_last.png', scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ downSkin:Embed(source='assets/images/tab_last_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ overSkin:Embed(source='assets/images/tab_last_over.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedUpSkin:Embed(source='assets/images/tab_last_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ selectedOverSkin:Embed(source='assets/images/tab_last_selected.png',
+ scaleGridLeft=9, scaleGridRight=37, scaleGridTop=13,scaleGridBottom=14);
+ paddingBottom: 3;
+ paddingTop: 5;
+ paddingLeft: 9;
+ paddingRight: 9;
+}
+
+RadioButton
+{
+ upIcon: Embed(source='assets/images/radio_up.png');
+ downIcon:Embed(source='assets/images/radio_over.png');
+ overIcon:Embed(source='assets/images/radio_over.png');
+ selectedUpIcon:Embed(source='assets/images/radio_selected.png');
+ selectedOverIcon:Embed(source='assets/images/radio_selected.png');
+ selectedDownIcon:Embed(source='assets/images/radio_selected.png');
+}
+Slider, VSlider
+{
+ thumbUpSkin: Embed(source='assets/images/slider_thumb_up.png', scaleGridLeft=6, scaleGridRight=7, scaleGridTop=7,scaleGridBottom=8);
+ thumbOverSkin: Embed(source='assets/images/slider_thumb_up.png', scaleGridLeft=6, scaleGridRight=7, scaleGridTop=7,scaleGridBottom=8);
+ thumbDownSkin: Embed(source='assets/images/slider_thumb_up.png', scaleGridLeft=6, scaleGridRight=7, scaleGridTop=7,scaleGridBottom=8);
+}
+ ComboBox{
+ upSkin: Embed(source='assets/images/comboBox_up.png',scaleGridLeft=10, scaleGridRight=160, scaleGridTop=10,scaleGridBottom=11);
+ overSkin:Embed(source='assets/images/comboBox_over.png',scaleGridLeft=10, scaleGridRight=160, scaleGridTop=10,scaleGridBottom=11);
+ downSkin:Embed(source='assets/images/comboBox_over.png',scaleGridLeft=10, scaleGridRight=160, scaleGridTop=10,scaleGridBottom=11);
+ selectedUpSkin:Embed(source='assets/images/comboBox_up.png',scaleGridLeft=10, scaleGridRight=160, scaleGridTop=10,scaleGridBottom=11);
+ selectedOverSkin:Embed(source='assets/images/comboBox_up.png',scaleGridLeft=10, scaleGridRight=160, scaleGridTop=10,scaleGridBottom=11);
+}
+ComboBox, Tree, List
+{
+ selectionColor:#4385d9;
+ rollOverColor:#4385d9;
+ textRollOverColor:#ffffff;
+ textSelectedColor:#ffffff;
+}
+
+DateChooser {
+ headerColors: #C9C9C9, #C9C9C9;
+}
+
+Tree {
+ folderClosedIcon: Embed(source='assets/images/tree_folder.png');
+ folderOpenIcon: Embed(source='assets/images/tree_folder_open.png');
+}
+
+CheckBox
+{
+ upIcon: Embed(source='assets/images/checkBox_up.png');
+ downIcon:Embed(source='assets/images/checkBox_selected.png');
+ overIcon:Embed(source='assets/images/checkBox_over.png');
+ selectedUpIcon:Embed(source='assets/images/checkBox_selected.png');
+ selectedOverIcon:Embed(source='assets/images/checkBox_selected.png');
+ selectedDownIcon:Embed(source='assets/images/checkBox_selected.png');
+}
+
+Accordion {
+ headerStyleName: accordionHeader;
+}
+
+.accordionHeader {
+ fontSize: 11;
+ fillColors: #FFFFFF, #EEEEEE;
+ fillAlphas: 1, 1;
+ paddingTop: 7;
+ paddingLeft: 10;
+ paddingBottom: 4;
+ paddingRight: 10;
+
+}
+
+ButtonBar {
+ buttonStyleName: buttonBarButton;
+ firstButtonStyleName: firstButtonBarButton;
+ lastButtonStyleName: lastButtonBarButton;
+ fontSize: 11;
+}
+
+.buttonBarButton {
+ upSkin:Embed(source='assets/images/button_bar_middle.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+ downSkin:Embed(source='assets/images/button_bar_middle_selected.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+ overSkin:Embed(source='assets/images/button_bar_middle_selected.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+ selectedUpSkin:Embed(source='assets/images/button_bar_middle_selected.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+ selectedOverSkin:Embed(source='assets/images/button_bar_middle_selected.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+ disabledSkin:Embed(source='assets/images/button_bar_middle_disabled.png',
+ scaleGridLeft=4, scaleGridRight=16, scaleGridTop=11,scaleGridBottom=12);
+
+ paddingTop: 5;
+ paddingBottom: 4;
+}
+
+.firstButtonBarButton {
+ upSkin:Embed(source='assets/images/button_bar_left.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+ downSkin:Embed(source='assets/images/button_bar_left_selected.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+ overSkin:Embed(source='assets/images/button_bar_left_selected.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+ selectedUpSkin:Embed(source='assets/images/button_bar_left_selected.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+ selectedOverSkin:Embed(source='assets/images/button_bar_left_selected.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+ disabledSkin:Embed(source='assets/images/button_bar_left_disabled.png',
+ scaleGridLeft=10, scaleGridRight=11, scaleGridTop=11,scaleGridBottom=12);
+
+ paddingTop: 5;
+ paddingBottom: 4;
+}
+
+.lastButtonBarButton {
+ upSkin:Embed(source='assets/images/button_bar_right.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+ downSkin:Embed(source='assets/images/button_bar_right_selected.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+ overSkin:Embed(source='assets/images/button_bar_right_selected.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+ selectedUpSkin:Embed(source='assets/images/button_bar_right_selected.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+ selectedOverSkin:Embed(source='assets/images/button_bar_right_selected.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+ disabledSkin:Embed(source='assets/images/button_bar_right_disabled.png',
+ scaleGridLeft=10, scaleGridRight=14, scaleGridTop=11,scaleGridBottom=12);
+
+ paddingTop: 5;
+ paddingBottom: 4;
+ paddingRight: 7;
+}
+
+
+/****************************************************************************************************************
+ FILTERS *
+*****************************************************************************************************************
+*/
+.dropShadow
+{
+ filterClass:ClassReference('com.asfusion.skins.filters.CSSDropShadowFilter');
+ distance:5;
+ blurX:32;
+ blurY:32;
+ quality:3;
+ alpha:0.6;
+}
+.contentDropShadow
+{
+ filterClass:ClassReference('com.asfusion.skins.filters.CSSDropShadowFilter');
+ distance: 0;
+ blurX: 4;
+ blurY: 4;
+ quality:3;
+ alpha: 0.5;
+ inner: true;
+}
+
+/****************************************************************************************************************
+ FONTS *
+*****************************************************************************************************************
+*/
+@font-face {
+ src:url("assets/fonts/lucidaGrande.swf");
+ fontFamily: "Lucida Grande";
+}
+@font-face {
+ src:url("assets/fonts/lucidaGrande.swf");
+ fontFamily: "Lucida Grande";
+ fontWeight:bold;
+}
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/fonts (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/fonts)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/fonts/lucidaGrande.swf
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/fonts/lucidaGrande.swf (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/fonts/lucidaGrande.swf)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/ai.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/ai.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/ai.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/air.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/air.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/air.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fl.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fl.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/fl.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fw.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fw.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/fw.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fx.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/fx.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/fx.jpg)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/ps.jpg
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/icons/ps.jpg (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/icons/ps.jpg)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_disabled.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_disabled.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_disabled.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_left_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_disabled.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_disabled.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_disabled.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_middle_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_disabled.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_disabled.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_disabled.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/button_bar_right_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/checkBox_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/checkBox_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/checkBox_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/checkBox_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/comboBox_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/comboBox_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/comboBox_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/comboBox_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/comboBox_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/comboBox_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_disable.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_disable.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_disable.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/glass_btn_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/header_bg.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/header_bg.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/header_bg.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/main_bg.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/main_bg.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/main_bg.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/panel_bg.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/panel_bg.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/panel_bg.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/radio_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/radio_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/radio_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/radio_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_down_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/scroll_arrow_up_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/search_input.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/search_input.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/search_input.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/slider_thumb_up.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/slider_thumb_up.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/slider_thumb_up.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_first.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_first_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_first_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_first_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_last.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_last_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_last_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_last_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_middle.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_over.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_over.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_over.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_middle_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_selected.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tab_selected.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tab_selected.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/thum_skin.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/thum_skin.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/thum_skin.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/track_skin.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/track_skin.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/track_skin.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tree_folder.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tree_folder.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tree_folder.png)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tree_folder_open.png
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/images/tree_folder_open.png (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/images/tree_folder_open.png)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/skins)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/BaseSkin.as
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/BaseSkin.as (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/skins/BaseSkin.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/BaseSkin.as (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/BaseSkin.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,91 @@
+package assets.skins
+{
+ import com.asfusion.skins.filters.ICSSFilter;
+ import com.degrafa.Surface;
+
+ import flash.events.Event;
+ import flash.filters.BitmapFilter;
+
+ import mx.styles.CSSStyleDeclaration;
+ import mx.styles.IStyleClient;
+ import mx.styles.StyleManager;
+
+ public class BaseSkin extends Surface
+ {
+ [Bindable (event="skinSizeChange")]
+ protected var skinWidth:int;
+
+ [Bindable (event="skinSizeChange")]
+ protected var skinHeight:int;
+
+ //.........................................BaseSkin Contructor........................................
+ public function BaseSkin()
+ {
+ super();
+ }
+
+ //.........................................updateDisplayList..........................................
+ override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+ {
+ super.updateDisplayList(unscaledWidth, unscaledHeight);
+ if(unscaledWidth || unscaledHeight)
+ {
+ skinWidth = unscaledWidth;
+ skinHeight = unscaledHeight;
+ dispatchEvent( new Event("skinSizeChange"));
+ }
+ }
+
+ //.........................................styleName..........................................
+ override public function set styleName(value:Object):void
+ {
+ super.styleName = value;
+ if(!value is IStyleClient) return;
+
+ var bitmapFilters:Array = new Array();
+ var CSSfilters:Object;
+ if(value is IStyleClient)
+ {
+ CSSfilters = IStyleClient(value).getStyle('filters');
+ }
+ else if(value is CSSStyleDeclaration)
+ {
+ CSSfilters = CSSStyleDeclaration(value).getStyle('filters');
+ }
+ if(CSSfilters is String)
+ {
+ bitmapFilters.push(createFilter(CSSfilters as String));
+ }
+ else
+ {
+ for each( var filterStyleName:String in bitmapFilters)
+ {
+ bitmapFilters.push(createFilter(filterStyleName));
+ }
+ }
+ filters = bitmapFilters;
+ }
+
+ //.........................................createFilter..........................................
+ protected function createFilter(styleName:String):BitmapFilter
+ {
+ var CSSfilter:CSSStyleDeclaration = StyleManager.getStyleDeclaration("."+styleName);
+ var filterClass:Class = CSSfilter.getStyle('filterClass');
+ var filter:ICSSFilter = new filterClass();
+ filter.styleName = CSSfilter;
+ return filter.filter;
+ }
+
+ //.........................................getBottomCornerRadius..........................................
+ protected function getBottomCornerRadius():int
+ {
+ var bottomCornerRadius:* = getStyle('bottomCornerRadius');
+ var bottomCorners:int = 0;
+ if(bottomCornerRadius !== 0)
+ {
+ bottomCorners = bottomCornerRadius;
+ }
+ return bottomCorners;
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelBackgroundSkin.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelBackgroundSkin.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/skins/PanelBackgroundSkin.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelBackgroundSkin.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelBackgroundSkin.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<BaseSkin xmlns:mx="http://www.adobe.com/2006/mxml"
+ xmlns:degrafa="com.degrafa.*"
+ xmlns:paint="com.degrafa.paint.*"
+ xmlns:geometry="com.degrafa.geometry.*"
+ xmlns="assets.skins.*">
+
+ <!-- Creating fills. -->
+ <fills>
+ <paint:SolidFill id="whiteColor" color="#ffffff" alpha="0.5" />
+ <paint:BitmapFill id="bitmapFill"
+ source="{getStyle('borderBackgroundImage')}"
+ smooth="true"/>
+ </fills>
+
+ <!-- Creating Strokes. -->
+ <strokes>
+ <paint:SolidStroke id="stroke" color="{getStyle('borderColor')}" alpha="0.5" weight="1" pixelHinting="true"/>
+ </strokes>
+
+ <!-- Creating a Geometry Group. -->
+ <graphicsData>
+ <degrafa:GeometryGroup>
+ <geometry:RoundedRectangleComplex width="{skinWidth}" height="{skinHeight}"
+ stroke="{stroke}" fill="{bitmapFill}"
+ bottomLeftRadius="{getBottomCornerRadius()}"
+ bottomRightRadius="{getBottomCornerRadius()}"
+ topLeftRadius="{getStyle('cornerRadius')}"
+ topRightRadius="{getStyle('cornerRadius')}"/>
+ </degrafa:GeometryGroup>
+ </graphicsData>
+
+</BaseSkin>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelContentSkin.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelContentSkin.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/skins/PanelContentSkin.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelContentSkin.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/PanelContentSkin.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<BaseSkin xmlns:mx="http://www.adobe.com/2006/mxml"
+ xmlns:degrafa="com.degrafa.*"
+ xmlns:paint="com.degrafa.paint.*"
+ xmlns:geometry="com.degrafa.geometry.*"
+ xmlns="assets.skins.*">
+
+ <!-- Creating fills. -->
+ <fills>
+ <paint:SolidFill id="whiteColor" color="#ffffff" alpha="1" />
+ </fills>
+
+ <!-- Creating Strokes. -->
+ <strokes>
+ <paint:SolidStroke id="stroke" color="{getStyle('borderColor')}" alpha="0.5" weight="1" pixelHinting="true"/>
+ </strokes>
+
+ <!-- Creating a Geometry Group. -->
+ <graphicsData>
+ <degrafa:GeometryGroup>
+ <geometry:RoundedRectangleComplex width="{skinWidth}" height="{skinHeight}"
+ stroke="{stroke}" fill="{whiteColor}"
+ bottomLeftRadius="{getBottomCornerRadius()}"
+ bottomRightRadius="{getBottomCornerRadius()}"
+ topLeftRadius="{getStyle('cornerRadius')}"
+ topRightRadius="{getStyle('cornerRadius')}"/>
+ </degrafa:GeometryGroup>
+ </graphicsData>
+
+</BaseSkin>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/SmartPanelSkin.as
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/SmartPanelSkin.as (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/skins/SmartPanelSkin.as) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/SmartPanelSkin.as (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/skins/SmartPanelSkin.as 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,72 @@
+package assets.skins
+{
+ import flash.display.DisplayObject;
+
+ import mx.containers.Panel;
+ import mx.core.EdgeMetrics;
+ import mx.core.mx_internal;
+ import mx.skins.halo.PanelSkin;
+ import mx.styles.CSSStyleDeclaration;
+ import mx.styles.IStyleClient;
+ import mx.styles.StyleManager;
+ use namespace mx_internal;
+
+ public class SmartPanelSkin extends PanelSkin
+ {
+ private var backgroundComplete:Boolean;
+ private var contentComplete:Boolean;
+
+ public function SmartPanelSkin()
+ {
+ super();
+ }
+ override mx_internal function drawBorder(w:Number, h:Number):void
+ {
+ if(!parent || contentComplete) return;
+
+ contentComplete = true;
+ var contentStyleName:* = getStyle("contentStyleName");
+ if(contentStyleName)
+ {
+ var contentCSS:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + contentStyleName);
+ var contentSkin:Class = contentCSS.getStyle("skin");
+ if(contentSkin && parent is Panel)
+ {
+ var contentInstance:DisplayObject = new contentSkin();
+ if(contentInstance is IStyleClient) IStyleClient(contentInstance).styleName = contentCSS;
+ var metrics:EdgeMetrics = borderMetrics;
+ contentInstance.width = w - metrics.left - metrics.right;
+ contentInstance.height = h - metrics.bottom - metrics.top;
+ contentInstance.x = metrics.left;
+ contentInstance.y = metrics.top;
+ var panel:Panel = Panel(parent);
+ panel.rawChildren.addChildAt(contentInstance,1);
+ }
+ }
+ else
+ {
+ super.drawBorder(w,h);
+ }
+ }
+ override mx_internal function drawBackground(w:Number, h:Number):void
+ {
+ if(!parent || backgroundComplete) return;
+
+ backgroundComplete = true;
+ var backgroundSkin:Class = getStyle("backgroundSkin");
+ if(backgroundSkin && parent is Panel)
+ {
+ var backgroundInstance:DisplayObject = new backgroundSkin();
+ if(backgroundInstance is IStyleClient) IStyleClient(backgroundInstance).styleName = parent;
+ backgroundInstance.width = w;
+ backgroundInstance.height = h;
+ var panel:Panel = Panel(parent);
+ panel.rawChildren.addChildAt(backgroundInstance,0);
+ }
+ else
+ {
+ super.drawBackground(w,h);
+ }
+ }
+ }
+}
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/xml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/xml)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/xml/listData.xml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/xml/listData.xml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/assets/xml/listData.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/xml/listData.xml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/assets/xml/listData.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<items>
+ <item>
+ <image>assets/icons/fx.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/ai.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/ps.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/fw.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/fl.jpg</image>
+ </item>
+ <item>
+ <image>assets/icons/air.jpg</image>
+ </item>
+</items>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/SampleTitleWindow.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/SampleTitleWindow.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/SampleTitleWindow.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/SampleTitleWindow.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/SampleTitleWindow.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" creationComplete="centerWindow()" title="TitleWindow" showCloseButton="true" close="closeWindow()">
+
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+
+ public function centerWindow():void
+ {
+ PopUpManager.centerPopUp(this);
+ }
+
+ public function closeWindow():void
+ {
+ PopUpManager.removePopUp(this);
+ }
+
+ ]]>
+
+ </mx:Script>
+
+ <mx:Label text="This is a sample TitleWindow." verticalCenter="0" horizontalCenter="0"/>
+
+</mx:TitleWindow>
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views)
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Controls.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Controls.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views/Controls.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Controls.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Controls.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="600" height="300">
+ <mx:Button x="10" y="10" label="Button"/>
+ <mx:CheckBox x="90" y="10" label="Checkbox"/>
+
+ <mx:ComboBox x="506" y="40" prompt="Combo Box">
+ <mx:dataProvider>
+ <mx:Array>
+ <mx:Object label="Item 1"/>
+ <mx:Object label="Item 2"/>
+ <mx:Object label="Item 3"/>
+ <mx:Object label="Item 4"/>
+ </mx:Array>
+ </mx:dataProvider>
+ </mx:ComboBox>
+ <mx:DateChooser x="22" y="77"/>
+ <mx:DateField x="340" y="10"/>
+ <mx:HSlider x="243" y="77"/>
+ <mx:LinkButton x="302" y="40" label="LinkButton"/>
+
+ <mx:ProgressBar x="244" y="107" indeterminate="true"/>
+ <mx:RadioButton x="195" y="11" label="Radio"/>
+ <mx:RadioButton x="265" y="11" label="Radio2"/>
+ <mx:VSlider x="486" y="10"/>
+ <mx:HBox x="302" y="176" verticalAlign="middle">
+ <mx:HRule/>
+ <mx:Label text="HRule"/>
+ </mx:HBox>
+ <mx:HBox x="240" y="153" verticalAlign="middle">
+ <mx:VRule/>
+ <mx:Label text="VRule"/>
+ </mx:HBox>
+</mx:Canvas>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/List2.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/List2.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views/List2.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/List2.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/List2.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="410" height="200" paddingLeft="10">
+ <mx:Model id="listData" source="/assets/xml/listData.xml"/>
+ <mx:XMLList id="treeData">
+ <node label="Mail Box">
+ <node label="Inbox">
+ <node label="Marketing"/>
+ <node label="Product Management"/>
+ <node label="Personal"/>
+ </node>
+ <node label="Outbox">
+ <node label="Professional"/>
+ <node label="Personal"/>
+ </node>
+ <node label="Spam"/>
+ <node label="Sent"/>
+ </node>
+ </mx:XMLList>
+ <mx:XMLList id="employees">
+ <employee>
+ <name>Christina Coenraets</name>
+ <phone>555-219-2270</phone>
+ <email>ccoenraets@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ <employee>
+ <name>Joanne Wall</name>
+ <phone>555-219-2012</phone>
+ <email>jwall@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ <employee>
+ <name>Maurice Smith</name>
+ <phone>555-219-2012</phone>
+ <email>maurice@fictitious.com</email>
+ <active>false</active>
+ </employee>
+ <employee>
+ <name>Mary Jones</name>
+ <phone>555-219-2000</phone>
+ <email>mjones@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ </mx:XMLList>
+ <mx:VBox >
+ <mx:Label text="List"/>
+ <mx:List height="100%" width="160">
+ <mx:dataProvider>
+ <mx:Array>
+ <mx:Object label="Flex"/>
+ <mx:Object label="Illustrator"/>
+ <mx:Object label="Photoshop"/>
+ <mx:Object label="Fireworks"/>
+ <mx:Object label="Flash"/>
+ <mx:Object label="Adobe AIR"/>
+ </mx:Array>
+ </mx:dataProvider>
+ </mx:List>
+ </mx:VBox>
+ <mx:VBox width="330">
+ <mx:Label text="TileList"/>
+ <mx:TileList width="100%" height="220" dataProvider="{ listData.item }">
+ <mx:itemRenderer>
+ <mx:Component>
+ <mx:VBox paddingTop="4" paddingRight="4" paddingBottom="4" paddingLeft="4">
+ <mx:Image source="{ data.image }" width="90" height="90"/>
+ </mx:VBox>
+ </mx:Component>
+ </mx:itemRenderer>
+ </mx:TileList>
+ </mx:VBox>
+ <mx:VBox>
+ <mx:Label text="Tree"/>
+ <mx:Tree width="200" height="240" dataProvider="{ treeData }" labelField="@label" showRoot="false"/>
+ </mx:VBox>
+</mx:HBox>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Lists.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Lists.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views/Lists.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Lists.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Lists.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
+ <mx:Model id="listData" source="/assets/xml/listData.xml"/>
+ <mx:XMLList id="employees">
+ <employee>
+ <name>Christina Coenraets</name>
+ <phone>555-219-2270</phone>
+ <email>ccoenraets@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ <employee>
+ <name>Joanne Wall</name>
+ <phone>555-219-2012</phone>
+ <email>jwall@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ <employee>
+ <name>Maurice Smith</name>
+ <phone>555-219-2012</phone>
+ <email>maurice@fictitious.com</email>
+ <active>false</active>
+ </employee>
+ <employee>
+ <name>Mary Jones</name>
+ <phone>555-219-2000</phone>
+ <email>mjones@fictitious.com</email>
+ <active>true</active>
+ </employee>
+ </mx:XMLList>
+ <mx:VBox x="10" y="10" width="90%">
+ <mx:Label text="DataGrid"/>
+ <mx:DataGrid dataProvider="{ employees }" height="200" width="100%">
+ <mx:columns>
+ <mx:DataGridColumn dataField="name" headerText="Name"/>
+ <mx:DataGridColumn dataField="phone" headerText="Phone"/>
+ <mx:DataGridColumn dataField="email" headerText="Email"/>
+ </mx:columns>
+ </mx:DataGrid>
+ </mx:VBox>
+ <mx:VBox x="10" y="186" width="90%">
+ <mx:Label text="HorizontalList"/>
+ <mx:HorizontalList width="100%" height="125" dataProvider="{ listData.item }">
+ <mx:itemRenderer>
+ <mx:Component>
+ <mx:VBox paddingTop="4" paddingRight="4" paddingBottom="4" paddingLeft="4">
+ <mx:Image source="{ data.image }" width="90" height="90"/>
+ </mx:VBox>
+ </mx:Component>
+ </mx:itemRenderer>
+ </mx:HorizontalList>
+ </mx:VBox>
+</mx:Canvas>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Navigation.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Navigation.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views/Navigation.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Navigation.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Navigation.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
+
+ <mx:VBox x="318" y="10">
+ <mx:Label text="ButtonBar"/>
+ <mx:ButtonBar>
+ <mx:dataProvider>
+ <mx:Array>
+ <mx:Object label="Button 1"/>
+ <mx:Object label="Button 2"/>
+ <mx:Object label="Button 3"/>
+ <mx:Object label="Button 4"/>
+ </mx:Array>
+ </mx:dataProvider>
+ </mx:ButtonBar>
+ </mx:VBox>
+ <mx:VBox x="318" y="67">
+ <mx:Label text="ToggleButtonBar"/>
+ <mx:ToggleButtonBar>
+ <mx:dataProvider>
+ <mx:Array>
+ <mx:Object label="Button 1"/>
+ <mx:Object label="Button 2"/>
+ <mx:Object label="Button 3"/>
+ <mx:Object label="Button 4"/>
+ </mx:Array>
+ </mx:dataProvider>
+ </mx:ToggleButtonBar>
+ </mx:VBox>
+ <mx:VBox x="318" y="130">
+ <mx:Label text="TabBar"/>
+ <mx:TabBar>
+ <mx:dataProvider>
+ <mx:Array>
+ <mx:Object label="Tab 1"/>
+ <mx:Object label="Tab 2"/>
+ <mx:Object label="Tab 3"/>
+ <mx:Object label="Tab 4"/>
+ </mx:Array>
+ </mx:dataProvider>
+ </mx:TabBar>
+ </mx:VBox>
+ <mx:VBox x="318" y="200">
+ <mx:Label text="LinkBar"/>
+ <mx:LinkBar>
+ <mx:Object label="Link 1"/>
+ <mx:Object label="Link 2"/>
+ <mx:Object label="Link 3"/>
+ <mx:Object label="Link 4"/>
+ </mx:LinkBar>
+ </mx:VBox>
+ <mx:VBox x="10" y="10">
+ <mx:Label text="Accordion"/>
+ <mx:Accordion width="300" height="200">
+ <mx:Canvas label="Accordion Header 1" width="100%" height="100%">
+ </mx:Canvas>
+ <mx:Canvas label="Accordion Header 2" width="100%" height="100%">
+ </mx:Canvas>
+ <mx:Canvas label="Accordion Header 3" width="100%" height="100%">
+ </mx:Canvas>
+ </mx:Accordion>
+ </mx:VBox>
+</mx:Canvas>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Text.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Text.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/com/views/Text.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Text.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/com/views/Text.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
+ <mx:TextArea x="218" y="9" text="TextArea" width="200" height="100"/>
+ <mx:TextInput x="426" y="8" text="TextInput"/>
+ <mx:VBox x="10" y="10">
+ <mx:Label text="Text"/>
+ <mx:Text text="Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent vel libero ut libero interdum aliquam. Morbi in massa. Suspendisse ultrices velit nec leo." width="200" height="100"/>
+ </mx:VBox>
+</mx:Canvas>
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/main.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/main.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/main.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/main.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/main.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,478 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle" width="100%"
+ height="100%" layout="vertical">
+
+ <mx:Script>
+ <![CDATA[
+ import mx.events.DragEvent;
+
+ import flash.utils.Timer;
+ import flash.events.TimerEvent;
+
+ import mx.controls.dataGridClasses.DataGridColumn;
+ import mx.events.DataGridEvent;
+ import mx.events.ListEvent;
+ import mx.controls.Alert;
+ import mx.rpc.events.FaultEvent;
+ import mx.rpc.events.ResultEvent;
+ import mx.collections.ArrayCollection;
+ import mx.managers.PopUpManager;
+ import mx.core.IFlexDisplayObject;
+ private var confTimer:Timer;
+
+ private function fakeLogin():void {
+ loginWindow.enabled = true;
+ currentState = "main";
+ }
+
+ private function initConfTab():void{
+ freeswitch.getConfPlayfiles(null);
+ freeswitch.getConferenceList();
+ freeswitch.getConferenceUsers(confPicker.selectedItem );
+ confTimerLabel.text="Init...";
+ confTimer = new Timer(10000, 0);
+ confTimer.addEventListener(TimerEvent.TIMER, onConfRefresh);
+ confTimer.start();
+ confTimerLabel.text = confTimer.running.toString();
+ }
+
+ private function onConfRefresh(evt:TimerEvent):void {
+ confTimerLabel.text="Refreshing";
+ freeswitch.getConferenceUsers(confPicker.selectedItem);
+ confTimerLabel.text="Refreshed";
+ confTimerSecCount.text = confTimer.currentCount.toString();
+ }
+
+ private function confAutoRefreshControl():void {
+ if (confAutoRefreshCheckBox.selected) {
+ confTimer.start();
+ confTimerLabel.text="running";
+ confTimerLabel.text = confTimer.running.toString();
+ confTimerSecCount.text = confTimer.currentCount.toString();
+ } else {
+ confTimer.stop();
+ confTimerLabel.text="stopped";
+ confTimerLabel.text = confTimer.running.toString();
+ confTimerSecCount.text = confTimer.currentCount.toString();
+ }
+ }
+
+ private function confTimerChangeTime():void {
+ confTimer.delay = confAutoRefreshTimeSlider.value * 1000;
+ }
+
+ public function doOriginate():void {
+ var origWindow:IFlexDisplayObject =
+ PopUpManager.createPopUp(this, originateForm, false);
+ }
+ public function doStatusForm():void {
+ var origWindow:IFlexDisplayObject =
+ PopUpManager.createPopUp(this, statusForm, false);
+ }
+
+ public function doNewUserForm():void {
+ var origWindow:IFlexDisplayObject =
+ PopUpManager.createPopUp(this, newUserForm, false);
+ }
+
+ public function doNewDomainForm():void {
+ var origWindow:IFlexDisplayObject =
+ PopUpManager.createPopUp(this, newDomainForm, false);
+ }
+
+ public function addDomainParam():void {
+ freeswitch.addDirDomainParam(gridDomainsDomain.selectedItem.uid, inputDomainParamName.text, inputDomainParamValue.text);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function addDomainVar():void {
+ freeswitch.addDirDomainVar(gridDomainsDomain.selectedItem.uid, inputDomainVarName.text, inputDomainVarValue.text);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function dgChangeDomainParam(event:DataGridEvent):void {
+ freeswitch.updateDirDomainParam(dgDomainParam.selectedItem.uid, dgDomainParam.selectedItem.name, TextInput(event.currentTarget.itemEditorInstance).text);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function dgChangeDomainVars(event:DataGridEvent):void {
+ freeswitch.updateDirDomainVar(dgDomainVars.selectedItem.uid, dgDomainVars.selectedItem.name, TextInput(event.currentTarget.itemEditorInstance).text);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function dgDeleteDomainParam():void {
+ freeswitch.deleteDirDomainParam(dgDomainParam.selectedItem.uid);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function dgDeleteDomainVars():void {
+ freeswitch.deleteDirDomainVar(dgDomainVars.selectedItem.uid);
+ freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);
+ }
+
+ public function addDomainUserParam():void {
+ freeswitch.addDirDomainUserParam(dgDomainUsers.selectedItem.uid, inputDomainUserParamName.text, inputDomainUserParamValue.text);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function addDomainUserVar():void {
+ freeswitch.addDirDomainUserVar(dgDomainUsers.selectedItem.uid, inputDomainUserVarName.text, inputDomainUserVarValue.text);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function dgChangeDomainUserParam(event:DataGridEvent):void {
+ freeswitch.updateDirDomainUserParam(dgDomainUsers.selectedItem.uid, dgDomainParam.selectedItem.name, TextInput(event.currentTarget.itemEditorInstance).text);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function dgChangeDomainUserVars(event:DataGridEvent):void {
+ var _rowIndex:Number=event.rowIndex;
+ var _columnIndex:Number= event.columnIndex;
+ freeswitch.updateDirDomainUserVar(dgDomainUserVars.selectedItem.uid, dgDomainUserVars.selectedItem.name, TextInput(event.currentTarget.itemEditorInstance).text);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function dgDeleteDomainUserParam():void {
+ freeswitch.deleteDirDomainUserParam(dgDomainUserParam.selectedItem.uid);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function dgdeleteDomainUserVars():void {
+ freeswitch.deleteDirDomainUserVar(dgDomainUserVars.selectedItem.uid);
+ freeswitch.getDirUser(dgDomainUsers.selectedItem.uid);
+ }
+
+ public function doGroupAdd():void {
+ if (groupsDomain.selectedItem.uid){
+ freeswitch.addDirGroup(groupsDomain.selectedItem.uid, textNewGroup.text);
+ freeswitch.getDirGroup(dgDirGroups.selectedItem.uid);
+ } else {
+ Alert.show('You must have a domain Selected', 'Invalid Domain', mx.controls.Alert.OK);
+ }
+ }
+
+ public function nonMemberDrop(event:DragEvent):void {
+ Alert.show('Dropped UID?', '-' + '-' +'-', mx.controls.Alert.OK);
+ }
+
+ ]]>
+ </mx:Script>
+
+ <!-- this is the RemoteObject used to make the RPC calls -->
+ <mx:RemoteObject id="freeswitch" destination="freeswitch" source="freeswitch"
+ endpoint="/feeder/gateway.php" showBusyCursor="true"/>
+ <mx:states>
+ <mx:State name="main">
+ <mx:SetProperty target="{loginWindow}" name="width" value="100%"/>
+ <mx:SetProperty target="{loginWindow}" name="height" value="100%"/>
+ <mx:SetProperty target="{loginWindow}" name="title" value="Codename: Shipment - FreeSWITCH GUI v0.1"/>
+
+ <mx:RemoveChild target="{username}"/>
+ <mx:RemoveChild target="{password}"/>
+ <mx:RemoveChild target="{hbox1}"/>
+ <mx:RemoveChild target="{hbox2}"/>
+ <mx:RemoveChild target="{buttonLogin}"/>
+ <mx:RemoveChild target="{spacer1}"/>
+ <mx:RemoveChild target="{loginWindow}"/>
+
+ <mx:AddChild relativeTo="{loginCanvas}" position="lastChild">
+ <mx:TitleWindow defaultButton="{buttonLogin}" resizeEffect="Resize" width="100%" height="100%" layout="vertical"
+ verticalAlign="middle" horizontalAlign="center" title="Codename: Shipment - FreeSWITCH GUI v0.1"
+ id="mainWindow" creationCompleteEffect="{unblurImage}">
+ <mx:Canvas id="DisplayCanvas" label="DisplayCanvas" width="100%" height="100%" backgroundColor="#FFFFFF">
+
+ <mx:TabNavigator width="100%" height="100%">
+ <mx:Canvas label="Channels" width="100%" height="100%" show="freeswitch.getChannels();">
+
+ <mx:Button label="Refresh" click="freeswitch.getChannels();" />
+ <mx:DataGrid id="channelsGrid" dataProvider="{freeswitch.getChannels.lastResult}" left="0" top="30" bottom="0" right="0">
+ <mx:columns>
+ <mx:DataGridColumn dataField="uuid" editable="false"/>
+ <mx:DataGridColumn dataField="cid_name"/>
+ <mx:DataGridColumn dataField="cid_num"/>
+ <mx:DataGridColumn dataField="dest"/>
+ <mx:DataGridColumn dataField="created"/>
+ <mx:DataGridColumn dataField="read_codec"/>
+ <mx:DataGridColumn dataField="write_codec"/>
+ </mx:columns>
+ </mx:DataGrid>
+
+ <mx:Button label="Originate" click="doOriginate();" x="81"/>
+ <mx:Button label="Kill UUID" click="freeswitch.killUuid(callsGrid.selectedItem.caller_uuid); freeswitch.getCalls();" x="168"/>
+ <mx:Button label="Status" click="doStatusForm()" x="253"/>
+ </mx:Canvas>
+ <mx:Canvas label="Calls" width="100%" height="100%" show="freeswitch.getCalls();">
+
+ <mx:Button label="Refresh" click="freeswitch.getCalls();" />
+ <mx:Button label="Originate" click="doOriginate();" x="79"/>
+ <mx:Button label="Kill UUID" click="freeswitch.killUuid(callsGrid.selectedItem.caller_uuid); freeswitch.getCalls();" x="166"/>
+ <mx:Button label="Status" click="doStatusForm()" x="251"/>
+ <!-- <mx:DataGrid id="myGrid" dataProvider="{myRemote.getCalls.lastResult}" editable="true" itemEditEnd="save(event)"> -->
+ <mx:DataGrid id="callsGrid" dataProvider="{freeswitch.getCalls.lastResult}" top="30" bottom="0" left="0" right="0">
+ <mx:columns>
+ <mx:DataGridColumn dataField="created"/>
+ <mx:DataGridColumn dataField="caller_uuid"/>
+ <mx:DataGridColumn dataField="callee_uuid"/>
+ <mx:DataGridColumn dataField="caller_cid_name"/>
+ <mx:DataGridColumn dataField="caller_cid_num"/>
+ <mx:DataGridColumn dataField="caller_dest_num"/>
+ </mx:columns>
+ </mx:DataGrid>
+
+ </mx:Canvas>
+ <mx:Canvas label="Conference" width="100%" height="100%" show="initConfTab();">
+ <mx:ComboBox id="confPicker" horizontalCenter="0" top="10" dataProvider="{freeswitch.getConferenceList.lastResult}"
+ change="{freeswitch.getConferenceUsers(confPicker.selectedItem)}"></mx:ComboBox>
+ <mx:DataGrid id="conferenceGrid" dataProvider="{freeswitch.getConferenceUsers.lastResult}" width="100%" top="43" bottom="145">
+ <mx:columns>
+ <mx:DataGridColumn dataField="id"/>
+ <mx:DataGridColumn dataField="caller_name"/>
+ <mx:DataGridColumn dataField="caller_number" />
+ <mx:DataGridColumn dataField="channel" />
+ <mx:DataGridColumn dataField="uuid"/>
+ <mx:DataGridColumn dataField="volume"/>
+ <mx:DataGridColumn dataField="gain"/>
+ <mx:DataGridColumn dataField="noise"/>
+ <mx:DataGridColumn dataField="flags"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Play File" click="freeswitch.confPlayfile(confPicker.selectedItem, comboConfPlayfile.selectedItem.data);" horizontalCenter="-40" bottom="85"/>
+ <mx:Button label="Speak" click="{freeswitch.getConferenceUsers(confPicker.selectedItem)}" horizontalCenter="221" bottom="25"/>
+ <mx:Button label="Refresh Confs" click="{freeswitch.getConferenceList()}" horizontalCenter="-276" bottom="115"/>
+ <mx:Button label="Refresh Users" click="{freeswitch.getConferenceUsers(confPicker.selectedItem)}" horizontalCenter="-162" bottom="115"/>
+ <mx:Button label="Kick" click="{freeswitch.kickConferenceUser(confPicker.selectedItem, conferenceGrid.selectedItem.id)}" horizontalCenter="-162" bottom="55"/>
+ <mx:Button label="DTMF" click="{freeswitch.getCalls()}" horizontalCenter="98" bottom="25"/>
+ <mx:Button label="Transfer" click="{freeswitch.getCalls()}" horizontalCenter="24" bottom="25"/>
+ <mx:Button label="Mute" click="{freeswitch.confMute(confPicker.selectedItem, conferenceGrid.selectedItem.id)}" horizontalCenter="-303" bottom="55"/>
+ <mx:Button label="Unmute" click="{freeswitch.confUnmute(confPicker.selectedItem, conferenceGrid.selectedItem.id)}" horizontalCenter="-232" bottom="55"/>
+ <mx:Button label="Dial" click="{freeswitch.getCalls()}" horizontalCenter="158" bottom="25"/>
+ <mx:Button label="Lock" click="freeswitch.confLock(confPicker.selectedItem);" horizontalCenter="-302" bottom="85"/>
+ <mx:Button label="Unlock" click="freeswitch.confUnlock(confPicker.selectedItem);" horizontalCenter="-236" bottom="85"/>
+ <mx:CheckBox id="confAutoRefreshCheckBox" label="AutoRefresh" right="204" top="10" selected="true" click="confAutoRefreshControl();"/>
+ <mx:HSlider id="confAutoRefreshTimeSlider" right="37" top="10" width="162" minimum="5" maximum="120" snapInterval="5" value="15"/>
+ <mx:Label id="confTimerLabel" text="STOPPED" right="339" top="12"/>
+ <mx:Label width="23" id="lblRefreshInterval" text="{confAutoRefreshTimeSlider.value.toString()}" right="10" top="12"/>
+ <mx:Label id="confTimerSecCount" text="Label" right="433" top="12"/>
+ <mx:TextInput bottom="55" width="406" horizontalCenter="126"/>
+ <mx:ComboBox id="comboConfPlayfile" width="324" horizontalCenter="167" bottom="85" labelField="label" dataProvider="{freeswitch.getConfPlayfiles.lastResult}" ></mx:ComboBox>
+ </mx:Canvas>
+ <mx:Canvas label="Directory" width="100%" height="100%" show="freeswitch.getDirDomains();">
+ <mx:TabNavigator x="0" y="0" width="100%" height="100%">
+ <mx:Canvas label="Domains" width="100%" height="100%">
+ <mx:HDividedBox x="0" y="0" width="100%" height="100%">
+ <mx:Canvas width="20%" height="100%">
+ <mx:DataGrid id="gridDomainsDomain" width="100%" horizontalCenter="0" top="0" bottom="100"
+ dataProvider="{freeswitch.getDirDomains.lastResult}"
+ click="freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);">
+ <mx:columns>
+ <mx:DataGridColumn headerText="domain" dataField="name"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh Domains" horizontalCenter="0" bottom="10" click="freeswitch.getDirDomains();"/>
+ <mx:Button label="Add Domain" click="doNewDomainForm();" horizontalCenter="0" bottom="70"/>
+ <mx:Button label="Delete Domain" click="doNewDomainForm();" horizontalCenter="0" bottom="40"/>
+ </mx:Canvas>
+ <mx:Canvas width="80%" height="100%">
+ <mx:Label text="UID:" top="10" left="10"/>
+ <mx:Label text="{gridDomainsDomain.selectedItem.uid}" id="domainUid" top="10" left="49"/>
+ <mx:Label text="Name:" top="12" left="174"/>
+ <mx:TextInput id="domainName" text="{gridDomainsDomain.selectedItem.name}" top="10" left="224"/>
+ <!-- <mx:CheckBox label="Enabled" id="domainEnabled" enabled="{Boolean(gridDomainsDomain.selectedItem.enabled)}" right="10" top="8" /> -->
+ <mx:DataGrid left="10" top="40" bottom="86" width="45%" dataProvider="{freeswitch.getDirDomain.lastResult.params}"
+ itemEditEnd="dgChangeDomainParam(event);" editable="true" id="dgDomainParam">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Parameter" dataField="name" width="120" editable="false" />
+ <mx:DataGridColumn headerText="Value" dataField="value"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:DataGrid right="10" top="40" bottom="86" width="45%" dataProvider="{freeswitch.getDirDomain.lastResult.variables}"
+ itemEditEnd="dgChangeDomainVars(event);" editable="true" id="dgDomainVars">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Variable" dataField="name" width="120" editable="false"/>
+ <mx:DataGridColumn headerText="Data" dataField="value"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh Domain" right="10" top="10" height="22" click="freeswitch.getDirDomain(gridDomainsDomain.selectedItem.uid);"/>
+ <mx:Button label="Add Parameter" left="139" bottom="10" click="addDomainParam()"/>
+ <mx:Button label="Add Variable" bottom="10" right="183" width="99" click="addDomainVar()"/>
+ <mx:Label text="Parameter" bottom="60" left="10"/>
+ <mx:TextInput width="121" id="inputDomainParamName" bottom="40" left="10"/>
+ <mx:TextInput width="272" id="inputDomainParamValue" bottom="40" left="139"/>
+ <mx:Label text="Variable" bottom="60" right="361"/>
+ <mx:TextInput width="121" id="inputDomainVarName" bottom="40" right="290"/>
+ <mx:TextInput width="272" id="inputDomainVarValue" bottom="40" right="10"/>
+ <mx:Label text="Data" bottom="60" right="251"/>
+ <mx:Label text="Value" bottom="60" left="139"/>
+ <mx:Button label="Delete Param" left="26" bottom="10" click="dgDeleteDomainParam()"/>
+ <mx:Button label="Delete Variable" bottom="10" right="290" click="dgDeleteDomainVars()"/>
+ </mx:Canvas>
+ </mx:HDividedBox>
+ </mx:Canvas>
+ <mx:Canvas label="Users" width="100%" height="100%" show="freeswitch.getDirUsers(userDomain.selectedItem.uid);">
+ <mx:HDividedBox x="0" y="0" width="100%" height="100%">
+ <mx:Canvas width="20%" height="100%">
+ <mx:ComboBox id="userDomain" top="10" horizontalCenter="0" dataProvider="{freeswitch.getDirDomains.lastResult}"
+ labelField="name" change="freeswitch.getDirUsers(userDomain.selectedItem.uid);"></mx:ComboBox>
+ <mx:DataGrid id="dgDomainUsers" width="100%" horizontalCenter="0" top="40" bottom="130" dataProvider="{freeswitch.getDirUsers.lastResult}"
+ click="freeswitch.getDirUser(dgDomainUsers.selectedItem.uid)">
+ <mx:columns>
+ <mx:DataGridColumn headerText="User" dataField="username" />
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh Users" horizontalCenter="0" bottom="40" click="freeswitch.getDirUsers(userDomain.selectedItem.uid);"/>
+ <mx:Button label="Refresh Domains" horizontalCenter="0" bottom="10" click="freeswitch.getDirDomains();"/>
+ <mx:Button label="Add User" click="doNewUserForm();" horizontalCenter="0" bottom="100"/>
+ <mx:Button label="Delete User" click="doNewUserForm();" horizontalCenter="0" bottom="70"/>
+ </mx:Canvas>
+ <mx:Canvas width="80%" height="100%">
+ <mx:Label text="UID:" top="10" left="10"/>
+ <mx:Label text="{dgDomainUsers.selectedItem.uid}" id="userUid" top="10" left="49"/>
+ <mx:Label text="Name:" top="12" left="173"/>
+ <mx:TextInput id="userName" text="{dgDomainUsers.selectedItem.username}" top="10" left="224"/>
+ <!-- <mx:CheckBox label="Enabled" id="userEnabled" enabled="{dgDomainUsers.selectedItem.enabled}" right="330" top="8" left="493"/> -->
+ <mx:DataGrid left="10" top="40" bottom="86" width="45%" dataProvider="{freeswitch.getDirUser.lastResult.params}"
+ itemEditEnd="dgChangeDomainUserParam(event);" editable="true" id="dgDomainUserParam">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Parameter" dataField="name" width="120" editable="false"/>
+ <mx:DataGridColumn headerText="Value" dataField="value"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:DataGrid right="10" top="40" bottom="86" width="45%" dataProvider="{freeswitch.getDirUser.lastResult.variables}"
+ itemEditEnd="dgChangeDomainUserVars(event);" editable="true" id="dgDomainUserVars">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Variable" dataField="name" width="120" editable="false"/>
+ <mx:DataGridColumn headerText="Data" dataField="value"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh User" right="10" top="8" height="22" click="freeswitch.getDirUser(dgDomainUsers.selectedItem.uid)"/>
+ <mx:Button label="Add Parameter" left="139" bottom="10" click="addDomainUserParam()"/>
+ <mx:Button label="Delete Param" bottom="10" left="26" click="dgDeleteDomainUserParam();"/>
+ <mx:Button label="Add Variable" bottom="10" right="183" width="99" click="addDomainUserVar()"/>
+ <mx:Label text="Parameter" bottom="60" left="10"/>
+ <mx:TextInput width="121" id="inputDomainUserParamName" bottom="40" left="10"/>
+ <mx:TextInput width="272" id="inputDomainUserParamValue" bottom="40" left="139"/>
+ <mx:Label text="Variable" bottom="60" right="361"/>
+ <mx:TextInput width="121" id="inputDomainUserVarName" bottom="40" right="290"/>
+ <mx:TextInput width="272" id="inputDomainUserVarValue" bottom="40" right="10"/>
+ <mx:Label text="Data" bottom="60" right="251"/>
+ <mx:Label text="Value" bottom="60" left="139"/>
+ <mx:Button label="Delete Variable" bottom="10" right="290" click="dgdeleteDomainUserVars();"/>
+ </mx:Canvas>
+ </mx:HDividedBox>
+ </mx:Canvas>
+ <mx:Canvas label="Groups" width="100%" height="100%" show="freeswitch.getDirGroups(groupsDomain.selectedItem.uid)">
+ <mx:HDividedBox x="0" y="0" width="100%" height="100%">
+ <mx:Canvas width="20%" height="100%">
+ <mx:ComboBox top="10" horizontalCenter="0" id="groupsDomain" dataProvider="{freeswitch.getDirDomains.lastResult}" labelField="name"></mx:ComboBox>
+ <mx:DataGrid id="dgDirGroups" width="100%" horizontalCenter="0" top="40" bottom="70" dataProvider="{freeswitch.getDirGroups.lastResult}"
+ click="freeswitch.getDirGroup(dgDirGroups.selectedItem.uid)">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Group" dataField="name"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh Groups" horizontalCenter="0" bottom="40" click="freeswitch.getDirGroups(groupsDomain.selectedItem.uid)"/>
+ <mx:Button label="Refresh Domains" horizontalCenter="0" bottom="10" click="freeswitch.getDirDomains()"/>
+ </mx:Canvas>
+ <mx:Canvas width="80%" height="100%">
+ <mx:DataGrid id="dgGroupMembers" width="45%" left="10" top="38" bottom="70" dataProvider="{freeswitch.getDirGroup.lastResult.members}"
+ dragEnabled="true" dragMoveEnabled="true" dropEnabled="true">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Member" dataField="usersUsername"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:DataGrid id="dgGroupNonMembers" width="45%" right="10" top="38" bottom="70" dataProvider="{freeswitch.getDirGroup.lastResult.nonmembers}"
+ dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" dragDrop="nonMemberDrop(event);">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Available to Join" dataField="usersUsername"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh" click="freeswitch.getDirGroup(dgDirGroups.selectedItem.uid)" right="10" width="71" top="10" height="22"/>
+ <mx:Label text="New Group" bottom="42" left="10" width="81"/>
+ <mx:TextInput bottom="40" id="textNewGroup" left="99" width="256"/>
+ <mx:Button label="Create Group" bottom="10" click="doGroupAdd();" left="81" width="101"/>
+ <mx:Label text="UID:" top="10" left="10"/>
+ <mx:Label text="{dgDirGroups.selectedItem.uid}" id="groupUID" top="10" left="49"/>
+ <mx:Label text="Name:" top="12" left="173"/>
+ <mx:TextInput id="groupName" text="{dgDirGroups.selectedItem.name}" top="10" left="224"/>
+ </mx:Canvas>
+ </mx:HDividedBox>
+ </mx:Canvas>
+ </mx:TabNavigator>
+ </mx:Canvas>
+ <mx:Canvas label="IVR Menus" width="100%" height="100%">
+ <mx:HDividedBox x="0" y="0" width="100%" height="100%">
+ <mx:Canvas width="20%" height="100%">
+ <mx:ComboBox top="10" horizontalCenter="0" id="ivrsDomain" dataProvider="{freeswitch.getDirDomains.lastResult}" labelField="name"></mx:ComboBox>
+ <mx:DataGrid id="dgIvrGrid" width="100%" horizontalCenter="0" top="40" bottom="70"> <!-- dataProvider="{freeswitch.getDirGroups.lastResult}"
+ click="freeswitch.getDirGroup(dgDirGroups.selectedItem.uid)"> -->
+ <mx:columns>
+ <mx:DataGridColumn headerText="Group" dataField="name"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Refresh Menus" horizontalCenter="0" bottom="40" click="freeswitch.getDirGroups(groupsDomain.selectedItem.uid)"/>
+ <mx:Button label="Refresh Domains" horizontalCenter="0" bottom="10" click="freeswitch.getDirDomains()"/>
+ </mx:Canvas>
+ <mx:Canvas width="80%" height="100%">
+ <mx:Form width="340" height="450">
+ <mx:FormItem label="Label" width="100%">
+ <mx:TextInput width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:TextInput width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:TextInput width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:TextInput width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:NumericStepper/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:NumericStepper/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:NumericStepper/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:NumericStepper/>
+ </mx:FormItem>
+ <mx:FormItem label="Label" width="100%">
+ <mx:NumericStepper/>
+ </mx:FormItem>
+ </mx:Form>
+ </mx:Canvas>
+ </mx:HDividedBox>
+ </mx:Canvas>
+ </mx:TabNavigator>
+ </mx:Canvas>
+ </mx:TitleWindow>
+ </mx:AddChild>
+ </mx:State>
+
+ </mx:states>
+
+ <mx:Style source="assets/css/Main.css"/>
+
+ <mx:Blur id="unblurImage" duration="1000"
+ blurXFrom="10.0" blurXTo="0.0"
+ blurYFrom="10.0" blurYTo="0.0"/>
+ <mx:Canvas width="100%" height="100%" id="loginCanvas" styleName="Global">
+ <mx:TitleWindow defaultButton="{buttonLogin}" resizeEffect="Resize" width="382" height="198" layout="vertical"
+ verticalAlign="middle" horizontalAlign="center" title="Codename: Shipment"
+ id="loginWindow" creationCompleteEffect="{unblurImage}" horizontalCenter="0" verticalCenter="0">
+ <mx:HBox width="100%" id="hbox1">
+ <mx:Label text="Username" width="70" fontWeight="bold" textAlign="right"/>
+ <mx:TextInput id="username" displayAsPassword="false" width="100%" creationComplete="setFocus()"/>
+ </mx:HBox>
+ <mx:HBox width="100%" id="hbox2">
+ <mx:Label text="Password" width="70" fontWeight="bold" textAlign="right" id="label1"/>
+ <mx:TextInput id="password" displayAsPassword="true" width="100%" />
+ </mx:HBox>
+ <mx:Spacer height="100%" id="spacer1"/>
+ <mx:Button label="Login" click="{buttonLogin.label = 'Logging In...'; loginWindow.enabled = false; fakeLogin(); }" id="buttonLogin"/>
+ </mx:TitleWindow>
+ </mx:Canvas>
+
+</mx:Application>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newDomainForm.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newDomainForm.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/newDomainForm.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newDomainForm.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newDomainForm.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit();" height="306" title="Add Domain">
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+ import mx.controls.Alert;
+ import mx.rpc.events.ResultEvent;
+
+ private function doInit():void {
+ PopUpManager.centerPopUp(this);
+ }
+
+ private function doCall():void {
+ parentApplication.freeswitch.addDirDomain(domainName.text, dialString.text, defaultGateway.text, defaultAreacode.text, xferFallbackExten.text, recordStereo.selected);
+ PopUpManager.removePopUp(this);
+ }
+ ]]>
+ </mx:Script>
+
+ <mx:Form width="100%">
+ <mx:FormItem label="Domain Name" width="100%">
+ <mx:TextInput id="domainName" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Dial String" width="100%">
+ <mx:TextInput id="dialString" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="default_gateway" width="100%">
+ <mx:TextInput id="defaultGateway" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Default Areacode" width="100%">
+ <mx:TextInput id="defaultAreacode" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Xfer Fallback Exten" width="100%">
+ <mx:TextInput id="xferFallbackExten" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Record Stereo">
+ <mx:CheckBox id="recordStereo" />
+ </mx:FormItem>
+
+ </mx:Form>
+ <mx:HBox horizontalAlign="center" width="314">
+ <mx:Button click="doCall();" label="Add Domain"/>
+ <mx:Button click="PopUpManager.removePopUp(this);" label="Cancel"/>
+ </mx:HBox>
+</mx:TitleWindow>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newGroupForm.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newGroupForm.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/newGroupForm.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newGroupForm.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newGroupForm.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit();" height="306" title="Add Group">
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+ import mx.controls.Alert;
+ import mx.rpc.events.ResultEvent;
+
+ private function doInit():void {
+ PopUpManager.centerPopUp(this);
+ }
+
+ private function doCall():void {
+ parentApplication.freeswitch.addDirDomain(domainName.text, dialString.text, defaultGateway.text, defaultAreacode.text, xferFallbackExten.text, recordStereo.selected);
+ PopUpManager.removePopUp(this);
+ }
+ ]]>
+ </mx:Script>
+ <mx:Canvas width="320" height="293">
+ <mx:Form top="26" bottom="80.7" width="90%" horizontalCenter="0">
+ <mx:FormItem label="Domain Name" width="100%">
+ <mx:TextInput id="domainName" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Dial String" width="100%">
+ <mx:TextInput id="dialString" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="default_gateway" width="100%">
+ <mx:TextInput id="defaultGateway" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Default Areacode" width="100%">
+ <mx:TextInput id="defaultAreacode" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Xfer Fallback Exten" width="100%">
+ <mx:TextInput id="xferFallbackExten" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Record Stereo">
+ <mx:CheckBox id="recordStereo" />
+ </mx:FormItem>
+
+ </mx:Form>
+ <mx:HBox horizontalAlign="center" width="314" horizontalCenter="0" bottom="52">
+ <mx:Button click="doCall();" label="Add Domain"/>
+ <mx:Button click="PopUpManager.removePopUp(this);" label="Cancel"/>
+ </mx:HBox>
+ </mx:Canvas>
+</mx:TitleWindow>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newUserForm.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newUserForm.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/newUserForm.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newUserForm.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/newUserForm.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit();" height="366" title="Add User" width="429">
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+ import mx.controls.Alert;
+ import mx.rpc.events.ResultEvent;
+
+ private function doInit():void {
+ PopUpManager.centerPopUp(this);
+ }
+
+ private function doCall():void {
+ parentApplication.freeswitch.addDirDomainUser(username.text, mailbox.text, cidr.text, password.text, vm_password.text, cid_name.text, cid_number.text);
+ PopUpManager.removePopUp(this);
+ }
+ ]]>
+ </mx:Script>
+ <mx:Canvas width="100%" height="100%">
+
+
+ <mx:Form width="90%" horizontalCenter="0" top="19" bottom="117">
+ <mx:FormItem label="UserName" width="100%">
+ <mx:TextInput id="username" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Mailbox" width="100%">
+ <mx:TextInput id="mailbox" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="CIDR" width="100%">
+ <mx:TextInput id="cidr" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Password" width="100%">
+ <mx:TextInput id="password" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="VM PIN" width="100%">
+ <mx:TextInput id="vm_password" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="CallerID Name" width="100%">
+ <mx:TextInput id="cid_name" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="CallerID Number" width="100%">
+ <mx:TextInput id="cid_number" width="100%"/>
+ </mx:FormItem>
+ </mx:Form>
+ <mx:HBox horizontalAlign="center" width="314" horizontalCenter="0" bottom="20">
+ <mx:Button click="doCall();" label="Add User"/>
+ <mx:Button click="PopUpManager.removePopUp(this);" label="Cancel"/>
+ </mx:HBox>
+ </mx:Canvas>
+</mx:TitleWindow>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/originateForm.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/originateForm.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/originateForm.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/originateForm.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/originateForm.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit();" height="306" title="Originate">
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+ import mx.controls.Alert;
+ import mx.rpc.events.ResultEvent;
+
+ private function doInit():void {
+ PopUpManager.centerPopUp(this);
+ }
+
+ private function doCall():void {
+ parentApplication.freeswitch.originate(call_url.text, exten.text, dialplan.text, context.text, cid_name.text, cid_number.text, timeout.text);
+ PopUpManager.removePopUp(this);
+ }
+ ]]>
+ </mx:Script>
+
+ <mx:Form width="100%">
+ <mx:FormItem label="Call URL" width="100%">
+ <mx:TextInput id="call_url" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="Extension" width="100%">
+ <mx:TextInput id="exten" width="100%"/>
+ </mx:FormItem>
+ <mx:FormItem label="DialPlan" width="100%">
+ <mx:TextInput id="dialplan" width="100%" text="XML"/>
+ </mx:FormItem>
+ <mx:FormItem label="Context" width="100%">
+ <mx:TextInput id="context" width="100%" text="default"/>
+ </mx:FormItem>
+ <mx:FormItem label="CallerID Name" width="100%">
+ <mx:TextInput id="cid_name" width="100%" text="FS_AMF_PHP"/>
+ </mx:FormItem>
+ <mx:FormItem label="CallerID Number" width="100%">
+ <mx:TextInput id="cid_number" width="100%" text="default"/>
+ </mx:FormItem>
+ <mx:FormItem label="Timeout" width="100%">
+ <mx:TextInput id="timeout" width="100%" text="30"/>
+ </mx:FormItem>
+ </mx:Form>
+ <mx:HBox horizontalAlign="center" width="314">
+ <mx:Button click="doCall();" label="Place Call"/>
+ <mx:Button click="PopUpManager.removePopUp(this);" label="Cancel"/>
+ </mx:HBox>
+</mx:TitleWindow>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/statusForm.mxml
Copied: freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/statusForm.mxml (from rev 14471, freeswitch/trunk/contrib/swk/flex/amf-test1/src/statusForm.mxml) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/statusForm.mxml (rev 0)
+++ freeswitch/branches/seven/contrib/swk/flex/amf-test1/src/statusForm.mxml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit();" height="206" title="Switch Status" width="438">
+ <mx:Script>
+ <![CDATA[
+ import mx.managers.PopUpManager;
+ import mx.controls.Alert;
+ import mx.rpc.events.ResultEvent;
+
+ private function doInit():void {
+ PopUpManager.centerPopUp(this);
+ parentApplication.freeswitch.getStatus();
+ }
+
+ private function doCall():void {
+ // parentApplication.freeswitch.originate(call_url.text, exten.text, dialplan.text, context.text, cid_name.text, cid_number.text, timeout.text);
+ PopUpManager.removePopUp(this);
+ }
+ ]]>
+ </mx:Script>
+
+ <mx:Form width="100%">
+ <mx:FormItem label="Status" width="100%">
+ <mx:TextArea id="call_url" width="100%" height="90" text="{parentApplication.freeswitch.getStatus.lastResult}" />
+ </mx:FormItem>
+
+ </mx:Form>
+ <mx:HBox horizontalAlign="center" width="100%">
+ <mx:Button click="PopUpManager.removePopUp(this);" label="Cancel"/>
+ </mx:HBox>
+</mx:TitleWindow>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/swk/livecd (from rev 14471, freeswitch/trunk/contrib/swk/livecd)
Copied: freeswitch/branches/seven/contrib/swk/php (from rev 14471, freeswitch/trunk/contrib/swk/php)
Copied: freeswitch/branches/seven/contrib/swk/php/amfphp (from rev 14471, freeswitch/trunk/contrib/swk/php/amfphp)
Deleted: freeswitch/branches/seven/contrib/swk/php/amfphp/README
Copied: freeswitch/branches/seven/contrib/swk/php/amfphp/README (from rev 14471, freeswitch/trunk/contrib/swk/php/amfphp/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/amfphp/README (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/amfphp/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+AMF-PHP FreeSwitch Service
+
+Copy the freeswitch.php file to your AMF-PHP services directory
+
+the flex file goes in the normal spot... this is not dynamically configured so you'll have to edit a few things to get it right
+
+TODO: Dynamically detect where the AMF Feed is (ie: dont hardcode the URL)
+TODO: Make the UI better Looking
+TODO: Add some form of user management
+TODO: CDR Viewer
+TODO: Anything else I think I might want to add here
+
+Feel Free to submit patches It would be nice to figure out a good way to support as much of the API as possible via ESL and add things
+like basic Server monitoring
Deleted: freeswitch/branches/seven/contrib/swk/php/amfphp/freeswitch.php
Copied: freeswitch/branches/seven/contrib/swk/php/amfphp/freeswitch.php (from rev 14471, freeswitch/trunk/contrib/swk/php/amfphp/freeswitch.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/amfphp/freeswitch.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/amfphp/freeswitch.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,466 @@
+<?php
+
+/*
+ * FreeSWITCH AMF-PHP ESL Client Library
+ * Copyright (C) 2009, Ken Rice <krice@tollfreegateway.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Ken Rice <krice@tollfreegateway.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Ken Rice <krice@tollfreegateway.com>
+ *
+ * freeswitch.php -- Initial Class file for AMF-PHP FreeSwitch Class using ESL
+ *
+ ***************************************************************************************************
+ *
+ * This Requires the FreeSWITCH ESL Extension to be installed properly on your system.
+ *
+ */
+
+require_once "ESL.php";
+
+class FreeSWITCH {
+
+ /* Edit these variables for your installation */
+ var $esl_server = "127.0.0.1"; /* ESL Server */
+ var $esl_port = "8021"; /* ESL Port */
+ var $esl_secret = "ClueCon"; /* ESL Secret */
+
+ var $dbtype='mysql'; /* Set the Database type */
+ var $db_hostname = '192.168.1.140'; /* Database Server hostname */
+ var $db_port = '3306'; /* Database Server Port */
+ var $db_username = 'root'; /* Database Server username */
+ var $db_password = 'password'; /* Database Server password */
+ var $db_database = 'shipment'; /* DataBase Name */
+
+ private function getDbh(){
+ if ($this->dbtype == 'mysql') {
+ $pdo_flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,);
+ }
+ $dbh = new PDO($this->dbtype . ":host=" . $this->db_hostname . ";port=" . $this->db_port . ";dbname=" . $this->db_database,
+ $this->db_username, $this->db_password, $pdo_flags);
+ return $dbh;
+ }
+
+ /*** General Whats happening Methods ***/
+
+ public function getStatus() {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api status");
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function getChannels() {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api show channels");
+ $body = $e->getBody();
+ $temp = explode ("\n", $body);
+ $total_count = sizeof($temp);
+ $i = -1;
+ foreach($temp as $row){
+ if ($i == -1) {
+ $header = explode(",", $row);
+ } else {
+ $temp_row = explode(",", $row);
+ $x=0;
+ foreach($temp_row as $col){
+ $data[$i][$header[$x]] = $col;
+ $x++;
+ }
+ }
+ $i++;
+ if ($i == $total_count - 3){
+ break;
+ }
+ }
+ if ($none != 1) {
+ return $data;
+ } else {
+ return "OK: No Calls";
+ }
+ }
+
+ public function getCalls() {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api show calls");
+ $body = $e->getBody();
+ $temp = explode ("\n", $body);
+ $total_count = sizeof($temp);
+ $i = -1;
+ foreach($temp as $row){
+ if ($i == -1) {
+ $header = explode(",", $row);
+ } else {
+ $temp_row = explode(",", $row);
+ $x=0;
+ foreach($temp_row as $col){
+ $data[$i][$header[$x]] = $col;
+ $x++;
+ }
+ }
+ $i++;
+ if ($i == $total_count - 3){
+ break;
+ }
+ }
+ return $data;
+ }
+
+ /*** General API Command Methods ***/
+
+ public function originate($call_url, $exten, $dialplan = "XML", $context= "default", $cid_name = "amf_php", $cid_number = "888", $timeout="30"){
+ $dialstring = "api originate $call_url $exten $dialplan $context $cid_name $cid_number $timeout";
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($dialstring);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function killUuid($uuid) {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api uuid_kill $uuid");
+ $body = $e->getBody();
+ return $body;
+ }
+
+ /*** Conference Methods ***/
+
+ public function kickConferenceUser($conference, $member) {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api conference $conference kick $member");
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function getConferenceList() {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api conference list");
+ $body = $e->getBody();
+ $data=explode("\n", $body);
+ $y=0;
+ foreach($data as $row){
+ if(substr($row, 0, 10)=="Conference"){
+ $temp_data = explode(" ", $row);
+ $conf_data[$y] = $temp_data[1];
+ $y++;
+ }
+ }
+ return $conf_data;
+ }
+
+ public function getConferenceUsers($conference_name) {
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv("api conference $conference_name list");
+ $body = $e->getBody();
+ $data=explode("\n", $body);
+ $y=0;
+ foreach($data as $row){
+ if ($row!="" && substr($row, 0, 10) != "Conference"){
+ $temp_data = explode(";", $row);
+ $conf_data[$y]['id'] = $temp_data[0];
+ $conf_data[$y]['channel'] = $temp_data[1];
+ $conf_data[$y]['uuid'] = $temp_data[2];
+ $conf_data[$y]['caller_name'] = $temp_data[3];
+ $conf_data[$y]['caller_number'] = $temp_data[4];
+ $conf_data[$y]['flags'] = $temp_data[5];
+ $conf_data[$y]['gain'] = $temp_data[6];
+ $conf_data[$y]['volume'] = $temp_data[7];
+ $conf_data[$y]['noise'] = $temp_data[8];
+ $conf_data[$y]['hear'] = 0;
+ $conf_data[$y]['speak'] = 0;
+ $conf_data[$y]['talk'] = 0;
+ $conf_data[$y]['video'] = 0;
+ $conf_data[$y]['floor'] = 0;
+ $temp_flags = explode("|", $temp_data[5]);
+ foreach ($temp_flags as $flag){
+ if ($flag == "hear") $conf_data[$y]['hear'] = 1;
+ if ($flag == "speak") $conf_data[$y]['speak'] = 1;
+ if ($flag == "talk") $conf_data[$y]['talk'] = 1;
+ if ($flag == "video") $conf_data[$y]['video'] = 1;
+ if ($flag == "floor") $conf_data[$y]['floor'] = 1;
+ }
+ $y++;
+ }
+ }
+ return $conf_data;
+ }
+
+ public function getConfPlayfiles($list_dir) {
+ if($list_dir != "") {
+ $templist = glob($list_dir);
+ } else {
+ $templist = glob("/usr/local/freeswitch/sounds/en/us/callie/*/*/*");
+ }
+ $x=0;
+ foreach($templist as $file){
+ $temp_file = explode("/", $file);
+ $filelist[$x]['label'] = $temp_file[count($temp_file)-1];
+ $filelist[$x]['data'] = $file;
+ // $filelist[$x] = $file;
+ $x++;
+ }
+ return $filelist;
+ }
+
+ public function confPlayfile($conference, $file_path){
+ $playfile = "api conference $conference play " . $file_path;
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($playfile);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function confLock($conference){
+ $playfile = "api conference $conference lock";
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($playfile);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function confUnlock($conference){
+ $playfile = "api conference $conference unlock";
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($playfile);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function confMute($conference, $member){
+ $playfile = "api conference $conference mute $member";
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($playfile);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ public function confUnmute($conference, $member){
+ $playfile = "api conference $conference unmute $member";
+ $esl = new eslConnection($this->esl_server, $this->esl_port, $this->esl_secret);
+ $e = $esl->sendRecv($playfile);
+ $body = $e->getBody();
+ return $body;
+ }
+
+ /*** Directory Methods ***/
+
+ /* Directory Domain Methods */
+ public function getDirDomains(){
+ $dbh = $this->getDbh();
+ $query = sprintf("select * from domains");
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirDomainbyName($domain_name){
+ $query = sprintf("select * from domains where name = '%s'", $domain_name);
+ $dbh = $this->getDbh();
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results[0];
+ }
+
+ public function getDirDomain($domains_uid){
+ $dbh = $this->getDbh();
+ $query = sprintf("select * from domain_params where domains_uid = $domains_uid");
+ $stmt = $dbh->query($query);
+ $results['params'] = $stmt->fetchAll();
+ $query = sprintf("select * from domain_variables where domains_uid = $domains_uid");
+ $stmt = $dbh->query($query);
+ $results['variables'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function addDirDomain($domain_name){
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into domains (name) values ("%s")', $domain_name);
+ return $dbh->exec($query);
+ }
+
+ public function addDirDomainParam($domains_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into domain_params (domains_uid, name, value) values (%s, "%s", "%s")', $domains_uid, $name, $value);
+ return $dbh->exec($query);
+ }
+
+ public function addDirDomainVar($domains_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into domain_variables (domains_uid, name, value) values (%s, "%s", "%s")', $domains_uid, $name, $value);
+ return $dbh->exec($query);
+ }
+
+ public function updateDirDomainParam($param_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('update domain_params set name = "%s", value = "%s" where uid=%s', $name, $value, $param_uid);
+ return $dbh->exec($query);
+ }
+
+ public function updateDirDomainVar($var_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('update domain_variables set name = "%s", value = "%s" where uid=%s', $name, $value, $var_uid);
+ return $dbh->exec($query);
+ }
+
+ public function deleteDirDomainParam($param_uid) {
+ $dbh = $this->getDbh();
+ $query = sprintf('delete from domain_params where uid=%s', $param_uid);
+ return $dbh->exec($query);
+ }
+
+ public function deleteDirDomainVar($var_uid) {
+ $dbh = $this->getDbh();
+ $query = sprintf('delete from domain_variables where uid=%s', $var_uid);
+ return $dbh->exec($query);
+ }
+
+
+ /* Directory User Methods */
+ public function getDirUsersByDomainUidByUsername($domain_uid, $user_name){
+ $query = sprintf("select * from users where domains_uid = '%s' and username = '%s'", $domain_uid, $user_name);
+ $dbh = $this->getDbh();
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results[0];
+ }
+
+ public function getDirUser($user_uid){
+ $dbh = $this->getDbh();
+ $query = sprintf("select * from user_params where users_uid = $user_uid");
+ $stmt = $dbh->query($query);
+ $results['params'] = $stmt->fetchAll();
+ $query = sprintf("select * from user_variables where users_uid = $user_uid");
+ $stmt = $dbh->query($query);
+ $results['variables'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirUsers($domains_uid){
+ $dbh = $this->getDbh();
+ $query = sprintf("select * from users where domains_uid = $domains_uid");
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function addDirDomainUser($domains_uid, $username, $mailbox, $cidr, $enabled) {
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into users (domains_uid, username, mailbox, cidr, enabled) values (%s, "%s", "%s", "%s", %s)',
+ $domains_uid, $username, $mailbox, $cidr, $enabled);
+ return $dbh->exec($query);
+ }
+
+ public function addDirDomainUserParam($users_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into user_params (users_uid, name, value) values (%s, "%s", "%s")', $users_uid, $name, $value);
+ return $dbh->exec($query);
+ }
+
+ public function addDirDomainUserVar($users_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('insert into user_variables (users_uid, name, value) values (%s, "%s", "%s")', $users_uid, $name, $value);
+ return $dbh->exec($query);
+ }
+
+ public function updateDirDomainUserParam($param_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('update user_params set name = "%s", value = "%s" where uid=%s', $name, $value, $param_uid);
+ return $dbh->exec($query);
+ }
+
+ public function updateDirDomainUserVar($var_uid, $name, $value) {
+ $dbh = $this->getDbh();
+ $query = sprintf('update user_variables set name = "%s", value = "%s" where uid=%s', $name, $value, $var_uid);
+ return $dbh->exec($query);
+ }
+
+ public function deleteDirDomainUserParam($param_uid) {
+ $dbh = $this->getDbh();
+ $query = sprintf('delete from user_params where uid=%s', $param_uid);
+ if ($dbh->exec($query) < 1) {
+ return "FAILED " . $query;
+ } else {
+ return "SUCESS";
+ }
+ }
+
+ public function deleteDirDomainUserVar($var_uid) {
+ $dbh = $this->getDbh();
+ $query = sprintf('delete from user_variables where uid=%s', $var_uid);
+ if ($dbh->exec($query) < 1) {
+ return "FAILED " . $query;
+ } else {
+ return "SUCESS";
+ }
+ }
+
+ /* Directory Group Methods */
+ public function getDirGroups($domains_uid){
+ $dbh = $this->getDbh();
+ $query = sprintf("select * from groups where domains_uid = $domains_uid");
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirGroupsByDomianUidByUserUid($domain_uid, $user_uid){
+ $query = sprintf("select a.uid as groupUid, a.name as groupName, b.uid as usersUid from groups as a, group_members as b where a.uid = b.groups_uid and b.domains_uid = %s and b.users_uid = %s", $domain_uid, $user_uid) ;
+ $dbh = $this->getDbh();
+ $stmt = $dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirGroup($groups_uid){
+ $dbh = $this->getDbh();
+ $query = sprintf("select a.uid as groupMemberUid, a.users_uid as usersUid, b.username as usersUsername from group_members as a, users as b where a.groups_uid = $groups_uid and a.users_uid = b.uid") ;
+ $stmt = $dbh->query($query);
+ $results['members'] = $stmt->fetchAll();
+ $query = sprintf("select uid as usersUid, username as usersUsername from users where uid not in (select users_uid from group_members where groups_uid = $groups_uid) and domains_uid = (select domains_uid from groups where uid = $groups_uid)");
+ $stmt = $dbh->query($query);
+ $results['nonmembers'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function addDirGroup($domains_uid, $new_groupname){
+ $dbh = $this->getDbh();
+ $query = sprintf("insert into groups (domains_uid, name) values (%s, '%s')", $domains_uid, $new_groupname);
+
+ if ($dbh->exec($query) > 0){
+ return "INSERTED";
+ } else {
+ return "FAILED $query";
+ }
+ }
+
+}
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
+ */
+?>
Deleted: freeswitch/branches/seven/contrib/swk/php/amfphp/gen_users.php
Copied: freeswitch/branches/seven/contrib/swk/php/amfphp/gen_users.php (from rev 14471, freeswitch/trunk/contrib/swk/php/amfphp/gen_users.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/amfphp/gen_users.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/amfphp/gen_users.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,106 @@
+<?
+/* Simple Script to generate a Domain and a group of users */
+
+if($argv[1] == "-h" || $argv[1] == "-help" || $argv[1] == "-?"){
+ printf("%s <domain_name> <start_exten> <stop_exten> <sip_pass>\n", $argv[0]);
+ printf("Example: %s domain.com 1000 1019 1234\n", $argv[0]);
+ die();
+}
+
+$domain_name = $argv[1];
+$start = $argv[2];
+$stop = $argv[3];
+$sip_pass = $argv[4];
+
+require_once("freeswitch.php");
+
+$domains_params_insert = array(array('dial-string','{presence_id=\${dialed_user}@\${dialed_domain}}\${sofia_contact(\${dialed_user}@\${dialed_domain})}'));
+
+$domains_vars_insert = array( array('record_stereo','true'),
+ array('default_gateway','\$\${default_provider}'),
+ array('default_areacode','\$\${default_areacode}'),
+ array('transfer_fallback_extension','operator'));
+
+$user_default_vars = array( array("numbering_plan", "\$\${default_country}"),
+ array("default_areacode", "\$\${default_areacode}"),
+ array("default_gateway", "\$\${default_provider}"));
+
+$user_params_insert = array( array('password',$sip_pass),
+ array('vm-password','%s'));
+
+$user_vars_insert = array( array('toll_allow','domestic,international,local'),
+ array('accountcode','%s'),
+ array('user_context','default'),
+ array('effective_caller_id_name','Extension %s'),
+ array('effective_caller_id_number','%s'),
+ array('outbound_caller_id_name','\$\${outbound_caller_name}'),
+ array('outbound_caller_id_number','\$\${outbound_caller_id}'),
+ array('callgroup','techsupport'));
+
+
+$fsc = new FreeSWITCH();
+
+if ($fsc->addDirDomain($domain_name) < 1){
+ die("add domain failed\n");
+}
+
+$db_domain = $fsc->getDirDomainbyName($domain_name);
+
+foreach($domains_params_insert as $param){
+ if ($fsc->addDirDomainParam($db_domain['uid'], $param[0], $param[1]) < 1){
+ die("Add Domain Param Failed\n");
+ }
+}
+
+foreach($domains_vars_insert as $vars){
+ if ($fsc->addDirDomainVar($db_domain['uid'], $vars[0], $vars[1]) < 1 ){
+ die("Add Domain Var Failed\n");
+ }
+}
+
+if ($fsc->addDirDomainUser($db_domain['uid'], "default", "", "", 1) < 1) {
+ die("add default user failed\n");
+}
+
+$db_user = $fsc->getDirUsersByDomainUidByUsername($db_domain['uid'], "default");
+
+foreach($user_default_vars as $vars){
+ if (preg_match('/%s/', $vars[1])) {
+ $temp = $vars[1];
+ $vars[1] = sprintf($temp, "default");
+ }
+ if ($fsc->addDirDomainUserVar($db_user['uid'], $vars[0], $vars[1]) < 1 ) {
+ die("Add Default User Var Failed\n");
+ }
+}
+
+for ($i = $start; $i <= $stop; $i++) {
+
+ if ($fsc->addDirDomainUser($db_domain['uid'], $i, $i, "", 1) < 1) {
+ die("add user failed\n");
+ }
+
+ $db_user = $fsc->getDirUsersByDomainUidByUsername($db_domain['uid'], $i);
+
+ foreach($user_params_insert as $param){
+ if (preg_match('/%s/', $param[1])) {
+ $temp = $param[1];
+ $param[1] = sprintf($temp, $i);
+ }
+ if ($fsc->addDirDomainUserParam($db_user['uid'], $param[0], $param[1]) < 1){
+ die("Add User Param Failed\n");
+ }
+ }
+
+ foreach($user_vars_insert as $vars){
+ if (preg_match('/%s/', $vars[1])) {
+ $temp = $vars[1];
+ $vars[1] = sprintf($temp, $i);
+ }
+ if ($fsc->addDirDomainUserVar($db_user['uid'], $vars[0], $vars[1]) < 1 ) {
+ die("Add User Var Failed\n");
+ }
+ }
+}
+
+?>
Copied: freeswitch/branches/seven/contrib/swk/php/esl_cdr (from rev 14471, freeswitch/trunk/contrib/swk/php/esl_cdr)
Deleted: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.mysql.sql
Copied: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.mysql.sql (from rev 14471, freeswitch/trunk/contrib/swk/php/esl_cdr/esl_cdr.mysql.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.mysql.sql (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.mysql.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+CREATE TABLE IF NOT EXISTS `cdr` (
+ `uuid` varchar(100) NOT NULL,
+ `acctcode` varchar(100) NOT NULL,
+ `ani` varchar(100) NOT NULL,
+ `e164_ani` varchar(100) NOT NULL,
+ `dnis` varchar(100) NOT NULL,
+ `e164_dnis` varchar(100) NOT NULL,
+ `translated_dnis` varchar(100) NOT NULL,
+ `src_host` varchar(100) NOT NULL,
+ `read_codec` varchar(100) NOT NULL,
+ `write_codec` varchar(100) NOT NULL,
+ `clid_name` varchar(100) NOT NULL,
+ `clid_number` varchar(100) NOT NULL,
+ `src_sdp` varchar(100) NOT NULL,
+ `dest_sdp` varchar(100) NOT NULL,
+ `originate_disposition` varchar(100) NOT NULL,
+ `bridge_to_uuid` varchar(100) NOT NULL,
+ `endpoint_disposition` varchar(100) NOT NULL,
+ `sip_hangup_disposition` varchar(100) NOT NULL,
+ `term_cause` varchar(100) NOT NULL,
+ `hangup_cause` varchar(100) NOT NULL,
+ `start_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `answer_stamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `progress_media_stamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `end_stamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `duration` int(11) NOT NULL,
+ `billsec` int(11) NOT NULL,
+ `progress_mediasec` int(11) NOT NULL,
+ `billmin` varchar(100) NOT NULL,
+ `carrier_id` varchar(100) NOT NULL,
+ `cust_cost` varchar(100) NOT NULL,
+ `carrier_cost` varchar(100) NOT NULL
+)
Deleted: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.php
Copied: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.php (from rev 14471, freeswitch/trunk/contrib/swk/php/esl_cdr/esl_cdr.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,107 @@
+<?
+require_once('ESL.php');
+require_once("MDB2.php");
+
+$esl_host = '127.0.0.1';
+$esl_port = '8021';
+$esl_password = 'ClueCon';
+
+
+$dbtype='mysql'; /* Set the Database type */
+$db_hostname = 'localhost'; /* Database Server hostname */
+$db_port = '3306'; /* Database Server Port */
+$db_username = 'root'; /* Database Server username */
+$db_password = 'password'; /* Database Server password */
+$db_database = 'esl_cdr'; /* DataBase Name */
+if ($dbtype == 'mysql') {
+ $pdo_flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,);
+}
+
+$dbh = new PDO("$dbtype:host=$db_hostname;port=$db_port;dbname=$db_database", $db_username, $db_password, $pdo_flags);
+
+$con = MDB2::factory($db_url);
+if(PEAR::isError($con)) {
+ die("Error while connecting : " . $con->getMessage());
+}
+
+/* set up the ESL Connection */
+$esl = new eslConnection($esl_host, $esl_port, $esl_password);
+$e = $esl->sendRecv("api status");
+print $e->getBody();
+$esl->events("plain", "channel_hangup");
+for(;;) {
+ while (!$esl->connected()) {
+ // if the connection is down, loop until we're able to reconnect
+ $esl = new eslConnection($esl_host, $esl_port, $esl_password);
+ $esl->events("plain", "channel_hangup");
+
+ sleep (1);
+ }
+ $e = $esl->recvEvent();
+ if ($e) {
+ $lines = explode("\n", $e->serialize());
+ foreach ($lines as $line){
+ $temp_data = explode(": ", $line);
+
+ if ($temp_data[0]){
+ if ($temp_data[0] == 'variable_easy_acctcode'){
+ $data['acctcode'] = $temp_data[1];
+ } elseif ($temp_data[0] == 'variable_acctcode'){
+ $data['acctcode'] = $temp_data[1];
+ } elseif ($temp_data[0] == 'variable_accountcode'){
+ $data['acctcode'] = $temp_data[1];
+ } elseif ($temp_data[0] == 'variable_account_code'){
+ $data['acctcode'] = $temp_data[1];
+ } else {
+ $data[$temp_data[0]] = $temp_data[1];
+ }
+ }
+ }
+
+ $insert = sprintf("INSERT into cdr (uuid, acctcode, ani, e164_ani, dnis, translated_dnis, e164_dnis, src_host, read_codec, write_codec, clid_name, ".
+ "clid_number, src_sdp, dest_sdp, originate_disposition, bridge_to_uuid, endpoint_disposition, sip_hangup_disposition, term_cause, ".
+ "hangup_cause, start_stamp, answer_stamp, progress_media_stamp, end_stamp, duration, billsec, progress_mediasec, billmin, ".
+ "carrier_id, cust_cost, carrier_cost)".
+ "VALUES".
+ "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %s, '%s', '%s',".
+ "%s, %s, %s, %s, %s, %s, %s)",
+ $data['Unique-ID'],
+ $data['acctcode'],
+ $data['Caller-Caller-ID-Number'],
+ $data['Caller-Caller-ID-Number'],
+ urldecode($data['Caller-Destination-Number']),
+ urldecode($data['Caller-Destination-Number']),
+ urldecode($data['Caller-Destination-Number']),
+ $data['Caller-Network-Addr'],
+ $data['Channel-Read-Codec-Name']."-". $data['Channel-Read-Codec-Rate'],
+ $data['Channel-Write-Codec-Name']."-". $data['Channel-Write-Codec-Rate'],
+ urlencode($data['Caller-Caller-ID-Name']),
+ $data['Caller-Caller-ID-Number'],
+ $data['variable_switch_r_sdp'],
+ $data['variable_switch_m_sdp'],
+ $data['variable_originate_disposition'],
+ $data['variable_bridge_to'],
+ $data['variable_endpoint_disposition'],
+ $data['variable_sip_hangup_disposition'],
+ $data['variable_sip_term_cause'],
+ $data['variable_hangup_cause'],
+ urldecode($data['variable_start_stamp']) . '-05',
+ isset($data['variable_answer_stamp'])?'\''. urldecode($data['variable_answer_stamp']) . '-05\'':'null',
+ urldecode($data['variable_progress_media_stamp']) . '-05',
+ urldecode($data['variable_end_stamp']) . '-05',
+ $data['variable_duration'],
+ $data['variable_billsec'],
+ $data['variable_progress_mediasec'],
+ $data['variable_billsec'],
+ "0",
+ "0",
+ "0"
+ );
+
+ $inserted = $dbh->exec($insert);
+ if ($inserted < 1){
+ die($db->errorInfo());
+ }
+ }
+}
+?>
Deleted: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.postgres.sql
Copied: freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.postgres.sql (from rev 14471, freeswitch/trunk/contrib/swk/php/esl_cdr/esl_cdr.postgres.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.postgres.sql (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/esl_cdr/esl_cdr.postgres.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,71 @@
+--
+-- PostgreSQL database dump
+--
+
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = off;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+SET escape_string_warning = off;
+
+SET search_path = public, pg_catalog;
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- Name: cdr; Type: TABLE; Schema: public; Owner: root; Tablespace:
+--
+
+CREATE TABLE cdr (
+ uuid character varying,
+ acctcode character varying,
+ ani character varying,
+ e164_ani character varying,
+ dnis character varying,
+ translated_dnis character varying,
+ e164_dnis character varying,
+ src_host character varying,
+ read_codec character varying,
+ write_codec character varying,
+ clid_name character varying,
+ clid_number character varying,
+ src_sdp character varying,
+ dest_sdp character varying,
+ originate_disposition character varying,
+ bridge_to_uuid character varying,
+ endpoint_disposition character varying,
+ sip_hangup_disposition character varying,
+ term_cause character varying,
+ hangup_cause character varying,
+ start_stamp timestamp with time zone,
+ answer_stamp timestamp with time zone,
+ progress_media_stamp timestamp with time zone,
+ end_stamp timestamp with time zone,
+ duration integer,
+ billsec integer,
+ progress_mediasec integer,
+ billmin numeric(8,2),
+ carrier_id integer,
+ cust_cost numeric(7,4),
+ carrier_cost numeric(7,4)
+);
+
+
+ALTER TABLE public.cdr OWNER TO root;
+
+--
+-- Name: public; Type: ACL; Schema: -; Owner: postgres
+--
+
+REVOKE ALL ON SCHEMA public FROM PUBLIC;
+REVOKE ALL ON SCHEMA public FROM postgres;
+GRANT ALL ON SCHEMA public TO postgres;
+GRANT ALL ON SCHEMA public TO PUBLIC;
+
+
+--
+-- PostgreSQL database dump complete
+--
+
Copied: freeswitch/branches/seven/contrib/swk/php/xml_curl (from rev 14471, freeswitch/trunk/contrib/swk/php/xml_curl)
Deleted: freeswitch/branches/seven/contrib/swk/php/xml_curl/FSConfig.php
Copied: freeswitch/branches/seven/contrib/swk/php/xml_curl/FSConfig.php (from rev 14471, freeswitch/trunk/contrib/swk/php/xml_curl/FSConfig.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/xml_curl/FSConfig.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/xml_curl/FSConfig.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * FreeSWITCH AMF-PHP ESL Client Library
+ * Copyright (C) 2009, Ken Rice <krice@tollfreegateway.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Ken Rice <krice@tollfreegateway.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Ken Rice <krice@tollfreegateway.com>
+ *
+ * freeswitch.php -- Initial Class file for XML_CURL responses for Codename: SHIPMENT
+ *
+ ***************************************************************************************************
+ *
+ * This Requires the FreeSWITCH ESL Extension to be installed properly on your system.
+ *
+ */
+
+// require_once "ESL.php";
+
+class FSConfig {
+ // var $esl;
+
+ var $dbh;
+
+ public function __construct(){
+ $dbtype='mysql'; /* Set the Database type */
+ // $db_hostname = 'localhost'; /* Database Server hostname */
+ $db_hostname = '127.0.0.1'; /* Database Server hostname */
+ $db_port = '3306'; /* Database Server Port */
+ $db_username = 'root'; /* Database Server username */
+ $db_password = 'password'; /* Database Server password */
+ $db_database = 'shipment'; /* DataBase Name */
+ if ($dbtype == 'mysql') {
+ $pdo_flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,);
+ }
+ $this->dbh = new PDO("$dbtype:host=$db_hostname;port=$db_port;dbname=$db_database", $db_username, $db_password, $pdo_flags);
+
+ }
+
+ /*** IVR Methods Methods ***/
+ public function getConfigMenus(){
+ $query = sprintf("select * from menus");
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getConfigMenuOptions($menu_uid) {
+ $query = sprintf("select * from menu_entries where menu_uid = %s", $menu_uid);
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+}
Deleted: freeswitch/branches/seven/contrib/swk/php/xml_curl/FSDirectory.php
Copied: freeswitch/branches/seven/contrib/swk/php/xml_curl/FSDirectory.php (from rev 14471, freeswitch/trunk/contrib/swk/php/xml_curl/FSDirectory.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/xml_curl/FSDirectory.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/xml_curl/FSDirectory.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,163 @@
+<?php
+
+/*
+ * FreeSWITCH AMF-PHP ESL Client Library
+ * Copyright (C) 2009, Ken Rice <krice@tollfreegateway.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Ken Rice <krice@tollfreegateway.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Ken Rice <krice@tollfreegateway.com>
+ *
+ * freeswitch.php -- Initial Class file for XML_CURL responses for Codename: SHIPMENT
+ *
+ ***************************************************************************************************
+ *
+ * This Requires the FreeSWITCH ESL Extension to be installed properly on your system.
+ *
+ */
+
+// require_once "ESL.php";
+
+class FSDirectory {
+ // var $esl;
+
+ var $dbh;
+
+ public function __construct(){
+ $dbtype='mysql'; /* Set the Database type */
+ // $db_hostname = 'localhost'; /* Database Server hostname */
+ $db_hostname = '127.0.0.1'; /* Database Server hostname */
+ $db_port = '3306'; /* Database Server Port */
+ $db_username = 'root'; /* Database Server username */
+ $db_password = 'password'; /* Database Server password */
+ $db_database = 'shipment'; /* DataBase Name */
+ if ($dbtype == 'mysql') {
+ $pdo_flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,);
+ }
+ $this->dbh = new PDO("$dbtype:host=$db_hostname;port=$db_port;dbname=$db_database", $db_username, $db_password, $pdo_flags);
+
+ }
+
+ private function getESL() {
+ $esl_server = "127.0.0.1"; /* ESL Server */
+ $esl_port = "8021"; /* ESL Port */
+ $esl_secret = "ClueCon"; /* ESL Secret */
+ $this->esl = new eslConnection($esl_server, $esl_port, $esl_secret);
+ }
+
+ /*
+ public function getStatus() {
+ $e = $this->esl->sendRecv("api status");
+ $body = $e->getBody();
+ return $body;
+ }
+ */
+
+ /*** Directory Methods ***/
+
+ /* Directory Domain Methods */
+ public function getDirDomains(){
+ $query = sprintf("select * from domains");
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirDomainbyName($domain_name){
+ $query = sprintf("select * from domains where name = '%s'", $domain_name);
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results[0];
+ }
+
+ public function getDirDomain($domains_uid){
+ $query = sprintf("select * from domain_params where domains_uid = $domains_uid");
+ $stmt = $this->dbh->query($query);
+ $results['params'] = $stmt->fetchAll();
+ $query = sprintf("select * from domain_variables where domains_uid = $domains_uid");
+ $stmt = $this->dbh->query($query);
+ $results['variables'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ /* Directory User Methods */
+ public function getDirUser($user_uid){
+ $query = sprintf("select * from user_params where users_uid = $user_uid");
+ $stmt = $this->dbh->query($query);
+ $results['params'] = $stmt->fetchAll();
+ $query = sprintf("select * from user_variables where users_uid = $user_uid");
+ $stmt = $this->dbh->query($query);
+ $results['variables'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirUsers($domains_uid){
+ $query = sprintf("select * from users where domains_uid = $domains_uid");
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirUsersByDomainUidByUsername($domain_uid, $user_name){
+ $query = sprintf("select * from users where domains_uid = '%s' and username = '%s'", $domain_uid, $user_name);
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results[0];
+ }
+
+ /* Directory Group Methods */
+ public function getDirGroups($domains_uid){
+ $query = sprintf("select * from groups where domains_uid = $domains_uid");
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirGroup($groups_uid){
+ $query = sprintf("select a.uid as groupMemberUid, a.users_uid as usersUid, b.username as usersUsername from group_members as a, users as b where a.groups_uid = $groups_uid and a.users_uid = b.uid") ;
+ $stmt = $this->dbh->query($query);
+ $results['members'] = $stmt->fetchAll();
+ $query = sprintf("select uid as usersUid, username as usersUsername from users where uid not in (select users_uid from group_members where groups_uid = $groups_uid) and domains_uid = (select domains_uid from groups where uid = $groups_uid)");
+ $stmt = $this->dbh->query($query);
+ $results['nonmembers'] = $stmt->fetchAll();
+ return $results;
+ }
+
+ public function getDirGroupsByDomianUidByUserUid($domain_uid, $user_uid){
+ $query = sprintf("select a.uid as groupUid, a.name as groupName, b.uid as usersUid from groups as a, group_members as b where a.uid = b.groups_uid and b.domains_uid = %s and b.users_uid = %s", $domain_uid, $user_uid) ;
+ $stmt = $this->dbh->query($query);
+ $results = $stmt->fetchAll();
+ return $results;
+ }
+
+}
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
+ */
+?>
Deleted: freeswitch/branches/seven/contrib/swk/php/xml_curl/directory.php
Copied: freeswitch/branches/seven/contrib/swk/php/xml_curl/directory.php (from rev 14471, freeswitch/trunk/contrib/swk/php/xml_curl/directory.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/xml_curl/directory.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/xml_curl/directory.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+link fs_curl.php
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/swk/php/xml_curl/fs_curl.php
Copied: freeswitch/branches/seven/contrib/swk/php/xml_curl/fs_curl.php (from rev 14471, freeswitch/trunk/contrib/swk/php/xml_curl/fs_curl.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/php/xml_curl/fs_curl.php (rev 0)
+++ freeswitch/branches/seven/contrib/swk/php/xml_curl/fs_curl.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,130 @@
+<?
+
+require_once "FSDirectory.php";
+require_once "FSConfig.php";
+
+
+header ("content-type: text/xml");
+
+foreach ($_REQUEST as $key => $value) {
+ $$key = $value;
+}
+
+
+/* Uncomment and edit for debugging directory*/
+/*
+$section = "directory";
+$tag_name= "domain";
+$key_name ="name";
+$key_value="192.168.1.140";
+$user="1000";
+*/
+
+/* Uncomment and edit for debugging directory*/
+/*
+$section = "configuration";
+$tag_name= "configuration";
+$key_name ="name";
+$key_value="ivr.conf";
+*/
+/* section=configuration&tag_name=configuration&key_name=name&key_value=ivr.conf&Event-Name=REQUEST_PARAMS */
+
+if ($section == "configuration" && $tag_name == "configuration" && $key_name == "name" && $key_value == "ivr.conf" ) {
+
+ $fsc = new FSConfig();
+
+ printf(" <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
+ printf(" <document type=\"freeswitch/xml\">\n");
+ printf(" <section name=\"configuration\" description=\"Codename: Shipment IVR\">\n");
+ printf(" <configuration name=\"ivr.conf\" description=\"IVR menus\">\n");
+ printf(" <menus>\n");
+
+ $db_menus = $fsc->getConfigMenus();
+ foreach ($db_menus as $db_menu) {
+ printf(" <menu name=\"%s\"\n".
+ " greet-long=\"%s\"\n".
+ " greet-short=\"%s\"\n".
+ " invalid-sound=\"%s\"\n".
+ " exit-sound=\"%s\"\n".
+ " timeout=\"%s\"\n".
+ " inter-digit-timeout=\"%s\"\n".
+ " max-failures=\"%s\"\n".
+ " max-timeouts=\"%s\"\n".
+ " digit-len=\"%s\">\n",
+ $db_menu['name'], $db_menu['greet_long'], $db_menu['greet_short'], $db_menu['invalid_sound'],
+ $db_menu['exit_sound'], $db_menu['timeout'], $db_menu['inter_digit_timeout'], $db_menu['max_failures'],
+ $db_menu['max_timeouts'], $db_menu['digit_len']);
+
+ $db_menuopts = $fsc->getConfigMenuOptions($db_menu['uid']);
+
+ foreach ($db_menuopts as $db_menuopt) {
+ printf(" <entry action=\"%s\" digits=\"%s\" param=\"%s\"/>\n",
+ $db_menuopt['action'], $db_menuopt['digits'], $db_menuopt['param']);
+ }
+
+ printf(" </menu>\n");
+ }
+ printf(" </menus>\n");
+ printf(" </configuration>\n");
+ printf(" </section>\n");
+ printf(" </document>\n");
+
+} else if ($section == "directory" && $tag_name == "domain" && $key_name == "name" && $user != "" ) {
+
+ $fsd = new FSDirectory();
+ $db_domain = $fsd->getDirDomainbyName($key_value);
+ $db_domain_settings = $fsd->getDirDomain($db_domain['uid']);
+ $db_user = $fsd->getDirUsersByDomainUidByUsername($db_domain['uid'], $user);
+ $db_user_settings = $fsd->getDirUser($db_user['uid']);
+ $db_groups = $fsd->getDirGroupsByDomianUidByUserUid($db_domain['uid'], $db_user['uid']);
+
+ printf(" <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
+ printf(" <document type=\"freeswitch/xml\">\n");
+ printf(" <section name=\"directory\" description=\"Codename: Shipment Directory\">\n");
+ printf(" <domain name=\"%s\">\n", $db_domain['name']);
+ printf(" <params>\n");
+ foreach($db_domain_settings['params'] as $db_params) {
+ printf(" <param name=\"%s\" value=\"%s\"/>\n", $db_params['name'], $db_params['value']);
+ }
+ printf(" </params>\n");
+ printf(" <variables>\n");
+ foreach($db_domain_settings['variables'] as $db_variables) {
+ printf(" <variable name=\"%s\" value=\"%s\"/>\n", $db_variables['name'], $db_variables['value']);
+ }
+ printf(" </variables>\n");
+ printf(" <groups>\n");
+ printf(" <group name=\"default\">\n");
+ printf(" <users>\n");
+ printf(" <user id=\"%s\" mailbox=\"%s\">\n", $db_user['username'], $db_user['mailbox']);
+ printf(" <params>\n");
+ foreach($db_user_settings['params'] as $db_params) {
+ printf(" <param name=\"%s\" value=\"%s\"/>\n", $db_params['name'], $db_params['value']);
+ }
+ printf(" </params>\n");
+ printf(" <variables>\n");
+ foreach($db_user_settings['variables'] as $db_variables) {
+ printf(" <variable name=\"%s\" value=\"%s\"/>\n", $db_variables['name'], $db_variables['value']);
+ }
+ printf(" </variables>\n");
+ printf(" </user>\n");
+ printf(" </users>\n");
+ printf(" </group>\n");
+ foreach($db_groups as $db_group){
+ printf(" <group name=\"%s\">\n", $db_group['groupName']);
+ printf(" <users>\n");
+ printf(" <user id=\"%s\" type=\"pointer\"/>\n", $user);
+ printf(" </users>\n");
+ printf(" </group>\n");
+ }
+
+ printf(" </groups>\n");
+ printf(" </domain>\n");
+ printf(" </section>\n");
+ printf(" </document>\n");
+
+} else {
+ printf("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"freeswitch/xml\">\n<section name=\"result\">\n".
+ "<result status=\"not found\" />\n</section>\n</document>");
+ die();
+}
+?>
Copied: freeswitch/branches/seven/contrib/swk/sql (from rev 14471, freeswitch/trunk/contrib/swk/sql)
Deleted: freeswitch/branches/seven/contrib/swk/sql/shipment.mysql.sql
Copied: freeswitch/branches/seven/contrib/swk/sql/shipment.mysql.sql (from rev 14471, freeswitch/trunk/contrib/swk/sql/shipment.mysql.sql) (0 => 14472)
--- freeswitch/branches/seven/contrib/swk/sql/shipment.mysql.sql (rev 0)
+++ freeswitch/branches/seven/contrib/swk/sql/shipment.mysql.sql 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,274 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost Database: shipment
+-- ------------------------------------------------------
+-- Server version 5.0.45
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `domain_params`
+--
+
+DROP TABLE IF EXISTS `domain_params`;
+CREATE TABLE `domain_params` (
+ `uid` int(11) NOT NULL auto_increment,
+ `domains_uid` int(11) NOT NULL,
+ `name` varchar(64) NOT NULL,
+ `value` varchar(256) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `domain_uid` (`domains_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `domain_params`
+--
+
+LOCK TABLES `domain_params` WRITE;
+/*!40000 ALTER TABLE `domain_params` DISABLE KEYS */;
+INSERT INTO `domain_params` VALUES (1,1,'dial-string','{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}');
+/*!40000 ALTER TABLE `domain_params` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `domain_variables`
+--
+
+DROP TABLE IF EXISTS `domain_variables`;
+CREATE TABLE `domain_variables` (
+ `uid` int(11) NOT NULL auto_increment,
+ `domains_uid` int(11) NOT NULL,
+ `name` varchar(64) NOT NULL,
+ `value` varchar(128) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `domain_uid` (`domains_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `domain_variables`
+--
+
+LOCK TABLES `domain_variables` WRITE;
+/*!40000 ALTER TABLE `domain_variables` DISABLE KEYS */;
+INSERT INTO `domain_variables` VALUES (1,1,'record_stereo','true'),(2,1,'default_gateway','$${default_provider}'),(3,1,'default_areacode','$${default_areacode}'),(4,1,'transfer_fallback_extension','operator');
+/*!40000 ALTER TABLE `domain_variables` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `domains`
+--
+
+DROP TABLE IF EXISTS `domains`;
+CREATE TABLE `domains` (
+ `uid` int(11) NOT NULL auto_increment COMMENT 'UID for the table Auto Assigned',
+ `name` varchar(128) NOT NULL COMMENT 'domaine name',
+ `enabled` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`uid`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `domains`
+--
+
+LOCK TABLES `domains` WRITE;
+/*!40000 ALTER TABLE `domains` DISABLE KEYS */;
+INSERT INTO `domains` VALUES (1,'192.168.1.140',1);
+/*!40000 ALTER TABLE `domains` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `group_members`
+--
+
+DROP TABLE IF EXISTS `group_members`;
+CREATE TABLE `group_members` (
+ `uid` int(11) NOT NULL auto_increment,
+ `domains_uid` int(11) NOT NULL,
+ `groups_uid` int(11) NOT NULL,
+ `users_uid` int(11) NOT NULL,
+ `type` varchar(32) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `domain_uid` (`domains_uid`,`groups_uid`,`users_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `group_members`
+--
+
+LOCK TABLES `group_members` WRITE;
+/*!40000 ALTER TABLE `group_members` DISABLE KEYS */;
+INSERT INTO `group_members` VALUES (1,1,1,1,'pointer'),(2,1,1,2,'pointer'),(3,1,1,3,'pointer'),(4,1,1,4,'pointer'),(5,1,2,5,'pointer'),(6,1,2,6,'pointer'),(7,1,2,7,'pointer'),(8,1,2,8,'pointer'),(9,1,3,9,'pointer'),(10,1,3,10,'pointer'),(11,1,3,11,'pointer'),(12,1,3,12,'pointer');
+/*!40000 ALTER TABLE `group_members` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `groups`
+--
+
+DROP TABLE IF EXISTS `groups`;
+CREATE TABLE `groups` (
+ `uid` int(11) NOT NULL auto_increment,
+ `domains_uid` int(11) NOT NULL,
+ `name` varchar(64) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `domain_uid` (`domains_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `groups`
+--
+
+LOCK TABLES `groups` WRITE;
+/*!40000 ALTER TABLE `groups` DISABLE KEYS */;
+INSERT INTO `groups` VALUES (1,1,'sales'),(2,1,'billing'),(3,1,'support');
+/*!40000 ALTER TABLE `groups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `menu_entries`
+--
+
+DROP TABLE IF EXISTS `menu_entries`;
+CREATE TABLE `menu_entries` (
+ `uid` int(11) NOT NULL auto_increment,
+ `menu_uid` int(11) NOT NULL,
+ `action` varchar(32) NOT NULL,
+ `digits` varchar(16) NOT NULL,
+ `param` varchar(256) default NULL,
+ PRIMARY KEY (`uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `menu_entries`
+--
+
+LOCK TABLES `menu_entries` WRITE;
+/*!40000 ALTER TABLE `menu_entries` DISABLE KEYS */;
+INSERT INTO `menu_entries` VALUES (1,1,'menu-exec-app','1','bridge sofia/$${domain}/888@conference.freeswitch.org'),(2,1,'menu-exec-app','2','transfer 9996 XML default'),(3,1,'menu-exec-app','3','transfer 9999 XML default'),(4,1,'menu-sub','4','demo_ivr_submenu'),(5,1,'menu-exec-app','5','transfer 1234*256 enum'),(6,1,'menu-exec-app','/^(10[01][0-9])$','transfer $1 XML features'),(7,1,'menu-top','9',NULL),(8,2,'menu-top','*',NULL);
+/*!40000 ALTER TABLE `menu_entries` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `menus`
+--
+
+DROP TABLE IF EXISTS `menus`;
+CREATE TABLE `menus` (
+ `uid` int(11) NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL,
+ `greet_long` varchar(256) default NULL,
+ `greet_short` varchar(256) default NULL,
+ `invalid_sound` varchar(256) default NULL,
+ `exit_sound` varchar(256) default NULL,
+ `timeout` int(11) default NULL,
+ `inter_digit_timeout` int(11) default NULL,
+ `max_failures` int(11) default NULL,
+ `max_timeouts` int(11) default NULL,
+ `digit_len` int(11) default NULL,
+ PRIMARY KEY (`uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `menus`
+--
+
+LOCK TABLES `menus` WRITE;
+/*!40000 ALTER TABLE `menus` DISABLE KEYS */;
+INSERT INTO `menus` VALUES (1,'demo_ivr','phrase:demo_ivr_main_menu','phrase:demo_ivr_main_menu_short','ivr/ivr-that_was_an_invalid_entry.wav','voicemail/vm-goodbye.wav',10000,2000,3,3,4),(2,'demo_ivr_submenu','phrase:demo_ivr_sub_menu','phrase:demo_ivr_sub_menu_short','ivr/ivr-that_was_an_invalid_entry.wav','voicemail/vm-goodbye.wav',15000,NULL,3,3,NULL);
+/*!40000 ALTER TABLE `menus` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `user_params`
+--
+
+DROP TABLE IF EXISTS `user_params`;
+CREATE TABLE `user_params` (
+ `uid` int(11) NOT NULL auto_increment,
+ `users_uid` int(11) NOT NULL,
+ `name` varchar(64) NOT NULL,
+ `value` varchar(128) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `user_uid` (`users_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `user_params`
+--
+
+LOCK TABLES `user_params` WRITE;
+/*!40000 ALTER TABLE `user_params` DISABLE KEYS */;
+INSERT INTO `user_params` VALUES (1,1,'password','1234'),(2,1,'vm-password','1000'),(3,2,'password','1234'),(4,2,'vm-password','1002'),(5,3,'password','1234'),(6,3,'vm-password','1003'),(7,4,'password','1234'),(8,4,'vm-password','1004'),(9,5,'password','1234'),(10,5,'vm-password','1005'),(11,6,'password','1234'),(12,6,'vm-password','1006'),(13,7,'password','1234'),(14,7,'vm-password','1007'),(15,8,'password','1234'),(16,8,'vm-password','1008'),(17,9,'password','1234'),(18,9,'vm-password','1009'),(19,10,'password','1234'),(20,10,'vm-password','1010'),(21,11,'password','1234'),(22,11,'vm-password','1011'),(23,12,'password','1234'),(24,12,'vm-password','1012'),(25,13,'password','1234'),(26,13,'vm-password','1013'),(27,14,'password','1234'),(28,14,'vm-password','1014'),(29,15,'password','1234'),(30,15,'vm-password','1015'),(31,16,'password','1234'),(32,16,'vm-password','1016'),(33,17,'password','1234'),(34,17,'vm-password','1017'),(35,18,'password','1234'),(36,18,'vm-password','1018'),(37,19,'password','1234'),(38,19,'vm-password','1019');
+/*!40000 ALTER TABLE `user_params` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `user_variables`
+--
+
+DROP TABLE IF EXISTS `user_variables`;
+CREATE TABLE `user_variables` (
+ `uid` int(11) NOT NULL auto_increment,
+ `users_uid` int(11) NOT NULL,
+ `name` varchar(64) NOT NULL,
+ `value` varchar(128) NOT NULL,
+ PRIMARY KEY (`uid`),
+ KEY `user_uid` (`users_uid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `user_variables`
+--
+
+LOCK TABLES `user_variables` WRITE;
+/*!40000 ALTER TABLE `user_variables` DISABLE KEYS */;
+INSERT INTO `user_variables` VALUES (1,1,'toll_allow','domestic,international,local'),(2,1,'accountcode','1000'),(3,1,'user_context','default'),(4,1,'effective_caller_id_name','Extension 1000'),(5,1,'effective_caller_id_number','1000'),(6,1,'outbound_caller_id_name','$${outbound_caller_name}'),(7,1,'outbound_caller_id_number','$${outbound_caller_id}'),(8,1,'callgroup','techsupport');
+/*!40000 ALTER TABLE `user_variables` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `users`
+--
+
+DROP TABLE IF EXISTS `users`;
+CREATE TABLE `users` (
+ `uid` int(11) NOT NULL auto_increment,
+ `domains_uid` int(11) NOT NULL,
+ `username` varchar(64) NOT NULL,
+ `mailbox` varchar(64) default NULL,
+ `cidr` varchar(32) default NULL,
+ `enabled` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`uid`),
+ KEY `domain_uid` (`domains_uid`,`username`,`mailbox`)
+) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `users`
+--
+
+LOCK TABLES `users` WRITE;
+/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+INSERT INTO `users` VALUES (1,1,'1000','1000',NULL,1),(2,1,'1001','1001',NULL,1),(3,1,'1002','1002',NULL,1),(4,1,'1003','1003',NULL,1),(5,1,'1004','1004',NULL,1),(6,1,'1005','1005',NULL,1),(7,1,'1006','1006',NULL,1),(8,1,'1007','1007',NULL,1),(9,1,'1008','1008',NULL,1),(10,1,'1009','1009',NULL,1),(11,1,'1010','1010',NULL,1),(12,1,'1011','1011',NULL,1),(13,1,'1012','1012',NULL,1),(14,1,'1013','1013',NULL,1),(15,1,'1014','1014',NULL,1),(16,1,'1015','1015',NULL,1),(17,1,'1016','1016',NULL,1),(18,1,'1017','1017',NULL,1),(19,1,'1018','1018',NULL,1),(20,1,'1019','1019',NULL,1);
+/*!40000 ALTER TABLE `users` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2009-03-15 9:30:01
Copied: freeswitch/branches/seven/contrib/szentesik (from rev 14471, freeswitch/trunk/contrib/szentesik)
Copied: freeswitch/branches/seven/contrib/tc (from rev 14471, freeswitch/trunk/contrib/tc)
Copied: freeswitch/branches/seven/contrib/trixter (from rev 14471, freeswitch/trunk/contrib/trixter)
Deleted: freeswitch/branches/seven/contrib/trixter/README
Copied: freeswitch/branches/seven/contrib/trixter/README (from rev 14471, freeswitch/trunk/contrib/trixter/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,122 @@
+These are examples written by Bret McDanel <trixter AT 0xdecafbad.com>
+In general, web apps are written in PHP, event socket apps are written
+in perl. The perl examples use FreeSWITCH::Client which is located in
+svn root scripts/socket.
+
+Most of these examples are not useful in their current state, and require
+some modification to make them useful. They are to provide implementation
+references for various tasks. For example, xml-cdr will read the CDR records
+from FreeSWITCH[tm] but does not process them because there is no way to
+know how you will want them stored. You would be required to implement
+whatever database system (mysql, flat file, CSV, etc) and store the records
+yourself, but it shows how you can receive the CDR records and manipulate
+them.
+
+
+== LICENSE ==
+All of these scripts are licensed under a public domain license unless
+otherwise stated within the individual files. What this means that I
+still maintain the copyright but you are totally free to do whatever
+with the programs whether commercial or FOSS.
+
+
+
+== FILE LIST ==
+
+apiexec.pl
+ Execute api commands from the console/cron/windows scheduler/etc
+
+makemodconf.pl
+ This will create a modules.conf.xml from the build modules.conf
+ ideal for a new build to uncomment all modules you built and comment
+ the ones you did not
+
+validate-ivr.pl
+ Perl app that does not connect to FreeSWITCH[tm] in any way
+ but will walk through the IVR xml. This lets you debug them
+ with only a text based display (ssh, cmd.exe, whatever) and
+ see what is going on. Timeouts are honored as are all other
+ flags and variables in the XML. Its really only useful for
+ debugging existing IVR menus and ensuring that it will do
+ what you want.
+
+ usage: validate-ivr.pl ivr.conf.xml main
+ where the first arg is the xml file and the 2nd arg is the menu name
+
+asyncsock.pl
+ Perl app utilizing EVENT SOCKET that will bind to a port and
+ is called via the dialplan 'socket' application. It will read
+ DTMF building a string of DTMF after an interdigit timeout or
+ total timeout.
+
+
+callcredit.pl
+ Perl app utilizing EVENT SOCKET that pings a webserver for each
+ call in progress checking to see if credit still remains. Can
+ form the basis for a prepaid calling platform where instead of
+ reserving large amounts of credit, not allowing credit updates
+ mid-call, or allowing customers to go negative by placing multiple
+ concurrent calls.
+
+
+calls.pl
+ Perl app utilizing EVENT SOCKET that relays new call and hangup
+ events to a webserver so that you can monitor in realtime calls
+ that are active on a given switch. All properties are relayed.
+
+
+conf-dtmf.pl
+ Perl app that will read DTMF events from a conference and play
+ a sound file. Could be used as the basis for advanced custom
+ menus from within a conference. You need to bind the DTMF key
+ to 'event' within conference.conf.xml to be sent to event socket.
+ uses EVENT SOCKET
+
+
+disa.js
+ Javascript app that will enable DISA functionality
+ with black/white lists, pins and other goodies
+
+
+faxlib.jm
+ Javascript class that integrates faxing - DEPRECATED
+ this has litle use now that dptools has a fax detect and transfer
+ to a given extension app
+
+
+call-progress.pl
+ PERL app utilizing EVENT SOCKET that will monitor RING/ANSWER/HANGUP
+ events and issue a command at that time.
+
+
+makecombinedfsxml.pl
+ PERL app that makes freeswitch-combined.xml from a freeswitch.xml
+
+
+regexptest.pl
+ PERL app that tests regexps in CLI mode
+
+
+softphone.pl
+ PERL/TK app that functions like a softphone which lets you place
+ calls from port audio. Uses EVENT SOCKET
+
+
+xml-cdr
+ PHP xml-cdr web app that receives CDR entries enabling a web based
+ CDR tracking facility in realtime
+
+
+xml-curl
+ PHP xml-curl web app that will deliver configuration files, dialplans
+ and other goodies to FreeSWITCH[tm]
+
+
+xml-rpc
+ PHP xml-rpc web app that will let you monitor calls, confs and execute
+ some commands to control conference members
+
+
+vile
+ This is vile's stuff, he didn't have his own directory when they were
+ added and they are not yet moved into his repository
Deleted: freeswitch/branches/seven/contrib/trixter/apiexec.pl
Copied: freeswitch/branches/seven/contrib/trixter/apiexec.pl (from rev 14471, freeswitch/trunk/contrib/trixter/apiexec.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/apiexec.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/apiexec.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+#
+# this script will execute api commands via xml-rpc. This can be handy if you have
+# some other program that needs to execute things but you dont have a need or ability
+# to write a full program. This makes it trivial to execute commands from cron/windows scheduler
+# or from some other interface, especially if you are not a developer.
+#
+# the api commands are just as you would type them in the CLI, the output is printed to STDOUT
+#
+# examples:
+# apiexec.pl -h
+# apiexec.pl status
+# apiexec.pl -p password -P 8021 -H 1.2.3.4 "originate sofia/mydomain.com/123\@10.0.0.1 &playback(/sounds/mysound.raw) XML default \"CID NAME\" \"12345678980\""
+
+use FreeSWITCH::Client;
+use Getopt::Std;
+
+
+# Default values
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+
+
+
+my %options=();
+my $fs;
+
+sub usage()
+ {
+ print "Usage: $0 [-p pass] [-P port] [-H host] [-h] <command>\n";
+ exit;
+ }
+
+
+ # this connects to the event socket
+ sub es_connect()
+ {
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ $fs->sendmsg({'command' => 'event plain'});
+ }
+ } or die "Error connecting: $!\n";
+ }
+
+
+ getopts("p:P:H:h",\%options);
+
+ usage() if(!$ARGV[0] || defined $options{h});
+ $password = $options{p} if defined $options{p};
+ $host = $options{H} if defined $options{H};
+ $port = $options{P} if defined $options{P};
+
+ es_connect();
+ my $reply = $fs->command($ARGV[0]);
+ if ($reply->{socketerror}) {
+ die "socket error";
+ }
+ print "$reply\n";
+
Deleted: freeswitch/branches/seven/contrib/trixter/asyncsock.pl
Copied: freeswitch/branches/seven/contrib/trixter/asyncsock.pl (from rev 14471, freeswitch/trunk/contrib/trixter/asyncsock.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/asyncsock.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/asyncsock.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,103 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+#
+# this script will look for dtmf events in event socket in async mode (where FS calls this
+# script instead of this script connecting to FS) and fill a buffer, when a timeout occurs it will
+# return that entire DTMF sequence, lather, rinse, repeat
+#
+
+use FreeSWITCH::Client;
+use threads;
+use threads::shared;
+use Data::Dumper;
+
+# configure these
+my $ip = "0.0.0.0"; # the IP we listen on 0.0.0.0 is all
+my $port = 8084; # the port we listen on
+my $firstDigitDelay = 30; # seconds to wait from the first digit pressed - 0 disables
+my $lastDigitDelay = 3; # seconds to wait from the last digit pressed
+
+
+##
+# dont touch these
+##
+my $fs;
+my $pid;
+my $dtmf : shared ="";
+my $firstDigitTS : shared=0;
+my $lastDigitTS : shared;
+my $done : shared =0;
+
+
+sub timeoutHandler {
+ while(!$done) {
+ if($dtmf != "") {
+ lock($dtmf);
+ $ts = time;
+ if (($firstDigitTS > 0) && ($firstDigitTS <= ($ts - $firstDigitDelay))) {
+ print "First digit timeout - $dtmf\n";
+ $dtmf="";
+ } elsif ($lastDigitTS <= ($ts - $lastDigitDelay)) {
+ print "Last digit timeout - $dtmf\n";
+ $dtmf="";
+ }
+ }
+ sleep 1;
+ }
+
+ if($dtmf != "") {
+ print "Final DTMF when call died - $dtmf\n";
+ }
+}
+
+
+$fs = init FreeSWITCH::Client {} or die "Error $@";
+
+for (;;) {
+ $fs->accept($ip,$port);
+
+ if (!($pid = fork)) {
+ last;
+ }
+}
+
+$o = $fs->call_command("answer");
+$o = $fs->raw_command("myevents");
+
+$timer = threads->new(\&timeoutHandler);
+
+
+# event-date-timestamp
+# event-name DTMF
+while(my $r = $fs->readhash(undef)) {
+ if ($r->{socketerror}) {
+ last;
+ }
+
+ if ($r->{has_event}) {
+ if($r->{'event-name'} == "DTMF") {
+ $ts=time;
+ # you can use the event TS as opposed to the perl one to eliminate network delay, event queue delay
+ # or whatever, I use the perl one to keep the example simple
+
+ {
+ lock($dtmf);
+ if($dtmf == "") {
+ $firstDigitTS=$ts;
+ }
+ $lastDigitTS=$ts;
+ $dtmf.=$r->{'event'}->{'dtmf-string'};
+ }
+
+ print "Got dtmf $r->{'event'}->{'dtmf-string'} at $ts\n";
+ } else {
+ print Dumper $r->{event};
+ }
+ }
+}
+
+$done=1;
+$fs->disconnect();
+$timer->join;
+print "done\n";
Deleted: freeswitch/branches/seven/contrib/trixter/call-progress.pl
Copied: freeswitch/branches/seven/contrib/trixter/call-progress.pl (from rev 14471, freeswitch/trunk/contrib/trixter/call-progress.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/call-progress.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/call-progress.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,153 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+use FreeSWITCH::Client;
+use POSIX ':signal_h'; # used for alarm to ensure we get heartbeats
+use Data::Dumper; # used to print out myhash debug info
+
+
+# configure these
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+my $timeout = 30; # seconds to expect a heartbeat event or reconnect
+my $conntime = 30; # seconds to wait between connection attempts
+my $CIDNAME = "its me"; # name to use when originating a call
+my $CIDNUM = "1234567890"; # number to use when originating a call
+my $TIMEOUT = 30; # timeout to wait for answer
+
+# array of the regexps for channels that match, useful if you dont want to do this for
+# all calls on your switch
+my @channels = (
+ '^sofia\/mydomain.com\/\d+\@192.168.0.6$',
+ '^sofia/external/888@conference.freeswitch.org$',
+);
+
+##
+# dont touch these
+##
+my $fs;
+my $lastheartbeat;
+my $lastconnect;
+
+
+sub watchedChannel($) {
+ my $channame = shift;
+
+print "Checking $channame\n";
+
+
+ foreach $regexp (@channels) {
+ if($channame =~ /$regexp/) {
+ return 1;
+ }
+ }
+ return undef;
+}
+
+
+sub do_ring($) {
+ my $myhash = shift;
+
+ print "Got RING for $myhash->{'channel-name'} - $myhash->{'unique-id'}\n";
+
+ # here we are going to just hang it up since its just a silly example
+ # but for variety lets wait 2 seconds before it dies
+ $fs->sendmsg({'command' => "api sched_hangup +2 $myhash->{'unique-id'}"});
+}
+
+
+sub do_answer($) {
+ my $myhash = shift;
+
+ print "Got ANSWER for $myhash->{'channel-name'}\n";
+
+ # here we are going to just hang it up since its just a silly example
+ $fs->sendmsg({'command' => "api killchan $myhash->{'unique-id'}"});
+}
+
+
+
+sub do_hangup($) {
+ my $myhash = shift;
+
+ print "Got HANGUP for $myhash->{'channel-name'} $myhash->{'unique-id'}\n";
+
+ # hey it was a hangup, lets call someone now!
+ $cmd = "api originate sofia/mydomain.com/123\@192.168.0.6 &playback(/sounds/conf-enter.raw) XML default \"$CIDNAME\" \"$CIDNUM\"";
+ $fs->sendmsg({'command' => $cmd});
+}
+
+
+
+# this connects to the event socket
+sub es_connect() {
+ if(! defined $lastconnect) {
+ $lastconnect = time - $conntime;
+ }
+
+ if($lastconnect <= (time - $conntime)) {
+ $lastconnect = time;
+ print "Connecting to $host:$port\n";
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ $fs->sendmsg({'command' => 'event plain CHANNEL_STATE CHANNEL_ANSWER heartbeat CHANNEL_HANGUP all'});
+ $lastheartbeat = time;
+ }
+ } or do {
+ print "Error connecting - waiting for retry\n";
+ }
+ }
+
+ }
+
+
+sigaction SIGALRM, new POSIX::SigAction sub {
+ if ($lastheartbeat < (time - $timeout)) {
+ print "Did not receive a heartbeat in the specified timeout\n";
+ if (defined $fs) {
+ $fs->disconnect();
+ undef $fs;
+ }
+ es_connect();
+ }
+
+ # reset the alarm
+ alarm $timeout;
+} or die "Error setting SIGALRM handler: $!\n";
+
+
+
+es_connect();
+alarm $timeout;
+
+while (1) {
+ if(defined $fs) {
+ my $reply = $fs->readhash(undef);
+ if ($reply->{socketerror}) {
+ es_connect();
+ }
+
+ if ($reply->{body}) {
+ $myhash = $reply->{event};
+
+ if ($myhash->{'event-name'} eq "HEARTBEAT") { ## Deal with heartbeats
+ $lastheartbeat = time;
+ print "Got a heartbeat\n";
+
+ } elsif (watchedChannel($myhash->{'channel-name'})) {
+ if ($myhash->{'event-name'} eq "CHANNEL_ANSWER") { ## deal with answers
+ do_answer($myhash);
+ } elsif ($myhash->{'event-name'} eq "CHANNEL_STATE" && $myhash->{'channel-state'} eq "CS_ROUTING") {
+ do_ring($myhash);
+ } elsif ($myhash->{'event-name'} eq "CHANNEL_HANGUP") { ## last thing done on a channel
+ do_hangup($myhash);
+ } else { ## Unknown event
+ print Dumper $myhash;
+ # print "$reply->{body}\n"; # print out what was sent, myhash is translated by Client.pm
+ }
+ } # end channel-name filter
+ }
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/trixter/callcredit.pl
Copied: freeswitch/branches/seven/contrib/trixter/callcredit.pl (from rev 14471, freeswitch/trunk/contrib/trixter/callcredit.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/callcredit.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/callcredit.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,190 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+#
+# this script will look for call setup/tear down events and every INTERVAL query the server for credit
+# on the calls in progress, if it gets a message saying to hangup a call it will - implying credit no
+# longer exists
+#
+# this script also informs the webserver of the call setup/tear down info so that it can keep track and
+# later only post a list of UUIDs for the webserver to process.
+#
+# the webserver should return the following
+# HANGUP: 1234-5678-90ab-cdef
+# IGNORE: fedc-ba09-8765-4321
+#
+# to hangup the first or stop getting reports about the 2nd uuid
+#
+# uuids are passed to the webserver in a php style array named uuid so its easy to loop through them and
+# check them for validity
+
+use FreeSWITCH::Client;
+use POSIX ':signal_h'; # used for alarm to ensure we get heartbeats
+use Data::Dumper; # used to print out myhash debug info
+
+# use DBI instead of these two for direct database inserts/deletes
+# which is likely to be more efficient, this is however just an example
+use LWP::UserAgent; # for posting to the webserver
+use URI::Escape ('uri_escape'); # to html encode values
+
+
+# configure these
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+my $timeout = 1; # when setting this make sure its low enough to detect
+ # lost heartbeats and high enough that it doesnt hose your
+ # system, also queryInterval is checked each time this runs
+ # so you should make queryInterval an interger multiple
+my $queryInterval = 3;
+my $heartbeatInterval = 30; # seconds to expect a heartbeat event or reconnect
+my $url = "http://localhost/activecalls.php"; # the url to post the data to use http://user:pass@host/script for auth credentials
+
+
+##
+# dont touch these
+##
+my $fs;
+my $lastheartbeat;
+my $lastQuery;
+my %uuids;
+my $ua = LWP::UserAgent->new;
+$ua->agent("FreeSWITCH/1.0");
+
+
+# this connects to the event socket
+sub es_connect()
+ {
+ print "Connecting to $host:$port\n";
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ # channel_create doesnt have the destination number so we wait for the codec event
+ $fs->sendmsg({'command' => 'event plain heartbeat channel_hangup codec'});
+ $lastheartbeat = time;
+ }
+ } or do {
+ print "Error connecting - waiting for retry\n";
+ }
+
+ }
+
+
+sigaction SIGALRM, new POSIX::SigAction sub {
+ if ($lastheartbeat < (time - $heartbeatInterval)) {
+ print "Did not receive a heartbeat in the specified timeout\n";
+ if (defined $fs) {
+ $fs->disconnect();
+ undef $fs;
+ }
+ es_connect();
+ }
+
+
+ # check the calls
+ $uuidstr = "";
+ $queryTime = time;
+ for my $uuid ( keys %uuids ) {
+ if($uuids{$uuid} > 2 && $uuids{$uuid}<= ($queryTime - $queryInterval)) {
+ $uuidstr .= "&uuid[]=$uuid";
+ $uuids{$uuid}=$queryTime;
+ }
+ }
+
+ if($uuidstr ne "") {
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($uuidstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error checking credit got ".$res->status_line."\n";
+ }
+ @lines = split(/\n/,$res->content);
+
+ foreach $line (@lines) {
+ if($line =~ /^HANGUP: (.*)/) {
+ print "hanging up $1\n";
+ $fs->sendmsg({'command' => "api killchan $1"});
+ } elsif ($line =~ /^IGNORE: (.*)/) {
+ delete $uuids{$1};
+ }
+
+ print "LINE: $line\n\n";
+ }
+
+ # XXX we need to figure out how to hangup calls here
+ }
+
+
+
+ # reset the alarm
+ alarm $timeout;
+} or die "Error setting SIGALRM handler: $!\n";
+
+
+
+es_connect();
+alarm $timeout;
+
+while (1) {
+ if(defined $fs) {
+ my $reply = $fs->readhash(undef);
+ if ($reply->{socketerror}) {
+ es_connect();
+ }
+
+ if ($reply->{body}) {
+ $myhash = $reply->{event};
+
+ if ($myhash->{'event-name'} eq "HEARTBEAT") { ## Deal with heartbeats
+ $lastheartbeat = time;
+ print "Got a heartbeat\n";
+
+ } elsif ($myhash->{'event-name'} eq "CODEC") { ## New call setup
+ if(!$uuids{$myhash->{'unique-id'}}) {
+ print $myhash->{'unique-id'}." has called\n";
+ $uuids{$myhash->{'unique-id'}}=time;
+ $urlstr="";
+ while ( my ($key, $value) = each(%$myhash) ) {
+ $urlstr .= "&$key=".uri_escape($value);
+ }
+
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($urlstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error posting NEWCALL to webserver got ".$res->status_line."\n";
+ }
+ }
+
+
+
+ } elsif ($myhash->{'event-name'} eq "CHANNEL_HANGUP") { ## hangup event
+ print $myhash->{'unique-id'}." has hung up\n";
+ delete $uuids{$myhash->{'unique-id'}}; # we get a codec event after hangup
+
+ $urlstr="";
+ while ( my ($key, $value) = each(%$myhash) ) {
+ $urlstr .= "&$key=".uri_escape($value);
+ }
+
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($urlstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error posting HANGUP to webserver got ".$res->status_line."\n";
+ }
+
+
+ } else { ## Unknown event
+ print "EVENT NAME: " . $myhash->{'event-name'} . "\n";
+ print Dumper $myhash;
+ # print "$reply->{body}\n"; # print out what was sent, myhash is translated by Client.pm
+ }
+
+ }
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/trixter/calls.pl
Copied: freeswitch/branches/seven/contrib/trixter/calls.pl (from rev 14471, freeswitch/trunk/contrib/trixter/calls.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/calls.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/calls.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,156 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+#
+# this script will look for call setup/tear down events and conference join/part events and send them
+# to a webserver which can then update a database so you have realtime counts and all of active channels
+# across multiple switches. It also allows you to know who is in without making many XML-RPC calls so you
+# can use XML-RPC to hang up the calls or whatever
+#
+
+use FreeSWITCH::Client;
+use POSIX ':signal_h'; # used for alarm to ensure we get heartbeats
+use Data::Dumper; # used to print out myhash debug info
+
+# use DBI instead of these two for direct database inserts/deletes
+# which is likely to be more efficient, this is however just an example
+use LWP::UserAgent; # for posting to the webserver
+use URI::Escape ('uri_escape'); # to html encode values
+
+
+# configure these
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+my $timeout = 30; # seconds to expect a heartbeat event or reconnect
+my $url = "http://localhost/activecalls.php"; # the url to post the data to use http://user:pass@host/script for auth credentials
+
+
+##
+# dont touch these
+##
+my $fs;
+my $lastheartbeat;
+my @uuids;
+my $ua = LWP::UserAgent->new;
+$ua->agent("FreeSWITCH/1.0");
+
+
+# this connects to the event socket
+sub es_connect()
+ {
+ print "Connecting to $host:$port\n";
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ # channel_create doesnt have the destination number so we wait for the codec event
+ $fs->sendmsg({'command' => 'event plain heartbeat channel_hangup codec CUSTOM conference::maintenence'});
+ $lastheartbeat = time;
+ }
+ } or do {
+ print "Error connecting - waiting for retry\n";
+ }
+
+ }
+
+
+sigaction SIGALRM, new POSIX::SigAction sub {
+ if ($lastheartbeat < (time - $timeout)) {
+ print "Did not receive a heartbeat in the specified timeout\n";
+ if (defined $fs) {
+ $fs->disconnect();
+ undef $fs;
+ }
+ es_connect();
+ }
+
+ # reset the alarm
+ alarm $timeout;
+} or die "Error setting SIGALRM handler: $!\n";
+
+
+
+es_connect();
+alarm $timeout;
+
+while (1) {
+ if(defined $fs) {
+ my $reply = $fs->readhash(undef);
+ if ($reply->{socketerror}) {
+ es_connect();
+ }
+
+ if ($reply->{body}) {
+ $myhash = $reply->{event};
+
+ if ($myhash->{'event-name'} eq "HEARTBEAT") { ## Deal with heartbeats
+ $lastheartbeat = time;
+ print "Got a heartbeat\n";
+
+ } elsif ($myhash->{'event-name'} eq "CODEC") { ## New call setup
+ if(!$uuids->{$myhash->{'unique-id'}}) {
+ print $myhash->{'unique-id'}." has called\n";
+ $uuids->{$myhash->{'unique-id'}}=1;
+ $urlstr="";
+ while ( my ($key, $value) = each(%$myhash) ) {
+ $urlstr .= "&$key=".uri_escape($value);
+ }
+
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($urlstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error posting NEWCALL to webserver got ".$res->status_line."\n";
+ }
+ }
+ elsif($uuids->{$myhash->{'unique-id'}}==2) {
+ delete $uuids->{$myhash->{'unique-id'}}; # we get a codec event after hangup
+ }
+
+
+
+ } elsif ($myhash->{'event-name'} eq "CHANNEL_HANGUP") { ## hangup event
+ print $myhash->{'unique-id'}." has hung up\n";
+ $uuids->{$myhash->{'unique-id'}}=2; # we do this so that the final codec event can delete it
+ $urlstr="";
+ while ( my ($key, $value) = each(%$myhash) ) {
+ $urlstr .= "&$key=".uri_escape($value);
+ }
+
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($urlstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error posting HANGUP to webserver got ".$res->status_line."\n";
+ }
+
+
+ } elsif ($myhash->{'event-subclass'} eq "conference::maintenence") { ## deal with Conference stuff
+ if(($myhash->{'action'} eq 'add-member') || ($myhash->{'action'} eq 'del-member')) { ## join/part
+ print $myhash->{'unique-id'} ." ". $myhash->{'action'}." in conference " . $myhash->{'conference-name'}."\n";
+ $urlstr="";
+ while ( my ($key, $value) = each(%$myhash) ) {
+ $urlstr .= "&$key=".uri_escape($value);
+ }
+
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content_type('application/x-www-form-urlencoded');
+ $req->content($urlstr);
+ my $res = $ua->request($req);
+ if(!$res->is_success) {
+ print "Error posting ".$myhash->{'action'}." to webserver got ".$res->status_line."\n";
+ }
+
+ }
+ } else { ## Unknown event
+ print "EVENT NAME: " . $myhash->{'event-name'} . "\n";
+ print Dumper $myhash;
+ # print "$reply->{body}\n"; # print out what was sent, myhash is translated by Client.pm
+ }
+
+ }
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/trixter/conf-dtmf.pl
Copied: freeswitch/branches/seven/contrib/trixter/conf-dtmf.pl (from rev 14471, freeswitch/trunk/contrib/trixter/conf-dtmf.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/conf-dtmf.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/conf-dtmf.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+use FreeSWITCH::Client;
+use POSIX ':signal_h'; # used for alarm to ensure we get heartbeats
+use Data::Dumper; # used to print out myhash debug info
+
+
+# configure these
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+my $timeout = 30; # seconds to expect a heartbeat event or reconnect
+
+# hash for music, default must be defined, if you define other entities then the conference name will be used to match against that
+my %soundfile = (
+ 'default' => '/sounds/fpm-calm-river.wav',
+ '123' => '/sounds/welcome.raw',
+ );
+
+
+
+##
+# dont touch these
+##
+my $fs;
+my $lastheartbeat;
+
+
+# this connects to the event socket
+sub es_connect()
+ {
+ print "Connecting to $host:$port\n";
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ $fs->sendmsg({'command' => 'event plain heartbeat CUSTOM conference::maintenence'});
+ $lastheartbeat = time;
+ }
+ } or do {
+ print "Error connecting - waiting for retry\n";
+ }
+
+ }
+
+
+sigaction SIGALRM, new POSIX::SigAction sub {
+ if ($lastheartbeat < (time - $timeout)) {
+ print "Did not receive a heartbeat in the specified timeout\n";
+ if (defined $fs) {
+ $fs->disconnect();
+ undef $fs;
+ }
+ es_connect();
+ }
+
+ # reset the alarm
+ alarm $timeout;
+} or die "Error setting SIGALRM handler: $!\n";
+
+
+
+es_connect();
+alarm $timeout;
+
+while (1) {
+ if(defined $fs) {
+ my $reply = $fs->readhash(undef);
+ if ($reply->{socketerror}) {
+ es_connect();
+ }
+
+ if ($reply->{body}) {
+ $myhash = $reply->{event};
+
+ if ($myhash->{'event-name'} eq "HEARTBEAT") { ## Deal with heartbeats
+ $lastheartbeat = time;
+ print "Got a heartbeat\n";
+
+ } elsif ($myhash->{'event-subclass'} eq "conference::maintenence") { ## deal with Conference stuff
+
+ if($myhash->{'action'} eq 'dtmf') { ## DTMF event
+ print "conf: $myhash->{'conference-name'}\tmember: $myhash->{'member-id'}\tDTMF: $myhash->{'dtmf-key'}\n";
+ if(defined $soundfile{$myhash->{'conference-name'}}) {
+ $fs->sendmsg({'command' => "api conference $myhash->{'conference-name'} play $soundfile{$myhash->{'conference-name'}}"});
+ } else {
+ $fs->sendmsg({'command' => "api conference $myhash->{'conference-name'} play $soundfile{'default'}"});
+ }
+
+ } else { ## Just print out all other events
+ print "conf: $myhash->{'conference-name'}\tmemid: $myhash->{'member-id'}\taction: $myhash->{'action'}\tCLID: $myhash->{'caller-caller-id-number'}\n";
+ }
+ } else { ## Unknown event
+ print Dumper $myhash;
+ # print "$reply->{body}\n"; # print out what was sent, myhash is translated by Client.pm
+ }
+
+ }
+ }
+}
+
Copied: freeswitch/branches/seven/contrib/trixter/dialplan (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan)
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/README
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/README (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,209 @@
+This dialplan was originally based on work by intralanman however I refactored
+what he did so that it was more configurable. Now instead of requiring multiple
+different dialplans you have one and channel variables which lets you set
+a per user dial mapping very easily.
+
+I originally started working on this for http://fswebpanel.sf.net a web based
+configuration tool I am working on for FreeSWITCH. Currently fswebpanel supports
+this dialplan, and you can create users that set the variables. This makes
+it much easier to deal with.
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+SCOPE AND PURPOSE
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+This directory is designed to provide drop in replacement dialing plans that
+simulate what the PSTN normally provides. It is not intended to provide a
+black list of numbers, what may be high cost, etc. With that said, if you
+want to add variables that would define these things I suggest that you add
+them at the end of the file instead of mixed throughout. This makes it
+easier if someone wants a clean dialplan vs someone who wants to implement
+advanced features.
+
+The reason to make a dialplan that matches what the traditional phone company
+does is simply so that users feel more comfortable using the phone system.
+It is bothersome, to me at least, to have to learn a whole new way to place
+calls, especially when it is trivial to map what I dial as a user to what
+some foreign system expects.
+
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+EXPLANATION OF DIALPLAN
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+There are multiple files and it can become a little confusing, so I will attempt
+to explain how to use this information should you decide to. My hope is that it
+will eventually be part of the default config, until then you must manually
+configure this.
+
+localized.dialplan.xml is a DIALPLAN file. You must edit your dialplan,
+typically in INSTALL/conf/dialplan/default.xml where INSTALL is your
+install directory (eg /usr/local/freeswitch on unix like systems).
+
+If you want this to be used *with* your default context you must remove
+the lines
+
+
+<context name="default">
+</context>
+
+and place the remainder in the default context tags.
+
+
+They have their own context tags so that they may be used seperately
+should you opt to do that.
+
+
+
+
+
+-=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=-
+
+dont just leave regexps undefined that may cause matches to occur that
+shouldnt. Instead use the regexp DONT_MATCH_ME or something similar that will
+never cause a match. dialplan.es.xml uses this if you need an example
+
+-=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=- IMPORTANT -=-
+
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+EXPLANATION OF THE VARIABLE FILES
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+There are several variable files, one for a given region that has been done
+so far. These variables are used by the dialplan to figure out how to
+deal with a call. An attempt is made to query enum, if that fails
+then it will use the default gateway that is defined.
+
+You may set these variables globally by setting it for the domain, or you
+may set them on a per user basis from the user directory. Or a mix, user vars
+override the domain. The option is yours.
+
+There are two types of variables, static which are simply strings,
+and regexps. Due to the way variables are used you should not
+attempt to use a regexp unless it is indicated that it is a regexp.
+
+<!--
+TYPE: static
+anything that gets sent before the E.164 formatted number to the provider
+If you dont need anything leave it blank
+-->
+<variable name="dial_prefix" value=""/>
+
+<!--
+TYPE: static
+Whether or not to use enum
+-->
+<variable name="use_enum" value="true"/>
+
+<!--
+TYPE: static
+The name for the gateway to send calls to if ENUM fails
+This name would be defined in your sip profile.
+-->
+<variable name="default_gateway" value="telco.com"/>
+
+
+
+<!--
+TYPE: static
+This is the country code, it should be numeric only and static
+-->
+<variable name="default_country_code" value="31"/>
+
+
+
+<!--
+TYPE: static
+This is the international prefix. This is static data
+-->
+<variable name="default_international_prefix" value="00"/>
+
+<!--T
+TYPE: regexp
+this matches international dialing. In this example I dial
+00 country code & number for international calls. This matches
+everything except the 00 so that an ENUM lookup can be performed
+-->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+
+<!--
+TYPE: regexp
+This matches when I dial out of my 'area'. For example if I am in Cork,
+Ireland, and I want to call a mobile phone I dial 08... The leading '0'
+indicates that I am calling outside my local area (Cork is '20') to '8'.
+We need to strip off the '0' since it is just a dialing prefix and not
+part of the number itself
+-->
+<variable name="default_domestic_regexp" value="^0([1-9]\d+)$"/>
+
+
+
+<!--
+TYPE: static
+This is the local prefix. For example, in Ireland
+if I am in Cork my 'city code' is 20. If I dial
+a local number I do not have to dial the '20'. This is
+used for enum to work on a 'local' call.
+-->
+<variable name="default_local_prefix" value="20"/>
+
+
+
+<!--
+TYPE: regexp
+This is what would match if I am in Cork and call someone else
+who is in Cork. The default_local_prefix variable is used to
+make a full ENUM number.
+-->
+<variable name="default_local_regexp" value="^([1-9]\d+)$"/>
+
+
+
+<!--
+TYPE: regexp
+This is what matches to route a call to emergency services.
+It may optionally be used for more services than that, it is just
+directly routed without enum. For Europe generally 112 will work, for
+North America 911 will work. This can be a regexp which will allow for
+routing of say 611 (repair), 411 (information), 911 (emergency) in
+NANPA.
+-->
+<variable name="default_emergency_number" value="^112$"/>
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+HOW TO MAKE A DIALPLAN
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+This is quite simple, just copy one of the existing dialplan.XX.xml files
+to dialplan.YY.xml where YY is the 2 letter country code for the area you
+are going to do. For Europe the NL one will likely be correct for all but
+the country code.
+
+The reason to use the 2 letter ISO country code (IE - Ireland, UK - United Kingdom
+ES - Spain, etc) is so that everything is standardized and generally a fixed length.
+One exception I am aware of is NANPA which is 18 or so countries (all country code '1')
+Since there are multiple countries the numbering authority is used instead.
+
+Please keep all filenames in lowercase. This helps with sorted lists, since
+an ASCII sort would split entries that have different cases when they should
+otherwise be next to each other.
+
+Now that you have a new file, simply edit the values and you are done. If you share
+this information then others may more easily have a dialing plan that works the way
+they expect it to.
+
+DONT FORGET TO ADD YOUR NAME IN COMMENTS AT THE TOP OF THE FILE. I cannot
+possibly know every dialing plan that exists, and for now since I am maintaining
+this, someone may have a question about something that I wont be able to answer.
+It would be best if they could get hold of you directly to resolve any issues
+that may arise.
+
+Email the file to trixternospam@0xdecafbad.com and I will add it here. Eventually
+there will be a place with fswebpanel to provide this information, and its possible
+that this may be merged into FS trunk, when either of those happen I will close this
+area down and request that they be filed directly where they can be used by more
+people more easily.
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.be.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.be.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.be.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.be.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.be.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+<!-- belgium -->
+<!-- include this in the USER DIRECTORY variables section -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="telco.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="32"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix -->
+<variable name="default_local_prefix" value="20"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^0([1-9]\d{8})$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^([1-9]\d(5,6})$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^112$"/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.de.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.de.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.de.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.de.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.de.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+<!-- germany -->
+<!-- include this in the USER DIRECTORY variables section -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="telco.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="49"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix -->
+<variable name="default_local_prefix" value="20"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^0([1-9]\d{4,13})$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^([1-9]\d(2,11})$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^112$"/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.es.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.es.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.es.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.es.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.es.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,40 @@
+<!-- include this in the USER DIRECTORY variables section -->
+<!-- SPAIN -->
+
+
+<!-- Created by David Villasmil, davidcsi@hotmail.com -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="asterlink.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="34"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix/area code -->
+<variable name="default_local_prefix" value="^[89]\d+$"/>
+
+<!-- variable for cell prefix/area code -- UNUSED CURRENTLY -->
+<variable name="default_cell_prefix" value="^6\d+$"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<!-- Doesn't apply to Spain, all calls are local calls, meaning all numbers begin with 9/8 -->
+<variable name="default_domestic_regexp" value="^DONT_MATCH_ME$"/>
+
+<!-- What matches a local same area call -->
+<!-- Doesn't apply to Spain, all calls are local calls, meaning all numbers begin with 9 -->
+<variable name="default_local_regexp" value="^DONT_MATCH_ME$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^091$/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ie.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ie.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.ie.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ie.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ie.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+<!-- ireland -->
+<!-- include this in the USER DIRECTORY variables section -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="telco.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="353"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix -->
+<variable name="default_local_prefix" value="20"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^0([1-9]\d{5,9})$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^([1-9]\d(4,8})$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^112$"/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nanpa.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nanpa.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.nanpa.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nanpa.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nanpa.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+<!-- include this in the USER DIRECTORY variables section -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="asterlink.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="1"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="011"/>
+
+<!-- variable for local prefix/area code -->
+<variable name="default_local_prefix" value="800"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^011(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^1?([2-9]\d{2}[2-9]\d{6})$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^([2-9]\d{6})$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<!-- http://www.nanpa.com/number_resource_info/n11_codes.html -->
+<variable name="default_emergency_number" value="^[2-9]11$"/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nl.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nl.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.nl.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nl.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.nl.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+<!-- include this in the USER DIRECTORY variables section -->
+
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="telco.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="31"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix -->
+<variable name="default_local_prefix" value="20"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^0([1-9]\d{8})$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^([1-9]\d(6,7})$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^112$"/>
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ve.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ve.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/dialplan.ve.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ve.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/dialplan.ve.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+<!-- include this in the USER DIRECTORY variables section -->
+<!-- VENEZUELA -->
+
+<!-- Created by David Villasmil, davidcsi@hotmail.com -->
+<!-- anything we need to send to the provider before we send the number -->
+<variable name="dial_prefix" value=""/>
+
+<!-- do we use enum? -->
+<variable name="use_enum" value="true"/>
+
+<!-- this is the default gateway to send calls to if enum fails -->
+<variable name="default_gateway" value="asterlink.com"/>
+
+<!-- the country code, only numeric -->
+<variable name="default_country_code" value="58"/>
+
+<!-- variable for international dialing -->
+<variable name="default_international_prefix" value="00"/>
+
+<!-- variable for local prefix/area code -->
+<variable name="default_local_prefix" value="^[2-9]\d+$"/>
+
+<!-- variable for cell prefix/area code UNUSED CURRENTLY -->
+<variable name="default_cell_prefix" value="041\d+"/>
+
+<!-- What matches international dialing -->
+<variable name="default_international_regexp" value="^00(\d+)$"/>
+
+<!-- What matches a domestic out of area call -->
+<variable name="default_domestic_regexp" value="^02\d+$"/>
+
+<!-- What matches a local same area call -->
+<variable name="default_local_regexp" value="^[2-9]\d+$"/>
+
+<!-- What is dialed for direct routed stuff like emergency numbers -->
+<variable name="default_emergency_number" value="^091$/>
+
+
Deleted: freeswitch/branches/seven/contrib/trixter/dialplan/localized.dialplan.xml
Copied: freeswitch/branches/seven/contrib/trixter/dialplan/localized.dialplan.xml (from rev 14471, freeswitch/trunk/contrib/trixter/dialplan/localized.dialplan.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/dialplan/localized.dialplan.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/dialplan/localized.dialplan.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,65 @@
+<context name="default">
+ <extension name="localized-dialplan">
+ <!-- make sure that stuff is set or abort -->
+ <condition field="${default_emergency_number}" expression="^$" break="on-true"/>
+ <condition field="${default_international_regexp}" expression="^$" break="on-true"/>
+ <condition field="${default_domestic_regexp}" expression="^$" break="on-true"/>
+ <condition field="${default_local_regexp}" expression="^$" break="on-true"/>
+
+ <!--
+ Emergency service - verify your provider really supports this
+ -->
+ <condition field="${destination_number}" expression="${default_emergency_number}" continue="true" break="never">
+ <action application="set" data="hangup_after_bridge=true"/>
+ <action application="export" data="nolocal:jitterbuffer_msec=180"/>
+ <action application="bridge" data="sofia/gateway/${default_gateway}/$1"/>
+ </condition>
+ <!--
+ For international
+ -->
+ <condition field="${destination_number}" expression="${default_international_regexp}" continue="true" break="never">
+ <action application="set" data="e164number=$1"/>
+ </condition>
+ <!--
+ For in country but out of area
+ -->
+ <condition field="${destination_number}" expression="${default_domestic_regexp}" continue="true" break="never">
+ <action application="set" data="e164number=${default_country_code}$1"/>
+ </condition>
+ <!--
+ For same city calls
+ -->
+ <condition field="${destination_number}" expression="${default_local_regexp}" continue="true" break="never">
+ <action application="set" data="e164number=${default_country_code}${default_local_prefix}$1"/>
+ </condition>
+
+
+ <!--
+ this is a kluge to get around a limitation in the dialplan logic
+ variables are expanded in the condition tags *before* any applications are processed
+ as a result we cant set a variable in the dialplan that is used as a condition
+ so we cheat here
+ -->
+ <condition field="${destination_number}" expression="${default_international_regexp}|${default_domestic_regexp}|${default_local_regexp}" continue="true" break="false"/>
+
+ <!--
+ Dial the call
+ -->
+ <condition>
+ <action application="export" data="nolocal:jitterbuffer_msec=180"/>
+ <action application="set" data="continue_on_fail=true"/>
+ <action application="set" data="hangup_after_bridge=true"/>
+ <action application="set" data="call_timeout=45"/>
+ <action application="set" data="hangup_after_bridge=true"/>
+ <action application="set" data="continue_on_fail=true"/>
+ </condition>
+ <condition field="${use_enum}" expression="^yes$" continue="true" break="never">
+ <action application="enum" data="${e164number}"/>
+ <action application="bridge" data="${enum_auto_route}"/>
+ </condition>
+ <condition>
+ <action application="bridge" data="sofia/gateway/${dial_prefix}${default_gateway}/${e164number}"/>
+ </condition>
+ </extension>
+
+</context>
Deleted: freeswitch/branches/seven/contrib/trixter/disa.js
Copied: freeswitch/branches/seven/contrib/trixter/disa.js (from rev 14471, freeswitch/trunk/contrib/trixter/disa.js) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/disa.js (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/disa.js 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,214 @@
+// -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+// DISA (Direct Inward System Access) script
+// basically it provides a dialtone for callers, who can then call out
+// on presumably a cheaper rate plan, in addition providing a unified
+// caller id presence for return calls
+//
+// Written by Bret McDanel <trixter AT 0xdecafbad.com>
+//
+// Additions/Updates by
+//
+//
+// This file is licensed under the Trixter General License (TGL) v 1.0
+// You may use this program however you want, so long as you follow the
+// below terms:
+// 1. You may not make this program GNU Public Licensed (GPL)
+// 2. Copyright notices must remain intact
+// 3. You acknowledge this program is useful for nothing, and that if you
+// do use it in any way any authors, contributing or original are not
+// held liable for any losses or damage that results from using it
+// 4. Terms 1 and 2 may not be altered and must be distributed in future copies
+// 5. At your option you may remove condition 3 providing that you assume responsibility
+// from that point on
+
+
+// START OF CONFIGURATION SECTION
+
+var pinmax = 10; // maximum length of a pin - 0 disables pins
+var pinwait = 5000; // ms to wait for pin entry
+var pinterm = "#"; // terminator char for pin entry - cant be part of the pin number
+var pinmaxtry = 3; // maximum number of times to ask for a pin before giving up
+
+var nummaxlen = 11; // maximum length of a dialed numner
+var numterm = "#"; // terminator for destination number
+var numwait = 5000; // ms for them to enter the destination number
+
+/* these are used only if we bridge and not transfer */
+var newSession = false; // set to true to make a new session and bridge
+ // set to false to use 'transfer' instead
+var dialprefix = "sofia/default/"; // prefix for outbound calls
+var dialpostfix = "@somehost.tld"; // postfix for outbound calls, set to "" if not needed
+var timeout = 60; // outbound calling timeout in seconds
+
+
+var CLID_name = "The Omega Corporation"; // will use inbound caller's info if commented
+ // if you dont know who this is, watch more
+ // monty python
+var CLID_num = "18005551212"; // will use inbound caller's info if commented
+
+// Sound files that are required - if they are commented they will be skipped
+var snd_prefix = "/sounds/"; // sound directory prefix - end in /
+var snd_getpin = "get-pin.raw"; // prompt asking for their pin number
+ // cannot be commented - disable by seeing pinmax=0
+var snd_blacklisted = "blacklisted.raw"; // inform them to go away
+var snd_pinfail = "bad-pin.raw"; // sound file to play when they enter a bad pin
+var snd_pinbye = "goodbye.raw"; // when they exhausted pin attempts and didnt auth
+var snd_getdest = "enternum.raw"; // "enter the telephone number you wish to call"
+
+
+// this is the regexps of caller id information that is blacklisted
+// dont forget that Javascript/ECMAScript requires you to escape \ so use \\
+// in regexps
+blacklisted = new Array (new RegExp("^1900\\d{7}$"), // US/CA premium numbers
+ new RegExp("^1710\\d{7}$") // US Government DARPA network
+ );
+
+
+// this is the regexps of automatically authenticated callers
+whitelisted = new Array (new RegExp("^1337$") // they are elite!
+ );
+
+// Array of PINs for access, in this case an account number would amount to a
+// 'secondary pin' although most likely more well known. This information could
+// be obtained from a DB or HTTP resource instead, but in a simple example that is
+// overkill - fetchURLHash for example returns an array so it makes it easy to replace
+pins = new Array ("1234", // Alice
+ "5678" // Bob
+ );
+
+
+
+
+// END OF CONFIGURATION SECTION
+
+
+
+// This function matches session.caller_id_num against an array of RegExps that is passed
+// and returns a boolean determining if there was a match, useful for whitelist/blacklisting
+function CIDMatch(regexps)
+{
+ if(typeof regexps != "undefined") {
+ for (var i=0; i<regexps.length; i++) {
+ if(arrMatch = regexps[i].exec(session.caller_id_number)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+
+// this function strips a listed character out of a string
+function removeChr(str,chr)
+{
+ var newStr = "";
+
+ for(var i=0;i<str.length;i++) {
+ if(str.substr(i,1) != chr) { newStr += str.substr(i,1); }
+ }
+
+ return newStr;
+}
+
+
+// this is the dtmf callback function - in a nice generic way
+function main_cb(type,digits,args)
+{
+ if(type == "dtmf") {
+ if(digits!='false') { return digits; }
+ return false; // stop playback if any
+ }
+ return true; // we can be here if we got an event perhaps text chat
+}
+
+
+
+
+
+// MAIN PROGRAM ENTRY POINT
+
+if(CIDMatch(blacklisted)) {
+ if(typeof snd_blacklisted != "undefined") {
+ session.streamFile(snd_prefix+snd_blacklsited);
+ }
+ console_log(session.caller_id_num + " is blacklisted\n");
+ exit();
+}
+
+session.answer();
+
+if(!CIDMatch(whitelisted)) {
+ // Get a pin number
+ if(pinmax > 0) {
+ var isAuthed=false;
+ for(var curpintry=0; isAuthed == false && curpintry < pinmaxtry; curpintry++) {
+ session.flushDigits(); // clear out input buffers
+ if((pin=session.streamFile(snd_prefix+snd_getpin,main_cb,""))==false) {
+ pin=session.getDigits(pinmax,pinterm,pinwait);
+ } else {
+ pin+=session.getDigits(pinmax-1,pinterm,pinwait);
+ }
+
+ pin = removeChr(pin,pinterm); // make sure the didnt enter it during the prompt
+
+ if(pin != "" && pin != "false") {
+ for (var i=0;i<pins.length && isAuthed==false;i++) {
+ if(pins[i] == pin) {
+ console_log("checking pin against " + pins[i] + "\n");
+ isAuthed=true;
+ }
+ }
+ }
+
+ if(isAuthed == false) {
+ if(typeof snd_pinfail != "undefined") {
+ session.streamFile(snd_prefix+snd_pinfail);
+ }
+ }
+
+ }
+
+ if(isAuthed == false) {
+ if(typeof snd_pinbye != "undefined") {
+ session.streamFile(snd_prefix+snd_pinbye);
+ }
+ console_log(session.caller_id_num + " failed to authenticate\n");
+ exit();
+ }
+ }
+}
+
+
+// there should probably be better error checking here
+// if the number doesnt work ask to get a new one
+// if the rmeote party hangs up possibly allow the caller to call someone else
+// but I got bored with this and decided it was good enough for now
+
+// Get destination number
+session.flushDigits();
+if((destnum=session.streamFile(snd_prefix+snd_getdest,main_cb,""))==false) {
+ destnum=session.getDigits(nummaxlen,numterm,numwait);
+} else {
+ destnum+=session.getDigits(nummaxlen-1,numterm,numwait);
+}
+destnum = removeChr(destnum,numterm);
+
+if(destnum.length>0) {
+ if(newSession == false) {
+ session.execute("transfer",destnum);
+ } else {
+ var Bleg = new Session();
+
+ if(typeof CLID_name != "undefined") {
+ Bleg.setCallerData("caller_id_name",CLID_name);
+ }
+ if(typeof CLID_num != "undefined") {
+ Bleg.setCallerData("caller_id_number",CLID_num);
+ }
+
+ Bleg.originate(session,dialprefix+destnum+dialpostfix,timeout);
+ bridge(session,Bleg);
+ }
+}
+
+exit();
Deleted: freeswitch/branches/seven/contrib/trixter/faxlib.jm
Copied: freeswitch/branches/seven/contrib/trixter/faxlib.jm (from rev 14471, freeswitch/trunk/contrib/trixter/faxlib.jm) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/faxlib.jm (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/faxlib.jm 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,142 @@
+// -*- mode:c; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+/*
+ *
+ * THIS IS DEPRECATED NOW - THERE IS A FUNCTION IN DPTOOLS THAT LETS YOU DO MOST
+ * OF THIS WITHOUT USING THIS SCRIPT. DIRECT TRANSFER ON FAX CNG DETECT
+ * THIS IS HERE FOR REFERENCE AND HOW YOU MIGHT EMAIL A PDF OF A FAX
+ *
+ */
+
+/*
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH[tm] Spidermonkey Fax Manipulation Library
+ *
+ * The Initial Developer of the Original Code is
+ *
+ * Bret McDanel <bret AT 0xdecafbad dot com>
+ *
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ *
+ * faxlib.jm
+ *
+ * This is a library to do fax manipulation from within Javascript in FreeSWITCH[tm]
+ * The goal of this library is to make it easier to send and receive faxes
+ *
+ *
+ * REQUIREMENTS:
+ *
+ * - A working install of socket2me from the FreeSWITCH[tm] src
+ * - tiff2pdf from libtiff tools, in your PATH [optional]
+ */
+
+
+function fax(session,socketaddr,faxFilePrefix,faxFile) {
+ this.socketaddr=socketaddr;
+ this.session=session;
+ this.faxDetect=false;
+ this.faxFilePrefix="/tmp";
+ this.faxFile=session.uuid+".tiff";
+ this.gotFax=false;
+
+ if(typeof faxFilePrefix != 'undefined') {
+ this.faxFilePrefix = faxFilePrefix;
+ }
+
+ if(typeof faxFile != 'undefined') {
+ this.faxFile = faxFile;
+ }
+
+
+
+ // disable fax cng detection
+ this.stopFaxDetect = function () {
+ if(this.faxDetect == true) {
+ this.session.execute("stop_fax_detect","");
+ this.faxDetect=false;
+ }
+ }
+
+
+ // enable fax cng detection
+ this.startFaxDetect = function () {
+ if(this.faxDetect == false) {
+ this.session.execute("fax_detect","");
+ this.faxDetect=true;
+ }
+ }
+
+
+ this.getFaxFile = function () {
+ return this.faxFilePrefix + "/" + this.faxFile;
+ }
+
+
+ // receive a fax
+ this.rxFax = function() {
+ if(typeof this.socketaddr != 'undefined') {
+ this.stopFaxDetect();
+ this.session.execute("set","fax_mode=recv"); // not needed at this time, future proofing
+ this.session.execute("set","fax_file_name=" + this.getFaxFile());
+ this.session.execute("socket",this.socketAddr);
+ fd = new File(this.getFaxFile());
+ if(fd.exists) {
+ this.gotFax=true;
+ }
+ } else {
+ console_log("SocketAddr is not set, unable to receive a fax\n");
+ }
+ }
+
+
+
+ // send a fax
+ this.txFax = function() {
+ if(typeof this.socketaddr != 'undefined') {
+ this.session.execute("set","fax_mode=send");
+ this.session.execute("set","fax_file_name=" + this.getFaxFile());
+ this.session.execute("socket",this.socketAddr);
+ } else {
+ console_log("SocketAddr is not set, unable to transmit a fax\n");
+ }
+ }
+
+
+ this.fax2pdf = function() {
+ fd = new File(this.getFaxFile());
+ if(fd.exists) {
+ outfile = this.faxFile.replace(/tiff$/i,"pdf");
+
+ if(outfile == this.faxFile) {
+ outfile = this.faxFile + ".pdf";
+ }
+ system("tiff2pdf -z -p letter -t 'FreeSWITCH FAX' -s 'Fax from " + this.session.caller_id_num + "' " +
+ "-c FreeSWITCH -a FreeSWITCH -f -o " + this.faxFilePrefix + "/" + outfile + " " +
+ this.getFaxFile());
+ var pdf = new File(this.faxFilePrefix + "/" + outfile);
+ if(pdf.exists) {
+ fd.remove(); // remove the tiff file
+ this.faxFile = outfile;
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+
+}
Deleted: freeswitch/branches/seven/contrib/trixter/gcccpuopt
Copied: freeswitch/branches/seven/contrib/trixter/gcccpuopt (from rev 14471, freeswitch/trunk/contrib/trixter/gcccpuopt) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/gcccpuopt (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/gcccpuopt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,257 @@
+#!/bin/sh
+
+# Print the gcc cpu specific options appropriate for the current CPU
+
+# Author:
+# http://www.pixelbeat.org/
+# Notes:
+# This script currently supports Linux,FreeBSD
+# This script is x86 (32 bit) specific
+# It should work on any gcc >= 2.95 at least
+# It only returns CPU specific options. You probably also want -03 etc.
+# Changes:
+# V0.1, 12 Mar 2003, Initial release
+# V0.2, 01 Jun 2005, Added support for 3.2>=gcc<=4.0
+# V0.3, 03 Jun 2005, Added support for pentium-m
+# V0.4, 03 Jun 2005, Fix silly bugs
+# V0.5, 07 Jun 2005, Clarify/Simplify confusing floating point expr usage
+# Print warning when CPU only supported on a newer gcc
+# V0.6, 15 Dec 2006, Added support for Intel Core and Core 2 processors
+# Added support for 4.1>=gcc<=4.3
+# Added support for gcc -msse3 option
+# Added support for new gcc -march=native option
+# V0.7, 18 Dec 2006, Changes from Conor McDermottroe
+# Added support for FreeBSD
+# Remove bash specific constructs
+# Better error handling
+# V0.8, 19 Dec 2006, Give warnings and 32 bit -march on 64 bit platforms.
+# Previously it just gave an invalid blank -march.
+# Reported and tested by Ewan Oughton.
+# V0.9, 30 Apr 2007, Give error if compiler not present.
+# Warn about rather than default to -march=native option.
+
+if [ "$1" = "--version" ]; then
+ echo "0.9" && exit
+fi
+
+# This table shows when -march options were introduced into _official_ gcc releases.
+# Note there are vendor deviations that complicate this.
+# For e.g. redhat introduced the prescott option in 3.3-13.
+# gcc-2.95 = i386, i486, i586,pentium, i686,pentiumpro, k6
+# gcc-3.0 += athlon
+# gcc-3.1 += pentium-mmx, pentium2, pentium3, pentium4, k6-2, k6-3, athlon-{tbird, 4,xp,mp}
+# gcc-3.3 += winchip-c6, winchip2, c3
+# gcc-3.4.0 += k8,opteron,athlon64,athlon-fx, c3-2
+# gcc-3.4.1 += pentium-m, pentium3m, pentium4m, prescott, nocona
+# gcc-4.3 += core2
+
+[ -z "$CC" ] && CC=gcc
+
+try_gcc_options() {
+ $CC $* -S -o /dev/null -xc /dev/null >/dev/null 2>&1
+}
+
+if ! try_gcc_options; then
+ echo "Error: Couldn't execute your compiler ($CC)" >&2
+ exit 1
+fi
+
+if try_gcc_options -march=native; then
+ echo "Warning: Your compiler supports the -march=native option which you may prefer" >&2
+fi
+
+if ! try_gcc_options -march=i386; then
+ if ! try_gcc_options -m32 -march=i386; then
+ echo "Error: This script only supports 32 bit x86 architectures" >&2
+ exit 1
+ else
+ echo "Warning: The optimum *32 bit* architecture is reported" >&2
+ m32="-m32 "
+ fi
+fi
+
+try_line() {
+ skip=0
+ for arch in $1; do
+ if try_gcc_options $m32 -march=$arch; then
+ echo $arch
+ return
+ elif [ "$skip" = "0" ] && [ "$arch" != "native" ]; then
+ skip=1
+ echo "Warning: Newer versions of GCC better support your CPU with -march=$arch" >&2
+ fi
+ done
+ return 1
+}
+
+read_cpu_data_linux() {
+ IFS=":"
+ while read name value; do
+ unset IFS
+ name=`echo $name`
+ value=`echo $value`
+ IFS=":"
+ if [ "$name" = "vendor_id" ]; then
+ vendor_id="$value"
+ elif [ "$name" = "cpu family" ]; then
+ cpu_family="$value"
+ elif [ "$name" = "model" ]; then
+ cpu_model="$value"
+ elif [ "$name" = "flags" ]; then
+ flags="$value"
+ break #flags last so break early
+ fi
+ done < /proc/cpuinfo
+ unset IFS
+}
+
+read_cpu_data_freebsd() {
+ local _line
+
+ if [ ! -x /usr/local/bin/cpuid ]; then
+ echo "Please install misc/cpuid and run again"
+ exit 1;
+ fi
+ if [ ! -r /var/run/dmesg.boot ]; then
+ echo "/var/run/dmesg.boot does not exist!"
+ exit 1;
+ fi
+
+ # Get the vendor_id, cpu_family and cpu_model from cpuid
+ IFS="
+"
+ for _line in `/usr/local/bin/cpuid`; do
+ if [ -n "`echo $_line | grep '^Vendor ID: '`" ]; then
+ vendor_id="`echo $_line | cut -d'"' -f2`"
+ fi
+ if [ -n "`echo $_line | grep '^Family: '`" ]; then
+ cpu_family="`echo $_line | sed -e 's/Family: //' -e 's/ .*//'`"
+ fi
+ if [ -n "`echo $_line | grep '^Family: '`" ]; then
+ cpu_model="`echo $_line | sed -e 's/Family:.*Model: //' -e 's/ .*//'`"
+ fi
+ done
+ unset IFS
+
+ # Get the flags from /var/run/dmesg.boot
+ flags="`grep -A2 '^CPU:' /var/run/dmesg.boot | grep '^ Features' | sed -e 's/^.*<//' -e 's/>.*//' -e 's/,/ /g' | tr 'A-Z' 'a-z'`"
+}
+
+read_cpu_data() {
+ # Default values
+ vendor_id="Unset"
+ cpu_family="-1"
+ cpu_model="-1"
+ flags=""
+ if [ "`uname`" = "Linux" ]; then
+ read_cpu_data_linux
+ elif [ "`uname`" = "FreeBSD" ]; then
+ read_cpu_data_freebsd
+ else
+ echo "Error: `uname` is not a supported operating system"
+ exit 1
+ fi
+}
+
+read_cpu_data
+
+if [ "$vendor_id" = "AuthenticAMD" ]; then
+ if [ $cpu_family -eq 4 ]; then
+ _CFLAGS="-march=i486"
+ elif [ $cpu_family -eq 5 ]; then
+ if [ $cpu_model -lt 4 ]; then
+ _CFLAGS="-march=pentium"
+ elif [ \( $cpu_model -eq 6 \) -o \( $cpu_model -eq 7 \) ]; then
+ _CFLAGS="-march=k6"
+ elif [ \( $cpu_model -eq 8 \) -o \( $cpu_model -eq 12 \) ]; then
+ line="k6-2 k6"
+ elif [ \( $cpu_model -eq 9 \) -o \( $cpu_model -eq 13 \) ]; then
+ line="k6-3 k6-2 k6"
+ fi
+ elif [ $cpu_family -eq 6 ]; then
+ if [ $cpu_model -le 3 ]; then
+ line="athlon k6-3 k6-2 k6"
+ elif [ $cpu_model -eq 4 ]; then
+ line="athlon-tbird athlon k6-3 k6-2 k6"
+ elif [ $cpu_model -ge 6 ]; then #athlon-{4,xp,mp}
+ line="athlon-4 athlon k6-3 k6-2 k6"
+ fi
+ elif [ $cpu_family -eq 15 ]; then #k8,opteron,athlon64,athlon-fx
+ line="k8 athlon-4 athlon k6-3 k6-2 k6"
+ fi
+elif [ "$vendor_id" = "CentaurHauls" ]; then
+ if [ $cpu_family -eq 5 ]; then
+ if [ $cpu_model -eq 4 ]; then
+ line="winchip-c6 pentium"
+ elif [ $cpu_model -eq 8 ]; then
+ line="winchip2 winchip-c6 pentium"
+ elif [ $cpu_model -ge 9 ]; then
+ line="winchip2 winchip-c6 pentium" #actually winchip3 but gcc doesn't support this currently
+ fi
+ elif [ $cpu_family -eq 6 ]; then
+ if echo "$flags" | grep -q cmov; then
+ fallback=pentiumpro
+ else
+ fallback=pentium #gcc incorrectly assumes i686 always has cmov
+ fi
+ if [ $cpu_model -eq 6 ]; then
+ _CFLAGS="-march=pentium" # ? Cyrix 3 (samuel)
+ elif [ $cpu_model -eq 7 ] || [ $cpu_model -eq 8 ]; then
+ line="c3 winchip2 winchip-c6 $fallback"
+ elif [ $cpu_model -ge 9 ]; then
+ line="c3-2 c3 winchip2 winchip-c6 $fallback"
+ fi
+ fi
+elif [ "$vendor_id" = "GenuineIntel" ]; then
+ if [ $cpu_family -eq 3 ]; then
+ _CFLAGS="-march=i386"
+ elif [ $cpu_family -eq 4 ]; then
+ _CFLAGS="-march=i486"
+ elif [ $cpu_family -eq 5 ]; then
+ if [ $cpu_model -ne 4 ]; then
+ _CFLAGS="-march=pentium"
+ else
+ line="pentium-mmx pentium" #No overlap with other vendors
+ fi
+ elif [ $cpu_family -eq 6 ]; then
+ if [ \( $cpu_model -eq 0 \) -o \( $cpu_model -eq 1 \) ]; then
+ _CFLAGS="-march=pentiumpro"
+ elif [ \( $cpu_model -ge 3 \) -a \( $cpu_model -le 6 \) ]; then #4=TM5600 at least
+ line="pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ elif [ \( $cpu_model -eq 9 \) -o \( $cpu_model -eq 13 \) ]; then #centrino
+ line="pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ elif [ $cpu_model -eq 14 ]; then #Core
+ line="prescott pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ elif [ $cpu_model -eq 15 ]; then #Core 2
+ line="core2 pentium-m pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ elif [ \( $cpu_model -ge 7 \) -a \( $cpu_model -le 11 \) ]; then
+ line="pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ fi
+ elif [ $cpu_family -eq 15 ]; then
+ if [ $cpu_model -eq 3 ]; then
+ line="prescott pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ else
+ line="pentium4 pentium3 pentium2 pentiumpro pentium-mmx pentium i486 i386"
+ fi
+ fi
+else
+ echo "Unknown CPU Vendor: $vendor_id"
+ exit 1
+fi
+
+[ -z "$_CFLAGS" ] && _CFLAGS="-march=`try_line "$line"`"
+
+if echo "$flags" | grep -q "sse"; then
+ if try_gcc_options "-mfpmath=sse"; then #gcc >= 3.1
+ _CFLAGS="$_CFLAGS -mfpmath=sse"
+ fi
+fi
+if echo "$flags" | grep -E -q "(sse3|pni)"; then
+ if ! echo "$_CFLAGS" | grep -E -q "(native|core2)"; then
+ if try_gcc_options "-msse3"; then #gcc >= 3.3.3
+ _CFLAGS="$_CFLAGS -msse3"
+ fi
+ fi
+fi
+
+echo "$m32$_CFLAGS"
Deleted: freeswitch/branches/seven/contrib/trixter/jp.pl
Copied: freeswitch/branches/seven/contrib/trixter/jp.pl (from rev 14471, freeswitch/trunk/contrib/trixter/jp.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/jp.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/jp.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+use FreeSWITCH::Client;
+use Data::Dumper;
+
+my $fs = init FreeSWITCH::Client {} or die "Error $@";
+my $pid;
+
+for (;;) {
+ $fs->accept();
+
+ if (!($pid = fork)) {
+ last;
+ }
+}
+
+my $data = $fs->call_data();
+
+#print Dumper $data
+print "Call: $data->{'caller-channel-name'} $data->{'unique-id'}\n";
+
+
+$o = $fs->call_command("answer");
+#to turn on events when in async mode
+$o = $fs->raw_command("myevents");
+$o = $fs->call_command("playback","/sounds/you-have-reached-a-test-number.wav");
+$o = $fs->call_command("record","/tmp/recording.wav 5 300 5");
+$o = $fs->call_command("playback","/tmp/recording.wav");
+$o = $fs->call_command("echo");
+
+
+#comment exit in async mode
+#exit;
+
+while(my $r = $fs->readhash(undef)) {
+ if ($r->{socketerror}) {
+ last;
+ }
+
+ if ($r->{has_event}) {
+ print Dumper $r->{event};
+ }
+ if ($r->{event}->{'event-name'} !~ /execute/i) {
+ printf "wtf $data->{'unique-id'}\n";
+ $o = $fs->call_command("break");
+ $o = $fs->call_command("hangup");
+ }
+}
+
+$fs->disconnect();
+print "done\n";
+
+
Deleted: freeswitch/branches/seven/contrib/trixter/makecombinedfsxml.pl
Copied: freeswitch/branches/seven/contrib/trixter/makecombinedfsxml.pl (from rev 14471, freeswitch/trunk/contrib/trixter/makecombinedfsxml.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/makecombinedfsxml.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/makecombinedfsxml.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+open (FSXML, "freeswitch.xml") or die "Unable to locate freeswitch.xml - run this in the directory with the conf files";
+
+while ($record = <FSXML>) {
+ if ($record =~ /<!--#include "(.*?)"-->/) {
+ open(CONF, "$1");
+ while (<CONF>) {
+ print $_;
+ }
+ close(CONF);
+ } else {
+ print $record;
+ }
+}
+
+close(FSXML);
Deleted: freeswitch/branches/seven/contrib/trixter/makemodconf.pl
Copied: freeswitch/branches/seven/contrib/trixter/makemodconf.pl (from rev 14471, freeswitch/trunk/contrib/trixter/makemodconf.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/makemodconf.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/makemodconf.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,97 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+# Copyright (C) 2009, Bret McDanel <trixter AT 0xdecafbad.com>
+
+# I wanted an automated method to generate a modules.conf.xml based on the modules.conf
+# that you build the code from. This is ideal for new builds but not very useful
+# after that.
+
+# to run:
+# ./makemodconf.pl /usr/src/freeswitch/modules.conf > /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
+
+# this is for modules that are not directly loaded by modules.conf.xml
+my @exclude = (
+ '^mod_spidermonkey_.*$',
+ );
+
+# this is for things that have odd directory locations
+my %sectionfix = (
+ '../../libs/openzap' => 'endpoints'
+ );
+
+
+my %modules = ();
+
+sub trim($)
+ {
+ my $string = shift;
+ $string =~ s/^\s+//;
+ $string =~ s/\s+$//;
+ return $string;
+ }
+
+ sub is_excluded($)
+ {
+ my $modname = shift;
+ foreach my $regexp (@exclude) {
+ if($modname =~ /$regexp/) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ sub fix_section($)
+ {
+ my $section = shift;
+ if (exists $sectionfix{$section}) {
+ return $sectionfix{$section};
+ } else {
+ return $section;
+ }
+ }
+
+
+ if ($#ARGV != 0) {
+ print "Usage: $0 modules.conf\n";
+ exit;
+ }
+
+ my $infile = shift @ARGV;
+
+
+ open( INFILE, "< $infile" ) or die "Can't open $infile $!";
+
+ while( <INFILE> ) {
+ $_ = trim($_);
+
+ $_ =~ /^(#?)(.*)\/(.*)$/;
+
+ my $comment = $1;
+ my $section = fix_section($2);
+ my $modname = $3;
+
+
+ if(!is_excluded($modname)){
+ push (@{$modules{$section}},[$modname,$comment]);
+ }
+ }
+
+ print "<configuration name=\"modules.conf\" description=\"Modules\">\n";
+ print " <modules>\n";
+
+ foreach my $section (sort(keys %modules)) {
+ print "\n\t<!-- $section -->\n";
+ foreach (@{$modules{$section}}) {
+ my $comment = @$_[1];
+ my $modname = @$_[0];
+ if($comment eq "#") {
+ print "\t<!-- <load module=\"$modname\"/> -->\n";
+ } else {
+ print "\t<load module=\"$modname\"/>\n";
+ }
+ }
+ }
+ print " </modules>\n";
+ print "</configuration>\n";
Deleted: freeswitch/branches/seven/contrib/trixter/regexptest.pl
Copied: freeswitch/branches/seven/contrib/trixter/regexptest.pl (from rev 14471, freeswitch/trunk/contrib/trixter/regexptest.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/regexptest.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/regexptest.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+
+print "Enter the regexp you wish to test: ";
+$regexp = <STDIN>;
+chomp($regexp);
+
+print "Enter the value you wish to test: ";
+$value = <STDIN>;
+chomp($value);
+
+if ($value =~ m/$regexp/) {
+ print "$value matches $regexp\n";
+ $x=1;
+ while (defined $$x) {
+ print "capture $x: $$x\n";
+ $x++;
+ }
+} else {
+ print "$value does not match $regexp\n";
+}
+
Copied: freeswitch/branches/seven/contrib/trixter/skypiax (from rev 14471, freeswitch/trunk/contrib/trixter/skypiax)
Deleted: freeswitch/branches/seven/contrib/trixter/skypiax/README
Copied: freeswitch/branches/seven/contrib/trixter/skypiax/README (from rev 14471, freeswitch/trunk/contrib/trixter/skypiax/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/skypiax/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/skypiax/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+I am putting my patches and such in here so that people cna use them and test them, I did not feel like maintaining my own skypiax at this point, I will see how the patching parts go and if there are any conflicts between my ideas for this and other peoples ideas.
+
Deleted: freeswitch/branches/seven/contrib/trixter/skypiax/mod_skypiax.c.r13219.svndiff
Copied: freeswitch/branches/seven/contrib/trixter/skypiax/mod_skypiax.c.r13219.svndiff (from rev 14471, freeswitch/trunk/contrib/trixter/skypiax/mod_skypiax.c.r13219.svndiff) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/skypiax/mod_skypiax.c.r13219.svndiff (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/skypiax/mod_skypiax.c.r13219.svndiff 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,144 @@
+Index: src/mod/endpoints/mod_skypiax/mod_skypiax.c
+===================================================================
+--- src/mod/endpoints/mod_skypiax/mod_skypiax.c (revision 13219)
++++ src/mod/endpoints/mod_skypiax/mod_skypiax.c (working copy)
+@@ -27,9 +27,9 @@
+ *
+ *
+ * Further Contributors:
++ * Bret McDanel <trixter AT 0xdecafbad.com>
+ *
+ *
+- *
+ * mod_skypiax.c -- Skype compatible Endpoint Module
+ *
+ */
+@@ -338,13 +338,9 @@
+ switch_frame_t ** frame, switch_io_flag_t flags,
+ int stream_id)
+ {
+- switch_channel_t *channel = NULL;
+ private_t *tech_pvt = NULL;
+ switch_byte_t *data;
+
+- channel = switch_core_session_get_channel(session);
+- switch_assert(channel != NULL);
+-
+ tech_pvt = switch_core_session_get_private(session);
+ switch_assert(tech_pvt != NULL);
+ tech_pvt->read_frame.flags = SFF_NONE;
+@@ -408,13 +404,9 @@
+ switch_frame_t * frame, switch_io_flag_t flags,
+ int stream_id)
+ {
+- switch_channel_t *channel = NULL;
+ private_t *tech_pvt = NULL;
+ unsigned int sent;
+
+- channel = switch_core_session_get_channel(session);
+- switch_assert(channel != NULL);
+-
+ tech_pvt = switch_core_session_get_private(session);
+ switch_assert(tech_pvt != NULL);
+
+@@ -444,11 +436,7 @@
+ static switch_status_t channel_answer_channel(switch_core_session_t * session)
+ {
+ private_t *tech_pvt;
+- switch_channel_t *channel = NULL;
+
+- channel = switch_core_session_get_channel(session);
+- switch_assert(channel != NULL);
+-
+ tech_pvt = switch_core_session_get_private(session);
+ switch_assert(tech_pvt != NULL);
+
+@@ -460,12 +448,8 @@
+ static switch_status_t channel_receive_message(switch_core_session_t * session,
+ switch_core_session_message_t * msg)
+ {
+- switch_channel_t *channel;
+ private_t *tech_pvt;
+
+- channel = switch_core_session_get_channel(session);
+- switch_assert(channel != NULL);
+-
+ tech_pvt = (private_t *) switch_core_session_get_private(session);
+ switch_assert(tech_pvt != NULL);
+
+@@ -655,14 +639,11 @@
+ {
+ private_t *tech_pvt = obj;
+ int res;
+- int forever = 1;
+
+ DEBUGA_SKYPE("In skypiax_signaling_thread_func: started, p=%p\n", SKYPIAX_P_LOG,
+ (void *) tech_pvt);
+
+- while (forever) {
+- if (!running)
+- break;
++ while (running) {
+ res = skypiax_signaling_read(tech_pvt);
+ if (res == CALLFLOW_INCOMING_HANGUP) {
+ switch_core_session_t *session = NULL;
+@@ -912,7 +893,6 @@
+ switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].dialplan, dialplan);
+ switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].destination,
+ destination);
+- switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].context, context);
+
+ DEBUGA_SKYPE
+ ("interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].X11_display=%s\n",
+@@ -944,9 +924,6 @@
+ ("interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].destination=%s\n",
+ SKYPIAX_P_LOG, interface_id,
+ globals.SKYPIAX_INTERFACES[interface_id].destination);
+- DEBUGA_SKYPE
+- ("interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].context=%s\n",
+- SKYPIAX_P_LOG, interface_id, globals.SKYPIAX_INTERFACES[interface_id].context);
+ WARNINGA("STARTING interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
+
+ switch_threadattr_create(&skypiax_api_thread_attr, skypiax_module_pool);
+@@ -1036,8 +1013,6 @@
+ i, i, globals.SKYPIAX_INTERFACES[i].dialplan);
+ DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].destination=%s\n",
+ SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].destination);
+- DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].context=%s\n", SKYPIAX_P_LOG, i,
+- i, globals.SKYPIAX_INTERFACES[i].context);
+ }
+ }
+ }
+@@ -1348,10 +1323,9 @@
+ private_t *find_available_skypiax_interface(void)
+ {
+ private_t *tech_pvt = NULL;
+- int found = 0;
+ int i;
+
+- for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
++ for (i = 0; i < SKYPIAX_MAX_INTERFACES; i++) {
+ if (strlen(globals.SKYPIAX_INTERFACES[i].name)) {
+ int skype_state = 0;
+
+@@ -1359,17 +1333,13 @@
+ skype_state = tech_pvt->interface_state;
+ DEBUGA_SKYPE("skype interface: %d, name: %s, state: %d\n", SKYPIAX_P_LOG, i,
+ globals.SKYPIAX_INTERFACES[i].name, skype_state);
+- if (SKYPIAX_STATE_DOWN == skype_state || 0 == skype_state) {
+- found = 1;
+- break;
++ if (SKYPIAX_STATE_DOWN == skype_state || 0 == skype_state) {
++ return tech_pvt;
+ }
+ }
+ }
+
+- if (found)
+- return tech_pvt;
+- else
+- return NULL;
++ return NULL;
+ }
+
+ SWITCH_STANDARD_API(sk_function)
Deleted: freeswitch/branches/seven/contrib/trixter/softphone.pl
Copied: freeswitch/branches/seven/contrib/trixter/softphone.pl (from rev 14471, freeswitch/trunk/contrib/trixter/softphone.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/softphone.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/softphone.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,179 @@
+#!/usr/bin/perl
+# -*- mode:cperl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+#
+# FreeSWITCH Softphone
+# Copyright (C) 2007, Bret McDanel <trixter AT 0xdecafbad.com>
+#
+# Version: MPL 1.1
+#
+# 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.
+#
+# The Original Code is FreeSWITCH Softphone
+#
+# The Initial Developer of the Original Code is
+# Bret McDanel <trixter AT 0xdecafbad.com>
+# Portions created by the Initial Developer are Copyright (C)
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Bret McDanel <trixter AT 0xdecafbad.com>
+#
+# softphone.pl -- FreeSWITCH softphone in perl
+#
+#
+
+#####
+##
+## This is the start of a GUI for FreeSWITCH[tm] using port audio as the channel endpoint.
+## Right now there are a few things that do not work right:
+## * events are not properly read
+## * if remote party hangs up the client doesnt realize it
+## * registration status is not displayed
+## * no redial ability
+## * no transfer, hold, etc
+## * incoming calls cannot be detected, or answered
+##
+## It works for a single channel, and you can type anything into the dial window, if that matches some regexp
+## in your dialplan the call will proceed.
+##
+#####
+
+use FreeSWITCH::Client;
+use Data::Dumper; # used to print out myhash debug info
+use Tk;
+use strict;
+
+
+# configure these
+my $password = "ClueCon"; # the password for event socket
+my $host = "localhost"; # the hostname to connect to
+my $port = 8021; # the port to connect to
+
+
+# random variables that we are going to use
+my $window;
+my $phonenumber;
+my $callInProgress=0;
+my $fs;
+my $errorString = undef;
+
+
+makeWindow();
+MainLoop;
+$fs->sendmsg({'command' => "api pa hangup"}) unless !defined($fs);
+print "We should hang up the calls, and any other cleanup here\n";
+
+
+
+sub getEvent() {
+ if(defined $fs) {
+ my $reply = $fs->readhash(0);
+ if ($reply->{socketerror}) {
+ $errorString = "Got error: ".$reply->{socketerror};
+ es_connect();
+ }
+
+ if ($reply->{body}) {
+ my $myhash = $reply->{event};
+ print Dumper $myhash;
+ }
+ } else {
+ $errorString = "Connecting";
+ es_connect();
+ }
+}
+
+
+# this connects to the event socket
+sub es_connect()
+{
+ $errorString = "Connecting to $host:$port";
+ eval {
+ $fs = init FreeSWITCH::Client {-password => $password, -host => $host, -port => $port};
+ if(defined $fs) {
+ $fs->sendmsg({'command' => 'event plain myevents'});
+ }
+ } or do {
+ $errorString = "Error connecting - waiting for retry";
+ sleep 5;
+ }
+
+}
+
+
+sub makeWindow {
+ $window = MainWindow->new();
+ $window->title("FreeSWITCH[tm] GUI");
+ my $mainframe = $window->Frame()->pack(qw/-side top -padx 10 -expand true -fill both/);
+
+ $mainframe->Entry(-textvariable => \$phonenumber)->pack(qw/-side top/);
+ my $dialpadframe = $mainframe->Frame()->pack(qw/-anchor s -pady 3/);
+ my $dialpadcol1 = $dialpadframe->Frame()->pack(qw/-side left -pady 3/);
+ my $dialpadcol2 = $dialpadframe->Frame()->pack(qw/-side left -pady 3/);
+ my $dialpadcol3 = $dialpadframe->Frame()->pack(qw/-side left -pady 3/);
+ my $errorMsgs = $mainframe->Label(-textvariable => \$errorString)->pack(qw/-side bottom/);
+ my $buttonframe = $mainframe->Frame()->pack(qw/-side bottom/);
+
+ # I really dont like this method, but I dont know Tk that well
+ # basically we have a timer that will call getEvent() 1ms after its finished running
+ # to see about getting more events - threads dont work because you cant share the FreeSWITCH::Client class
+ # forking doesnt work because $fs is always undefined from the GUI side
+ # or maybe you can, I dont know perl all that well either.
+ my $timerid = $window->repeat(100,\&getEvent);
+
+# set up the keys
+ my $phonebutton1 = $dialpadcol1->Button(-text => '1', -command => sub{sendDTMF("1")})->pack(qw/-side top/);
+ my $phonebutton2 = $dialpadcol2->Button(-text => '2', -command => sub{sendDTMF("2")})->pack(qw/-side top/);
+ my $phonebutton3 = $dialpadcol3->Button(-text => '3', -command => sub{sendDTMF("3")})->pack(qw/-side top/);
+ my $phonebutton4 = $dialpadcol1->Button(-text => '4', -command => sub{sendDTMF("4")})->pack(qw/-side top/);
+ my $phonebutton5 = $dialpadcol2->Button(-text => '5', -command => sub{sendDTMF("5")})->pack(qw/-side top/);
+ my $phonebutton6 = $dialpadcol3->Button(-text => '6', -command => sub{sendDTMF("6")})->pack(qw/-side top/);
+ my $phonebutton7 = $dialpadcol1->Button(-text => '7', -command => sub{sendDTMF("7")})->pack(qw/-side top/);
+ my $phonebutton8 = $dialpadcol2->Button(-text => '8', -command => sub{sendDTMF("8")})->pack(qw/-side top/);
+ my $phonebutton9 = $dialpadcol3->Button(-text => '9', -command => sub{sendDTMF("9")})->pack(qw/-side top/);
+ my $phonebuttonstar = $dialpadcol1->Button(-text => '*', -command => sub{sendDTMF("*")})->pack(qw/-side top/);
+ my $phonebutton0 = $dialpadcol2->Button(-text => '0', -command => sub{sendDTMF("0")})->pack(qw/-side top/);
+ my $phonebuttonpound = $dialpadcol3->Button(-text => '#', -command => sub{sendDTMF("#")})->pack(qw/-side top/);
+
+
+ my $dialbutton = $buttonframe->Button(-text => 'Dial/Answer', -command => \&dialAnswer)->pack(qw/-side left/);
+ my $hangupbutton = $buttonframe->Button(-text => 'Hangup', -command => \&hangup)->pack(qw/-side right/);
+}
+
+sub dialAnswer {
+ $callInProgress=1;
+ if(defined($fs)) {
+ $fs->sendmsg({'command' => "api pa call $phonenumber"});
+ } else {
+ $errorString = "Not connected!!!";
+ }
+}
+
+sub hangup {
+ $callInProgress=0;
+ $errorString = "hangup";
+ $phonenumber = "";
+ $fs->sendmsg({'command' => "api pa hangup"}) unless !defined($fs);
+}
+
+sub sendDTMF{
+ my $dtmf=shift;
+ if($callInProgress==1) {
+ if(defined($fs)) {
+ $fs->sendmsg({'command' => "api pa dtmf $dtmf"}) unless !defined($dtmf);
+ } else {
+ $errorString = "Not connected!";
+ }
+ } else {
+ $phonenumber .= $dtmf unless !defined($dtmf);
+ }
+}
Deleted: freeswitch/branches/seven/contrib/trixter/validate-ivr.pl
Copied: freeswitch/branches/seven/contrib/trixter/validate-ivr.pl (from rev 14471, freeswitch/trunk/contrib/trixter/validate-ivr.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/validate-ivr.pl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/validate-ivr.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,140 @@
+#!/usr/bin/perl
+# -*- mode:perl; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+
+use XML::LibXML;
+use POSIX ':signal_h';
+
+
+# initialize the parser
+# my $parser = new XML::LibXML;
+
+
+my $file = shift @ARGV;
+my $tree = XML::LibXML->new()->parse_file($file);
+my $root = $tree->getDocumentElement;
+my @menudata = $root->getElementsByTagName('menu');
+my $menu_top = shift @ARGV;
+
+
+
+sigaction SIGALRM, new POSIX::SigAction sub {
+ die "TIMEOUT";
+} or die "Error setting SIGALRM handler: $!\n";
+
+
+
+sub printMenu($) {
+ my $menu = shift;
+
+ my $name = $menu->getAttribute('name');
+ my $greet_long = $menu->getAttribute('greet-long');
+ my $greet_short = $menu->getAttribute('greet-short');
+ my $invalid_sound = $menu->getAttribute('invalid-sound');
+ my $exit_sound = $menu->getAttribute('exit-sound');
+
+ print "$name\n";
+
+
+ my @entries = $menu->getElementsByTagName('entry');
+ foreach my $entry (@entries) {
+ my $action = $entry->getAttribute('action');
+ my $digits = $entry->getAttribute('digits');
+ my $param = $entry->getAttribute('param');
+
+ if($action eq undef) {
+ print "\tAction was undefined, skipping\n";
+ } else {
+ print "\taction: $action";
+ print "\tdigits: $digits" unless (! defined $digits);
+ print "\tparam: $param" unless (! defined $param);
+ print "\n";
+ }
+ }
+}
+
+
+sub findMenu($) {
+ my $menuName = shift;
+ foreach my $menu (@menudata) {
+ if ($menuName eq $menu->getAttribute('name')) {
+ return $menu;
+ }
+ }
+ print "Unable to locate menu $menuName!\n";
+}
+
+sub runMenu($) {
+ my @menu = shift;
+
+ my $tries = 0;
+
+ my $max_failures = @menu[0]->getAttribute('max-failures');
+ my $timeout = @menu[0]->getAttribute('timeout');
+ my $greet_long = @menu[0]->getAttribute('greet-long');
+ my $greet_short = @menu[0]->getAttribute('greet-short');
+ my $invalid_sound = @menu[0]->getAttribute('invalid-sound');
+ my $exit_sound = @menu[0]->getAttribute('exit-sound');
+
+
+ print "Playing $greet_long\n";
+ while (true) {
+ printMenu(@menu[0]);
+ alarm $timeout;
+
+ eval {
+ print "Enter your choice: ";
+ $choice = <STDIN>;
+ chomp($choice);
+
+ my @entries = @menu[0]->getElementsByTagName('entry');
+ my $action;
+ my $param;
+ foreach my $entry (@entries) {
+ if($entry->getAttribute('digits') eq $choice) {
+ $action = $entry->getAttribute('action');
+ $param = $entry->getAttribute('param');
+ last;
+ }
+ }
+
+ if($action eq "menu-sub") {
+ runMenu(findMenu($param));
+ } elsif ($action eq "menu-exit") {
+ print "Playing $exit_sound\n";
+ exit;
+ } elsif ($action eq "menu-back") {
+ return;
+ } elsif ($action eq "menu-top") {
+ runMenu(findMenu($menu_top));
+ } elsif ($action eq "menu-exec-api") {
+ print "EXEC: $param\n";
+ } elsif ($action eq "menu-call-transfer") {
+ print "TRANSFER: $param\n";
+ } elsif ($action eq "menu-play-sound") {
+ print "Playing $param\n";
+ } else {
+ print "Action $action is not mapped!\n" unless (! defined $action);
+ print "Playing $invalid_sound\n";
+ $tries++;
+ }
+ };
+
+ if ($@ =~ /TIMEOUT/) {
+ print "Timeout\n";
+ $tries++;
+ }
+
+ if($tries lt $max_failures) {
+ print "Playing $greet_short\n";
+ } else {
+ last;
+ }
+
+ }
+ print "Playing $exit_sound\n";
+ exit;
+
+}
+
+runMenu(findMenu($menu_top));
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-cdr/Parse_XML_CDR.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr/Parse_XML_CDR.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr/Parse_XML_CDR.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-cdr/Parse_XML_CDR.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-cdr/Parse_XML_CDR.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,149 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+
+class Parse_CDR_XML {
+ var $_data = Array();
+ var $_name = Array();
+ var $_rep = Array();
+ var $_parser = 0;
+ var $_showAttribs;
+ var $_level = 0;
+ var $currentTag;
+ var $_CDR=array();
+ var $_callflowcnt=0;
+ var $_iscallflow=0;
+
+ function Parse_CDR_XML(&$data,$showattribs = false) {
+ $data = stripslashes(preg_replace('/<.xml (.*?)>(.*)/',"\\2",$data));
+ $data = preg_replace("/<(.*?)><(.*?)><\/(.*?)>/","<\\1>\\2</\\3>",$data);
+ $this->_showAttribs = $showattribs;
+ $this->_parser = xml_parser_create();
+
+ xml_set_object($this->_parser,$this);
+
+ xml_parser_set_option($this->_parser,XML_OPTION_CASE_FOLDING,false);
+
+ xml_set_element_handler($this->_parser, "_startElement", "_endElement");
+ xml_set_character_data_handler($this->_parser, "_cdata");
+
+ $this->_data = array();
+ $this->_level = 0;
+ if(!xml_parse($this->_parser, $data, true)){
+ return false;
+ }
+ xml_parser_free($this->_parser);
+ }
+
+
+ function & ReturnArray() {
+ return $this->_CDR;
+ }
+
+
+ function & ReturnAttributes() {
+ return $this->_data['_Attributes_'];
+ }
+
+
+ function _startElement($parser, $name, $attrs){
+ $this->_ElementName="";
+ if (!isset($this->_rep[$name])) $this->_rep[$name] = 0;
+ switch ($name) {
+ case "cdr":
+ break;
+ case "app_log":
+ case "variables":
+ if(!isset($this->_CDR[$name])) {
+ $this->_CDR[$name]=array();
+ }
+ $this->currentTag = $name;
+ break;
+ case "application":
+ if($this->_iscallflow) {
+ $this->_CDR[$this->currentTag][$this->_callflowcnt]['extension']['application'][]=$attrs;
+ } else {
+ $this->_CDR[$this->currentTag][]=$attrs;
+ }
+ break;
+ case "callflow":
+ if(!is_array($this->_CDR[$name])) { $this->_CDR[$name]=array(); }
+ $this->currentTag = $name;
+ foreach ($attrs as $key => $value) {
+ $this->_CDR[$this->currentTag][$this->_callflowcnt][$key]=$value;
+ }
+ $this->_iscallflow=1;
+ break;
+ case "extension":
+ foreach ($attrs as $key => $value) {
+ $this->_CDR[$this->currentTag][$this->_callflowcnt]['extension'][$key]=$value;
+ }
+ break;
+ case "originator":
+ if($this->_iscallflow) {
+ $this->currentTag = $name;
+ } else {
+ $this->_ElementName=$name;
+ }
+ break;
+ case "caller_profile":
+ case "times":
+ case "originator_caller_profile":
+ $this->currentTag = $name;
+ break;
+ default:
+ $this->_ElementName=$name;
+ break;
+ }
+
+ }
+
+
+ function _endElement($parser,$name){
+ $this->_ElementName="";
+ switch ($name) {
+ case "callflow":
+ $this->_callflowcnt++;
+ $this->_iscallflow=0;
+ break;
+ }
+
+ }
+
+
+
+ function _cdata($parser, $data) {
+ switch($this->currentTag) {
+ case "cdr":
+ return;
+ break;
+ case "app_log":
+ return;
+ break;
+ case "originator_caller_profile":
+ if(isset($data) && $this->_ElementName != "" &&
+ !isset($this->_CDR[$this->currentTag][$this->_ElementName])
+ ) {
+
+ $this->_CDR['callflow'][$this->_callflowcnt]['originator'][$this->currentTag][$this->_ElementName]=$data;
+ }
+ return;
+ break;
+ case "caller_profile":
+ case "times":
+ if(isset($data) && $this->_ElementName != "" &&
+ !isset($this->_CDR[$this->currentTag][$this->_ElementName])
+ ) {
+
+ $this->_CDR['callflow'][$this->_callflowcnt][$this->currentTag][$this->_ElementName]=$data;
+ }
+ return;
+ break;
+ }
+ if(isset($data) && $this->_ElementName != "" &&
+ !isset($this->_CDR[$this->currentTag][$this->_ElementName])
+ ) {
+ $this->_CDR[$this->currentTag][$this->_ElementName]=$data;
+ }
+ }
+
+}
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-cdr/README
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr/README (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-cdr/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-cdr/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,41 @@
+To use this you need to have the mod_xml_cdr loaded and configured.
+
+If you use either errLogDir or logDir then make sure that the directories
+exist. In the case of logDir the original code appended "/xml_cdr" onto
+the value, so I do that as well. If logDir is set but empty (value="")
+it will use the FreeSWITCH default log dir and appent "/xml_cdr" onto
+that.
+
+<configuration name="xml_cdr.conf" description="XML CDR CURL logger">
+<settings>
+ <!-- the credentials we may optionally use when POSTing ->
+ <param name="cred" value="user:pass"/>
+ <!-- url to log to -->
+ <param name="url" value="http://myhost/cdr.php"/>
+ <!-- how many times we retry not counting the inital try -->
+ <param name="retries" value="2"/>
+ <!-- how many seconds before we try again -->
+ <param name="delay" value="120"/>
+ <!-- this is where we log failed POSTs to the webserver -->
+ <param name="errLogDir" value="/usr/local/freeswitch/log/xml_cdr_errors"/>
+
+<!-- optional: if not present we do not log every record to disk -->
+<!-- per original code base /xml_cdr is appended to the directory name -->
+<param name="logDir" value="/usr/local/freeswitch/log"/>
+
+</settings>
+
+
+
+TO TEST
+there is an example XML_CDR record testcdr.xml which you can parse
+
+Web method:
+cp testcdr.php Parse_XML_CDR.php testcdr.xml /path/to/htdocs
+goto http://host/testcdr.php
+
+CLI method:
+php testcdr.php
+
+The XML record is quite long and has many transfers, but this should
+let you know how the array is formed so you can reference elements
Deleted: freeswitch/branches/seven/contrib/trixter/xml-cdr/cdr.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr/cdr.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr/cdr.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-cdr/cdr.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-cdr/cdr.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+<?php
+ include_once('Parse_XML_CDR.php');
+
+ Header("Content-type: text/plain");
+
+ $xml = new Parse_CDR_XML($_POST['cdr']);
+ $cdr=$xml->ReturnArray();
+
+ // log the entries
+ // it would probably be better to log to a database but simple examples dont do that
+ $fh = fopen("/tmp/cdr.xml.".uniqid(), 'wb');
+ fwrite($fh, $_POST['cdr'] . "\n\nprint_r\n\n");
+ fwrite($fh,print_r($cdr,true)."\n\n");
+ fclose($fh);
+
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr/testcdr.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,27 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+include_once('Parse_XML_CDR.php');
+Header("Content-type: text/plain");
+
+function read_file($filename)
+{
+ if ( file_exists($filename) && ($fd = @fopen($filename, 'rb')) ) {
+ $contents = '';
+ while (!feof($fd)) {
+ $contents .= fread($fd, 8192);
+ }
+ fclose($fd);
+ return $contents;
+ } else {
+ return false;
+ }
+}
+
+$xmlraw=read_file("testcdr.xml");
+if($xmlraw !== false) {
+ $xml = new Parse_CDR_XML($xmlraw);
+ $cdr=$xml->ReturnArray();
+ print_r($cdr);
+ } else {
+ echo "Unable to read file";
+ }
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.xml
Copied: freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.xml (from rev 14471, freeswitch/trunk/contrib/trixter/xml-cdr/testcdr.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-cdr/testcdr.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1528 @@
+<?xml version="1.0"?>
+<cdr>
+ <variables>
+ <sip_authorized>true</sip_authorized>
+ <sip_mailbox>1006</sip_mailbox>
+ <sip_auth_username>1006</sip_auth_username>
+ <sip_auth_realm>10.0.1.250</sip_auth_realm>
+ <mailbox>1006</mailbox>
+ <accountcode>1006</accountcode>
+ <user_context>default</user_context>
+ <effective_caller_id_name>Extension%201006</effective_caller_id_name>
+ <effective_caller_id_number>1006</effective_caller_id_number>
+ <sip_from_user>1006</sip_from_user>
+ <sip_from_port>5060</sip_from_port>
+ <sip_from_uri>1006%4010.0.1.250%3A5060</sip_from_uri>
+ <sip_from_host>10.0.1.250</sip_from_host>
+ <sip_from_user_stripped>1006</sip_from_user_stripped>
+ <sofia_profile_name>default</sofia_profile_name>
+ <sip_req_user>1009</sip_req_user>
+ <sip_req_port>5060</sip_req_port>
+ <sip_req_uri>1009%4010.0.1.250%3A5060</sip_req_uri>
+ <sip_req_host>10.0.1.250</sip_req_host>
+ <sip_to_user>1009</sip_to_user>
+ <sip_to_port>5060</sip_to_port>
+ <sip_to_uri>1009%4010.0.1.250%3A5060</sip_to_uri>
+ <sip_to_host>10.0.1.250</sip_to_host>
+ <sip_contact_user>1006</sip_contact_user>
+ <sip_contact_port>5060</sip_contact_port>
+ <sip_contact_uri>1006%4010.0.1.240%3A5060</sip_contact_uri>
+ <sip_contact_host>10.0.1.240</sip_contact_host>
+ <channel_name>sofia/default/1006%4010.0.1.250%3A5060</channel_name>
+ <sip_call_id>1f9e6333-e0128840-f539ae8d%4010.0.1.240</sip_call_id>
+ <sip_via_host>10.0.1.240</sip_via_host>
+ <sip_via_port>5060</sip_via_port>
+ <sip_via_rport>34699</sip_via_rport>
+ <max_forwards>70</max_forwards>
+ <presence_id>1006%4010.0.1.250</presence_id>
+ <switch_r_sdp>v%3D0%0D%0Ao%3D-%201198125579%201198125579%20IN%20IP4%2010.0.1.240%0D%0As%3DPolycom%20IP%20Phone%0D%0Ac%3DIN%20IP4%2010.0.1.240%0D%0At%3D0%200%0D%0Aa%3Dsendrecv%0D%0Am%3Daudio%202236%20RTP/AVP%209%200%208%2018%20101%0D%0Aa%3Drtpmap%3A9%20G722/8000%0D%0Aa%3Drtpmap%3A0%20PCMU/8000%0D%0Aa%3Drtpmap%3A8%20PCMA/8000%0D%0Aa%3Drtpmap%3A18%20G729/8000%0D%0Aa%3Drtpmap%3A101%20telephone-event/8000%0D%0A</switch_r_sdp>
+ <remote_media_ip>10.0.1.240</remote_media_ip>
+ <remote_media_port>2236</remote_media_port>
+ <read_codec>G722</read_codec>
+ <read_rate>16000</read_rate>
+ <write_codec>G722</write_codec>
+ <write_rate>16000</write_rate>
+ <local_media_ip>10.0.1.250</local_media_ip>
+ <local_media_port>2236</local_media_port>
+ <endpoint_disposition>ANSWER</endpoint_disposition>
+ <fifo_target>7fa22ce4-9487-4501-965e-7e062792f6c3</fifo_target>
+ <fifo_status>DONE</fifo_status>
+ <fifo_timestamp>2007-12-20%2007%3A20%3A20</fifo_timestamp>
+ <use_profile>nat</use_profile>
+ <numbering_plan>US</numbering_plan>
+ <default_gateway>asterlink.com</default_gateway>
+ <default_area_code>918</default_area_code>
+ <user_name>default</user_name>
+ <domain_name>10.0.1.250</domain_name>
+ <dialed_ext>1002</dialed_ext>
+ <call_timeout>130</call_timeout>
+ <hangup_after_bridge>true</hangup_after_bridge>
+ <left_hanging_extension>5900</left_hanging_extension>
+ <continue_on_fail>true</continue_on_fail>
+ <dialed_user>1002</dialed_user>
+ <dialed_domain>10.0.1.250</dialed_domain>
+ <switch_m_sdp>v%3D0%0D%0Ao%3D1002%208000%208000%20IN%20IP4%2010.0.1.5%0D%0As%3DSIP%20Call%0D%0Ac%3DIN%20IP4%2010.0.1.5%0D%0At%3D0%200%0D%0Am%3Daudio%205004%20RTP/AVP%200%20101%0D%0Aa%3Drtpmap%3A0%20PCMU/8000%0D%0Aa%3Drtpmap%3A101%20telephone-event/8000%0D%0Aa%3Dfmtp%3A101%200-11%0D%0Aa%3Dptime%3A20%0D%0A</switch_m_sdp>
+ <originate_disposition>SUCCESS</originate_disposition>
+ <bridge_channel>sofia/default/1002</bridge_channel>
+ <bridge_uuid>cf150cd3-af80-49b1-90c9-da7484e9b033</bridge_uuid>
+ <signal_bond>cf150cd3-af80-49b1-90c9-da7484e9b033</signal_bond>
+ <hangup_cause>NORMAL_CLEARING</hangup_cause>
+ <start_stamp>2007-12-20%2007%3A21%3A28</start_stamp>
+ <answer_stamp>2007-12-20%2007%3A19%3A34</answer_stamp>
+ <end_stamp>2007-12-20%2007%3A21%3A32</end_stamp>
+ <start_epoch>1198156888</start_epoch>
+ <start_uepoch>1198156888447769</start_uepoch>
+ <answer_epoch>1198156774</answer_epoch>
+ <answer_uepoch>1198156774875311</answer_uepoch>
+ <end_epoch>1198156892</end_epoch>
+ <end_uepoch>1198156892250109</end_uepoch>
+ <last_app>bridge</last_app>
+ <last_arg>USER/1002%4010.0.1.250</last_arg>
+ <caller_id>%22Brian%20West%22%20%3C1006%3E</caller_id>
+ <duration>4</duration>
+ <billsec>118</billsec>
+ <mduration>3803</mduration>
+ <billmsec>117375</billmsec>
+ <uduration>3802340</uduration>
+ <billusec>117374798</billusec>
+ </variables>
+ <app_log>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/5900"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="fifo" app_data="5900@10.0.1.250 in undef local_stream://moh"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1009"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1009/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1009/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1009@10.0.1.250"></application>
+ <application app_name="playback" app_data="local_stream://moh"></application>
+ <application app_name="set" app_data="use_profile=nat"></application>
+ <application app_name="set_user" app_data="default@10.0.1.250"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/1006/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="db" app_data="insert/last_dial/1006/1002"></application>
+ <application app_name="db" app_data="insert/last_dial/global/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/1002/1006"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/1002/f1d9f5e9-1ccd-4df7-876e-adf6e3602361"></application>
+ <application app_name="bridge" app_data="USER/1002@10.0.1.250"></application>
+ </app_log>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>cf150cd3-af80-49b1-90c9-da7484e9b033</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>cf150cd3-af80-49b1-90c9-da7484e9b033</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156888447769</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>1198156892250109</hangup_time>
+ <transfer_time>0</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>4b8d3f9d-0bbd-48b3-b0e0-3a8eb9ead4d7</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>4b8d3f9d-0bbd-48b3-b0e0-3a8eb9ead4d7</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156885001861</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156888447769</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>c68e2ba8-12b8-417f-a919-4caa5437bd9a</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>c68e2ba8-12b8-417f-a919-4caa5437bd9a</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156880578019</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156885001861</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>073c1939-561c-466a-b652-a39ca2aae77a</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>073c1939-561c-466a-b652-a39ca2aae77a</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156876612260</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156880578019</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>2a3db176-a105-4a44-92f2-6e3ac7048d5b</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>2a3db176-a105-4a44-92f2-6e3ac7048d5b</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156839911708</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156876612260</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>a36354f8-4804-4f76-805b-fa0a0ca8903e</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>a36354f8-4804-4f76-805b-fa0a0ca8903e</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156833485893</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156839911708</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>d01dbfc2-d692-48b8-bb10-8b62127f43cd</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>d01dbfc2-d692-48b8-bb10-8b62127f43cd</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156820268791</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156833485893</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="5900">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="fifo" app_data="5900@10.0.1.250 in undef local_stream://moh"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>5900</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originator>
+ <originator_caller_profile>
+ <username>1009</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1009</caller_id_number>
+ <network_addr>10.0.1.28</network_addr>
+ <rdnis></rdnis>
+ <destination_number>**park+5900</destination_number>
+ <uuid>7fa22ce4-9487-4501-965e-7e062792f6c3</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009@10.0.1.250:5060</chan_name>
+ </originator_caller_profile>
+ </originator>
+ </caller_profile>
+ <times>
+ <created_time>1198156812978484</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156820268791</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>22b5e34f-d334-40fe-b7e7-9ca54b2a7160</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>22b5e34f-d334-40fe-b7e7-9ca54b2a7160</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156806464364</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156812978484</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>6070e39b-71a4-4872-a851-a8c9ac45488d</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>6070e39b-71a4-4872-a851-a8c9ac45488d</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156801337500</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156806464364</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>a95fdc9d-1f64-4962-acb8-a26507c9d224</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>a95fdc9d-1f64-4962-acb8-a26507c9d224</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156797434745</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156801337500</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>a5dfe2cc-7754-4a82-a645-231a15decb3f</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>a5dfe2cc-7754-4a82-a645-231a15decb3f</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156792878476</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156797434745</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>fec1ae9e-546c-4cc5-b22a-55dc997a0e35</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>fec1ae9e-546c-4cc5-b22a-55dc997a0e35</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156788685547</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156792878476</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>4aa48010-4595-461c-936a-179f9fb4d1f3</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>4aa48010-4595-461c-936a-179f9fb4d1f3</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156784428990</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156788685547</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1002" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1002"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1002 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1002</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>545f4ba0-5978-4b41-892f-aca78f174a91</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1002</destination_number>
+ <uuid>545f4ba0-5978-4b41-892f-aca78f174a91</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1002</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156778376001</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156784428990</transfer_time>
+ </times>
+ </callflow>
+ <callflow dialplan="XML">
+ <extension name="global" number="1009" current_app="answer">
+ <application app_name="set" app_data="use_profile=${cond(${is_lan_addr(10.0.1.250)} == yes ? nat : default)}"></application>
+ <application app_name="set_user" app_data="default@${domain}"></application>
+ <application app_name="info" app_data=""></application>
+ <application app_name="db" app_data="insert/spymap/${caller_id_number}/${uuid}"></application>
+ <application app_name="db" app_data="insert/last_dial/${caller_id_number}/${destination_number}"></application>
+ <application app_name="db" app_data="insert/last_dial/global/${uuid}"></application>
+ <application app_name="set" app_data="dialed_ext=1009"></application>
+ <application app_name="ring_ready" app_data=""></application>
+ <application app_name="set" app_data="call_timeout=130"></application>
+ <application app_name="set" app_data="hangup_after_bridge=true"></application>
+ <application app_name="set" app_data="left_hanging_extension=5900"></application>
+ <application app_name="set" app_data="continue_on_fail=true"></application>
+ <application app_name="db" app_data="insert/call_return/${dialed_ext}/${caller_id_number}"></application>
+ <application app_name="db" app_data="insert/last_dial_ext/${dialed_ext}/${uuid}"></application>
+ <application app_name="bridge" app_data="USER/${dialed_ext}@10.0.1.250"></application>
+ <application last_executed="true" app_name="answer" app_data=""></application>
+ <application app_name="sleep" app_data="1000"></application>
+ <application app_name="voicemail" app_data="default 10.0.1.250 ${dialed_ext}"></application>
+ <application app_name="transfer" app_data="1009 enum"></application>
+ </extension>
+ <caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Brian West</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>1009</destination_number>
+ <uuid>f1d9f5e9-1ccd-4df7-876e-adf6e3602361</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1006@10.0.1.250:5060</chan_name>
+ <originatee>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>efb71d06-c38c-4af9-a4bd-c5a23b501689</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ <originatee_caller_profile>
+ <username>1006</username>
+ <dialplan>XML</dialplan>
+ <caller_id_name>Extension 1006</caller_id_name>
+ <ani></ani>
+ <aniii></aniii>
+ <caller_id_number>1006</caller_id_number>
+ <network_addr>10.0.1.240</network_addr>
+ <rdnis></rdnis>
+ <destination_number>10.0.1.250/1009</destination_number>
+ <uuid>efb71d06-c38c-4af9-a4bd-c5a23b501689</uuid>
+ <source>mod_sofia</source>
+ <context>default</context>
+ <chan_name>sofia/default/1009</chan_name>
+ </originatee_caller_profile>
+ </originatee>
+ </caller_profile>
+ <times>
+ <created_time>1198156772841382</created_time>
+ <answered_time>1198156774875311</answered_time>
+ <hangup_time>0</hangup_time>
+ <transfer_time>1198156778376001</transfer_time>
+ </times>
+ </callflow>
+</cdr>
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/.htaccess
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/.htaccess (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/.htaccess) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/.htaccess (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/.htaccess 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+<files "*">
+AuthUserFile /www/default/htdocs/xml-curl/.htpasswd
+AuthName "TRXTel"
+AuthType basic
+Require valid-user
+</files>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/.htpasswd
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/.htpasswd (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/.htpasswd) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/.htpasswd (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/.htpasswd 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+switch1:X3ebVz1FFcmLc
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/README
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/README (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,56 @@
+This is an example that will respond to mod_xml_curl requests for information.
+It uses modules, which are contained in the modules subdirectory. If a module
+(any file ending in .php) is in the dir it will be loaded. If it registers
+to handle a specific type of xml_curl request, that will be passed to the
+function named. If you dont have a module for a specific type of data, for
+example directory, then a 404 will be returned to FreeSWITCH.
+
+The module nature allows you to more easily turn on/off different components.
+
+Its a template based system, which relies on someone authenticating, such as
+with .htaccess. Their username is used in this default example for their
+configuration files. This allows for multiple switches to identify themselves
+uniquely, as well as giving you the ability to have different templates for
+different switches.
+
+
+
+
+
+If you do configuration via mod_xml_curl you only need to load and configure
+mod_xml_curl from freeswitch.xml, all other modules and their configs do not
+need to be present. I do suggest that you load loggers before xml_curl though.
+
+If you load modules *before* loading xml_curl they will be loaded from the
+static xml file, only *after* loading xml_curl will stuff start to be pulled
+from the webserver. Seems logical but some people dont think about it and
+wonder why it doesnt work.
+
+
+
+freeswitch.xml in this repository is a minimal config file, which works as of
+r5500 with what is in this directory.
+
+
+DEFAULT PASSWORDS
+htaccess switch1:password (for webstuff)
+SIP/etc testacct:demopw
+
+you will most likely have to edit the path to .htpasswd in the .htaccess
+file or it wont work properly.
+
+
+PREREQUISITES
+You will need to get smarty from http://smarty.php.net to make this work
+
+If you install it globally, edit your php.ini to make the Smarty/libs dir as
+part of the search path, otherwise add the following to curlrouting.php near
+the other ini_set line. Adjust it to suit your particular setup.
+
+ini_set("include_path",".:/usr/local/lib/php:/usr/share/php:./Smarty-2.6.18/libs");
+
+
+
+You also must create a directory named templates_c where you install this, its
+a smarty requirement for caching templates. This directory *must* be writable
+by the webserver or Smarty will not properly operate.
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/curlrouting.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/curlrouting.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/curlrouting.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/curlrouting.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/curlrouting.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+Header("Content-type: text/plain");
+
+$callBacks = Array();
+ini_set("magic_quotes_gpc","Off");
+include_once('Smarty.class.php');
+
+// load the modules
+$dh = @opendir("./modules") or die("Unable to open modules dir");
+while ($file = readdir($dh)) {
+ if(preg_match("/.*\.php$/i",$file)) {
+ error_log("loading module $file");
+ include_once("modules/$file");
+ }
+}
+
+
+if(isset($_POST['section'])) {
+ error_log("processing $_POST[section]");
+ if(isset($callBacks[$_POST['section']])) {
+ if(call_user_func($callBacks[$_POST['section']])==TRUE) {
+ exit;
+ }
+ }
+}
+error_log("No module to process xml_curl for $_POST[section]");
+Header("HTTP/1.0 404 Not Found");
+echo "Not Found";
+exit;
+
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/freeswitch.xml
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/freeswitch.xml (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/freeswitch.xml) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/freeswitch.xml (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/freeswitch.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+
+ <section name="configuration" description="Various Configuration">
+
+ <configuration name="switch.conf" description="Modules">
+ <settings>
+ <!--Most channels to allow at once -->
+ <param name="max-sessions" value="1000"/>
+ <!--RTP port range -->
+ <!--<param name="rtp-start-port" value="16384"/>-->
+ <!--<param name="rtp-end-port" value="32768"/>-->
+ </settings>
+ <!--Any variables defined here will be available in every channel, in the dialplan etc -->
+ <variables>
+ <variable name="uk-ring" value="%(400,200,400,450);%(400,2200,400,450)"/>
+ <variable name="us-ring" value="%(2000, 4000, 440.0, 480.0)"/>
+ <variable name="bong-ring" value="v=4000;>=0;+=2;#(60,0);v=2000;%(940,0,350,440)"/>
+ </variables>
+ </configuration>
+
+ <configuration name="modules.conf" description="Modules">
+ <modules>
+ <!-- Loggers (I'd load these first) -->
+ <load module="mod_console"/>
+ <!-- <load module="mod_syslog"/> -->
+
+ <!-- you need to load this now and everything else comes from curl -->
+ <load module="mod_xml_curl"/>
+ </modules>
+ </configuration>
+
+ <configuration name="console.conf" description="Console Logger">
+ <!-- pick a file name, a function name or 'all' -->
+ <!-- map as many as you need for specific debugging -->
+ <mappings>
+ <!-- <param name="log_event" value="DEBUG"/> -->
+ <param name="all" value="DEBUG"/>
+ </mappings>
+ </configuration>
+
+ <configuration name="syslog.conf" description="Syslog Logger">
+ <!-- SYSLOG -->
+ <!-- emerg - system is unusable -->
+ <!-- alert - action must be taken immediately -->
+ <!-- crit - critical conditions -->
+ <!-- err - error conditions -->
+ <!-- warning - warning conditions -->
+ <!-- notice - normal, but significant, condition -->
+ <!-- info - informational message -->
+ <!-- debug - debug-level message -->
+ <settings>
+ <param name="ident" value="freeswitch"/>
+ <param name="facility" value="user"/>
+ <param name="format" value="${time} - ${message}"/>
+ <param name="level" value="debug,info,warning-alert"/>
+ </settings>
+ </configuration>
+
+ <configuration name="xml_curl.conf" description="cURL XML Gateway">
+ <bindings>
+ <binding name="example">
+ <!-- The url to a gateway cgi that can generate xml similar to
+ what's in this file only on-the-fly (leave it commented if you dont
+ need it) -->
+ <!-- one or more |-delim of configuration|directory|dialplan -->
+ <param name="gateway-url" value="http://localhost/xml-curl/curlrouting.php" bindings="dialplan|directory|configuration|phrases"/>
+ <!-- set this to provide authentication credentials to the server -->
+ <param name="gateway-credentials" value="switch1:password"/>-->
+ </binding>
+ </bindings>
+ </configuration>
+
+ </section>
+
+</document>
+
+
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/modules (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/modules)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/configuration.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/configuration.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/modules/configuration.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/modules/configuration.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/modules/configuration.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,52 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+function configuration()
+{
+ global $_SERVER;
+ global $_POST;
+
+ $smarty = new Smarty();
+ $template = $_POST['key_value'].".tpl";
+
+ // only stuff that we dynamically set gets done here, if its not here the file is sent as is
+ switch($_POST['key_value']) {
+ case "conference.conf":
+ // simulate data from a database, perhaps a table with 3 columns did,value,args
+ $params['pin'] = '1234';
+ $params['anounce-count'] = '2';
+ $params['max-mmebers'] = '15';
+ $params['energy-level'] = '300';
+ $params['member-flags'] = 'waste';
+
+ $digits['0'] = 'event';
+ $digits['1'] = 'event';
+ $digits['2'] = 'event';
+ $digits['3'] = 'event';
+ $digits['4'] = 'event';
+ $digits['5'] = 'event';
+ $digits['6'] = 'event';
+ $digits['7'] = 'event';
+ $digits['8'] = 'event';
+ $digits['9'] = 'event';
+ $digits['#'] = 'event';
+ $digits['*'] = 'event';
+
+ $smarty->assign('CONFNAME',$_POST['conf_name']);
+ $smarty->assign('digits',$digits);
+ $smarty->assign('params',$params);
+ }
+
+ if($smarty->template_exists($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/configuration/".$template)) {
+ error_log("Issuing configuration $_POST[key_value]");
+ $smarty->display($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/configuration/".$template);
+ } else {
+ error_log("Unable to locate configuration file " . $_POST['key_value'] . " for " . $_SERVER['REMOTE_USER']);
+ error_log("template: " . $_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/configuration/" . $template);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+// register the callback
+$callBacks['configuration']='configuration';
+
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/dialplan.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/dialplan.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/modules/dialplan.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/modules/dialplan.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/modules/dialplan.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,35 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+function dialplan()
+{
+ global $_SERVER;
+ global $_POST;
+
+
+ // create a new smarty object
+ $smarty = new Smarty();
+ $template = 'fail.tpl';
+
+
+ // see if they authenticated via .htaccess
+ if(isset($_SERVER['REMOTE_USER']) && $_SERVER['REMOTE_USER']!="") {
+ // we might check a database for the route, but in this example we hardcode it
+ $template = 'frompstn.tpl'; // one can exist for each profile or channel type or ...
+
+ // simulate a database query for the dialplan
+ $ACTION[]=Array('answer','');
+ $ACTION[]=Array('phrase','spell,abcdef');
+ $ACTION[]=Array('javascript','somethingcool.js');
+ $ACTION[]=Array('bridge','sofia/external/$_POST[destination_number]@myprovider.tld');
+ $smarty->assign('ACTION',$ACTION);
+
+ } // end - they were logged in
+ $smarty->display($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/dialplan/".$template);
+
+ return TRUE;
+}
+
+
+// register the callback
+$callBacks['dialplan']='dialplan';
+
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/directory.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/directory.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/modules/directory.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/modules/directory.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/modules/directory.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,41 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+
+/* generally we get the following information
+
+ [section] => directory
+ [tag_name] => domain
+ [key_name] => name
+ [key_value] => 192.168.153.128
+ [user] => testacct
+ [domain] => 192.168.153.128
+ [ip] => 192.168.153.1
+
+*/
+
+function directory()
+{
+ global $_SERVER;
+ global $_POST;
+
+
+ // create a new smarty object
+ $smarty = new Smarty();
+ $template = $_POST['domain'] .'.tpl';
+
+ // simulate a database query
+ $smarty->assign('USER','testacct');
+ $smarty->assign('PASSWORD','demopw');
+ $smarty->assign('DOMAIN',$_POST['domain']);
+
+
+ $smarty->display($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/directory/".$template);
+ error_log($smarty->fetch($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/directory/".$template));
+ error_log(print_r($_POST,true));
+ return TRUE;
+}
+
+
+// register the callback
+$callBacks['directory']='directory';
+
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/phrases.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/modules/phrases.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/modules/phrases.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/modules/phrases.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/modules/phrases.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil; -*-
+function phrases()
+{
+ global $_SERVER;
+ global $_POST;
+
+
+ // create a new smarty object
+ $smarty = new Smarty();
+ $template = 'lang_'. $_POST['lang'] .'.tpl';
+
+ $smarty->display($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/templates/".$_SERVER['REMOTE_USER']."/phrases/".$template);
+ return TRUE;
+}
+
+
+// register the callback
+$callBacks['phrases']='phrases';
+
+?>
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates)
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1 (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1)
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/alsa.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/alsa.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/alsa.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/alsa.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/alsa.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="alsa.conf" description="Soundcard Endpoint">
+ <settings>
+ <!--Default dialplan and caller-id info -->
+ <param name="dialplan" value="XML"/>
+ <param name="cid-name" value="N800 Alsa"/>
+ <param name="cid-num" value="5555551212"/>
+
+ <!--audio sample rate and interval -->
+ <param name="sample-rate" value="8000"/>
+ <param name="codec-ms" value="20"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+ <configuration name="conference.conf" description="Audio Conference">
+ <!-- Profiles are collections of settings you can reference by name. -->
+ <profiles>
+ <profile name="default">
+ <!-- Domain (for presence) -->
+ <param name="domain" value="freeswitch.org"/>
+ <!-- Sample Rate-->
+ <param name="rate" value="8000"/>
+ <!-- Number of milliseconds per frame -->
+ <param name="interval" value="20"/>
+
+ <!-- TTS Engine to use -->
+ <param name="tts-engine" value="cepstral"/>
+ <!-- TTS Voice to use -->
+ <param name="tts-voice" value="david"/>
+
+ <!-- If TTS is enabled all audio-file params not beginning with -->
+ <!-- '/' or with drive: (i.e. c:) will be considered text to say with TTS -->
+
+ <!-- File to play to acknowledge succees -->
+ <param name="ack-sound" value="/sounds/{$CONFNAME}/beep.raw"/>
+ <!-- File to play to acknowledge failure -->
+ <param name="nack-sound" value="/sounds/{$CONFNAME}/beeperr.raw"/>
+ <!-- File to play to acknowledge muted -->
+ <param name="muted-sound" value="/sounds/{$CONFNAME}/conf-muted.raw"/>
+ <!-- File to play to acknowledge unmuted -->
+ <param name="unmuted-sound" value="/sounds/{$CONFNAME}/conf-unmuted.raw"/>
+ <!-- File to play if you are alone in the conference -->
+ <param name="alone-sound" value="/sounds/{$CONFNAME}/conf-onlyperson.raw"/>
+ <!-- File to play when you join the conference -->
+ <param name="enter-sound" value="/sounds/{$CONFNAME}/conf-enter.raw"/>-->
+ <!-- File to play when you leave the conference -->
+ <param name="exit-sound" value="/sounds/{$CONFNAME}/conf-exit.raw"/>-->
+ <!-- File to play when you ae ejected from the conference -->
+ <param name="kicked-sound" value="/sounds/{$CONFNAME}/conf-kicked.raw"/>
+ <!-- File to play when the conference is locked -->
+ <param name="locked-sound" value="/sounds/{$CONFNAME}/conf-locked.raw"/>
+ <!-- File to play to prompt for a pin -->
+ <param name="pin-sound" value="/sounds/{$CONFNAME}/conf-getpin.raw"/>
+ <!-- File to play to when the pin is invalid -->
+ <param name="bad-pin-sound" value="/sounds/{$CONFNAME}/conf-invalidpin.raw"/>
+ <param name="max-members-sound" value="/sounds/{$CONFNAME}/conf-full.raw"/>
+
+
+
+{foreach key=k item=v from=$params}
+ <param name="{$k}" value="{$v}"/>
+{/foreach}
+
+ <!-- Default Caller ID Name for outbound calls -->
+ <param name="caller-id-name" value="FreeSWITCH"/>
+ <!-- Default Caller ID Number for outbound calls -->
+ <param name="caller-id-number" value="1234567890"/>
+ <param name="caller-controls" value="mykeys"/>
+ </profile>
+ </profiles>
+ <caller-controls>
+ <group name="mykeys">
+{foreach key=k item=v from=$digits}
+ <control action="{$v}" digits="{$k}"/>
+{/foreach}
+ </group>
+ </caller-controls>
+
+ </configuration>
+ </section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/console.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/console.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/console.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/console.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/console.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="console.conf" description="Console Logger">
+ <!-- pick a file name, a function name or 'all' -->
+ <!-- map as many as you need for specific debugging -->
+ <mappings>
+ <!-- <param name="log_event" value="DEBUG"/> -->
+ <param name="all" value="DEBUG"/>
+ </mappings>
+ <settings>
+ <!-- uncomment for color logging (for debugging) -->
+ <!--<param name="colorize" value="true"/>-->
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/default_context.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/default_context.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/default_context.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/default_context.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/default_context.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,185 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<!-- Valid fields in conditions: -->
+<!-- "dialplan, caller_id_name, ani, ani2, caller_id_number, -->
+<!-- rdnis, destination_number, uuid, source, context, chan_name" -->
+
+<!-- *NOTE* The special context name 'any' will match any context -->
+<context name="default">
+ <extension name="556"> <!-- demo phrases -->
+ <condition field="destination_number" expression="^556$">
+ <action application="answer"/>
+ <action application="sleep" data="1000"/>
+ <action application="phrase" data="spell,${caller_id_name}"/>
+ <action application="phrase" data="spell-phonetic,${caller_id_name}"/>
+ <action application="phrase" data="timespec,12:45:15"/>
+ <action application="phrase" data="saydate,0"/>
+ <action application="phrase" data="msgcount,130"/>
+ <action application="phrase" data="ip-addr,66.250.68.194"/>
+ <action application="phrase" data="saydate,$strepoch(2006-03-23 7:23)"/>
+ <!--<action application="phrase" data="timeleft,3:30"/>-->
+ </condition>
+ </extension>
+
+ <extension name="9193">
+ <condition field="destination_number" expression="^9193$">
+ <action application="set" data="bridge_pre_execute_bleg_app=soundtouch"/>
+ <!-- send or recv indicates which direction the dtmf is parsed from
+ since this example is send and it's being called on the b leg
+ the application will intercept the dtmf from being sent to the b leg
+ a.k.a. by the dtmf of the A leg.
+ if it were 'recv' then it would be parsed when the dtmf was
+ received *from* the b leg so it could control itself.
+ The optional keywords "read" and "write" will also change the stream replaced
+ -->
+ <action application="set" data="bridge_pre_execute_bleg_data=send -4s"/>
+ <action application="bridge" data="sofia/$${domain}/foo"/>
+ </condition>
+ </extension>
+
+
+
+ <extension name="9192">
+ <condition field="destination_number" expression="^9192$">
+ <!-- Maintain Buffer of 128k of audio (default is 64k) -->
+ <action application="set" data="stream_prebuffer=131072"/>
+ <!-- Play a stream -->
+ <action application="playback" data="shout://mp3.ihets.org/wfyihd132"/>
+ </condition>
+ </extension>
+
+
+ <!-- Example extension for require auth per-call. -->
+ <extension name="9191">
+ <!-- Match the destination digits of 9191 -->
+ <condition field="destination_number" expression="^9191$"/>
+ <!-- Make sure the sip_authorized variable is set (set on all authed calls)
+ If it isn't, then send an auth challange.
+ -->
+ <condition field="${sip_authorized}" expression="true">
+ <anti-action application="reject" data="407"/>
+ </condition>
+
+ <!-- If you made it here all is well and the call is authed.
+ Do whatever you wish.
+ -->
+ <condition>
+ <action application="playback" data="/tmp/itworked.wav"/>
+ </condition>
+ </extension>
+
+ <extension name="tollfree">
+ <condition field="destination_number" expression="^(18(0{2}|8{2}|7{2}|6{2})\d{7})$">
+ <action application="enum" data="$1"/>
+ <action application="bridge" data="${enum_auto_route}"/>
+ </condition>
+ </extension>
+
+ <!-- Call the FreeSWITCH conference via SIP -->
+ <!--<extension name="FreeSWITCH Conference SIP">-->
+ <!--<condition field="destination_number" expression="^888$">-->
+ <!--<action application="bridge" data="sofia/$${sip_profile}/888@conference.freeswitch.org"/>-->
+ <!--</condition>-->
+ <!--</extension> -->
+
+ <!-- Call the FreeSWITCH conference via IAX -->
+ <!--<extension name="FreeSWITCH Conference IAX">-->
+ <!--<condition field="destination_number" expression="^8888$">-->
+ <!--<action application="bridge" data="iax/guest@conference.freeswitch.org/888"/>-->
+ <!--</condition>-->
+ <!--</extension>-->
+
+ <extension name="set_codec" continue="true">
+ <condition field="source" expression="mod_portaudio">
+ <action application="export" data="absolute_codec_string=$${global_codec_prefs}"/>
+ <action application="export" data="nolocal:jitterbuffer_msec=180"/>
+ </condition>
+ </extension>
+
+
+ <extension name="testmusic">
+ <condition field="destination_number" expression="^1234$">
+ <!-- Request a certain tone/file to be played while you wait for the call to be answered-->
+ <action application="set" data="ringback=${us-ring}"/>
+ <!--<action application="set" data="ringback=/home/ring.wav"/>-->
+ <!--<action application="set" data="jitterbuffer_msec=180"/>-->
+ <action application="bridge" data="sofia/$${sip_profile}/1234@conference.freeswitch.org"/>
+ </condition>
+ </extension>
+
+ <!-- Enter an existing conference -->
+ <extension name="1000">
+ <condition field="destination_number" expression="^1000$">
+ <action application="conference" data="freeswitch"/>
+ </condition>
+ </extension>
+
+ <!-- Start a dynamic conference and call someone at the same time -->
+ <extension name="2000">
+ <condition field="destination_number" expression="^2000$">
+ <action application="conference" data="bridge:mydynaconf:sofia/$${sip_profile}/1234@conference.freeswitch.org"/>
+ </condition>
+ </extension>
+
+ <!-- extensions starting with 4, all the numbers after 4 form a numeric filename -->
+ <!-- continue="true" means keep looking for more extensions to match -->
+ <!-- *NOTE* The entire dialplan is parsed ONCE when the call starts -->
+ <!-- so any call info acquired after the various actions cannot -->
+ <!-- be taken into consideration. -->
+
+ <!-- The first match will play a beep and the second one plays -->
+ <!-- the desired file. This is for demo purposes both actions -->
+ <!-- could have been under the same <extension> tag as well. -->
+ <extension name="playsound1" continue="true">
+ <condition field="source" expression="mod_sofia"/>
+ <condition field="destination_number" expression="^4(\d+)">
+ <action application="playback" data="/var/sounds/beep.gsm"/>
+ </condition>
+ </extension>
+
+ <extension name="playsound2">
+ <condition field="source" expression="mod_sofia"/>
+ <condition field="destination_number" expression="^4(\d+)">
+ <action application="playback" data="/root/$1.raw"/>
+ </condition>
+ </extension>
+
+ <!-- send everything with a certian RDNIS to Wanpipe ISDN -->
+ <extension name="To PRI">
+ <condition field="rdnis" expression="8881231234"/>
+ <condition field="destination_number" expression="(.*)">
+ <action application="bridge" data="wanpipe/pri/a/a/$1"/>
+ </condition>
+ </extension>
+
+ <!-- Call *MUST* originate from mod_iax and also be dialing ext 9999-->
+ <extension name="9999">
+ <condition field="source" expression="mod_iax"/>
+ <condition field="destination_number" expression="9999">
+ <action application="playback" data="/var/sounds/beep.gsm"/>
+ </condition>
+ </extension>
+
+ <!--This extension will start a conference and invite several people upon entering -->
+ <extension name="0911">
+ <condition field="destination_number" expression="0911">
+
+ <!--These params effect the outcalls made once you join-->
+ <action application="set" data="conference_auto_outcall_caller_id_name=pissed off boss"/>
+ <action application="set" data="conference_auto_outcall_caller_id_number=0911"/>
+ <action application="set" data="conference_auto_outcall_timeout=60"/>
+ <action application="set" data="conference_auto_outcall_flags=none"/>
+ <action application="set" data="conference_auto_outcall_announce=say:You have been called into an emergency conference"/>
+
+ <!--Add as many of these as you need, These are the people you are going to call-->
+ <action application="conference_set_auto_outcall" data="sofia/gateway/mygateway/12121231234"/>
+ <action application="conference_set_auto_outcall" data="sofia/$${domain}/1234@somewhere.com"/>
+
+ <action application="conference" data="cool@default"/>
+ </condition>
+ </extension>
+
+</context>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="dialplan_directory.conf" description="Dialplan Directory">
+ <settings>
+ <param name="directory-name" value="ldap"/>
+ <param name="host" value="ldap.freeswitch.org"/>
+ <param name="dn" value="cn=Manager,dc=freeswitch,dc=org"/>
+ <param name="pass" value="test"/>
+ <param name="base" value="dc=freeswitch,dc=org"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="dingaling.conf" description="XMPP Jingle Endpoint">
+ <settings>
+ <param name="debug" value="0"/>
+ <param name="codec-prefs" value="PCMU"/>
+ </settings>
+
+ <!-- *NOTE* change <x-profile></x-profile> to <profile></profile> to enable -->
+
+ <!-- Client Profile (Original mode) -->
+ <x-profile type="client">
+ <param name="name" value="$${xmpp_client_profile}"/>
+ <param name="login" value="myjid@myserver.com/talk"/>
+ <param name="password" value="mypass"/>
+ <param name="dialplan" value="XML"/>
+ <param name="message" value="Jingle all the way"/>
+ <param name="rtp-ip" value="$${bind_server_ip}"/>
+ <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip"/> -->
+ <param name="auto-login" value="true"/>
+ <!-- SASL "plain" or "md5" -->
+ <param name="sasl" value="plain"/>
+ <!-- if the server where the jabber is hosted is not the same as the one in the jid -->
+ <!--<param name="server" value="alternate.server.com"/>-->
+ <!-- Enable TLS or not -->
+ <param name="tls" value="true"/>
+ <!-- disable to trade async for more calls -->
+ <param name="use-rtp-timer" value="true"/>
+ <!-- default extension (if one cannot be determined) -->
+ <param name="exten" value="888"/>
+ <!-- VAD choose one -->
+ <!-- <param name="vad" value="in"/> -->
+ <!-- <param name="vad" value="out"/> -->
+ <param name="vad" value="both"/>
+ <!--<param name="avatar" value="/path/to/tiny.jpg"/>-->
+ </x-profile>
+
+ <!-- Component (Server to Server Login) -->
+ <x-profile type="component">
+ <param name="name" value="$${xmpp_server_profile}"/>
+ <param name="password" value="secret"/>
+ <param name="dialplan" value="XML"/>
+ <param name="rtp-ip" value="$${bind_server_ip}"/>
+ <param name="server" value="jabber.server.org:5347"/>
+ <!-- disable to trade async for more calls -->
+ <param name="use-rtp-timer" value="true"/>
+ <!-- "_auto_" means the extension will be automaticly set to the called jid -->
+ <param name="exten" value="_auto_"/>
+ <!--<param name="vad" value="both"/>-->
+ <!--<param name="avatar" value="/path/to/tiny.jpg"/>-->
+ <!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+
+ </x-profile>
+
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/directory.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/directory.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/directory.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/directory.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/directory.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<!--the domain or ip (the right hand side of the @ in the addr-->
+<domain name="$${domain}">
+ <!--the user id (the left hand side of the @ in the addr-->
+ <user id="stpeter">
+ <!-- Outbound Registrations Related to this user -->
+ <gateways>
+ <!--<gateway name="asterlink.com">-->
+ <!--/// account username *required* ///-->
+ <!--<param name="username" value="cluecon"/>-->
+ <!--/// auth realm: *optional* same as gateway name, if blank ///-->
+ <!--<param name="realm" value="asterlink.com"/>-->
+ <!--/// domain to use in from: *optional* same as realm, if blank ///-->
+ <!--<param name="from-domain" value="asterlink.com"/>-->
+ <!--/// account password *required* ///-->
+ <!--<param name="password" value="2007"/>-->
+ <!--/// replace the INVITE from user with the channel's caller-id ///-->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--/// extension for inbound calls: *optional* same as username, if blank ///-->
+ <!--<param name="extension" value="cluecon"/>-->
+ <!--/// proxy host: *optional* same as realm, if blank ///-->
+ <!--<param name="proxy" value="asterlink.com"/>-->
+ <!--/// expire in seconds: *optional* 3600, if blank ///-->
+ <!--<param name="expire-seconds" value="60"/>-->
+ <!--/// do not register ///-->
+ <!--<param name="register" value="false"/>-->
+ <!--How many seconds before a retry when a failure or timeout occurs -->
+ <!--<param name="retry_seconds" value="30"/>-->
+ <!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--</gateway>-->
+ </gateways>
+ <params>
+ <!-- omit password for authless registration -->
+ <param name="password" value="mypass"/>
+ <!-- optionally use this instead if you want to store the hash of user:domain:pass-->
+ <!--<param name="a1-hash" value="c6440e5de50b403206989679159de89a"/>-->
+ </params>
+ <variables>
+ <!--all variables here will be set on all inbound calls that originate from this user -->
+ <variable name="testing" value="this"/>
+ <!--<variable name="force-contact" value="nat-connectile-dysfunction"/>-->
+ </variables>
+
+ <vcard>
+ <!-- insert optional compliant vcard xml here-->
+ </vcard>
+ </user>
+</domain>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+{literal}
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="enum.conf" description="ENUM Module">
+ <settings>
+ <param name="default-root" value="e164.org"/>
+ </settings>
+
+ <routes>
+ <route service="E2U+SIP" regex="sip:(.*)" replace="sofia/$${sip_profile}/$1"/>
+ <route service="E2U+IAX2" regex="iax2:(.*)" replace="iax/$1"/>
+ <route service="E2U+XMPP" regex="XMPP:(.*)" replace="dingaling/$${xmpp_server_profile}/$1"/>
+ </routes>
+</configuration>
+</section>
+</document>
+{/literal}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="event_multicast.conf" description="Multicast Event">
+ <settings>
+ <param name="address" value="225.1.1.1"/>
+ <param name="port" value="4242"/>
+ <param name="bindings" value="all"/>
+ </settings>
+</configuration>
+
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="event_socket.conf" description="Socket Client">
+ <settings>
+ <param name="listen-ip" value="127.0.0.1"/>
+ <param name="listen-port" value="8021"/>
+ <param name="password" value="ClueCon"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/freeswitch.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/freeswitch.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/freeswitch.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/freeswitch.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/freeswitch.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,160 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <!--#comment
+ All comments starting with #command will be preprocessed and never sent to the xml parser
+ Valid instructions:
+ #include ==> Include another file to this exact point
+ (partial xml should be encased in <include></include> tags)
+ #set ==> Set a global variable (can be expanded during preprocessing with $$ variables)
+ (note the double $$ which denotes preprocessor variables)
+ #comment ==> A general comment such as this
+
+ The preprocessor will compile the full xml document to ${prefix}/log/freeswitch.registry
+ Don't modify it while freeswitch is running cos it is mem mapped in most cases =D
+ -->
+
+ <!-- Preprocessor Variables
+ These are introduced when configuration strings must be consistent across modules.
+ -->
+ <!-- sip_profile
+ Must be a domain name if you are being a registry server; otherwise
+ can be any string.
+ used by: sofia.conf.xml enum.conf.xml default_context.xml directory.xml
+ -->
+ <!--#set "sip_profile=mydomain.com"-->
+ <!-- xmpp_client_profile and xmpp_server_profile
+ xmpp_client_profile can be any string.
+ xmpp_server_profile is appended to "dingaling_" to form the database name
+ containing the "subscriptions" table.
+ used by: dingaling.conf.xml enum.conf.xml
+ -->
+ <!--#set "global_codec_prefs=PCMU@20i"-->
+ <!--#set "xmpp_client_profile=xmppc"-->
+ <!--#set "xmpp_server_profile=xmpps"-->
+ <!-- bind_server_ip
+ Can be an ip address, a dns name, or "auto".
+ This determines an ip address available on this host to bind.
+ If you are separating RTP and SIP traffic, you will want to have
+ use different addresses where this variable appears.
+ Used by: sofia.conf.xml dingaling.conf.xml
+ -->
+ <!--#set "bind_server_ip=auto"-->
+ <!-- external_rtp_ip
+ Used as the public IP address for SDP.
+ Can be an ip address or a string like "stun:stun.server.com"
+ If unspecified, the bind_server_ip value is used.
+ Used by: sofia.conf.xml dingaling.conf.xml
+ -->
+ <!--#set "external_rtp_ip=stun:stun.server.com"-->
+ <!-- server_name
+ A public ip address or DNS name that is used when advertising conference
+ presence or registering sip.
+ Used by: conference.conf.xml
+ -->
+ <!-- outbound_caller_id and outbound_caller_name
+ The caller ID telephone number we should use when calling out.
+ Used by: conference.conf.xml
+ -->
+ <!--#set "outbound_caller_name=FreeSWITCH"-->
+ <!--#set "outbound_caller_id=8777423583"-->
+
+ <section name="configuration" description="Various Configuration">
+ <!--#include "switch.conf.xml"-->
+ <!--#include "modules.conf.xml"-->
+
+ <!-- Order doesn't matter, but for clarity these are in same order as modules.conf.xml.
+ If they aren't loaded by modules.conf.xml, then they are ignored.
+ -->
+ <!-- Loggers -->
+ <!--#include "console.conf.xml"-->
+ <!--#include "syslog.conf.xml"-->
+
+ <!-- Multi-Faceted -->
+ <!--#include "enum.conf.xml"-->
+
+ <!-- XML Interfaces -->
+ <!--#include "xml_rpc.conf.xml"-->
+ <!--#include "xml_cdr.conf.xml"-->
+ <!--#include "xml_curl.conf.xml"-->
+ <!-- none for mod_xml_cdr -->
+
+ <!-- Event Handlers -->
+ <!--#include "cdr.conf.xml"-->
+ <!--#include "event_multicast.conf.xml"-->
+ <!--#include "event_socket.conf.xml"-->
+ <!--#include "xmpp_event.conf.xml"-->
+ <!--#include "zeroconf.conf.xml"-->
+
+ <!-- Directory Interfaces -->
+ <!-- none for mod_ldap; dialplan_directory.conf.xml has ldap connection info -->
+
+ <!-- Endpoints -->
+ <!--#include "dingaling.conf.xml"-->
+ <!--#include "iax.conf.xml"-->
+ <!--#include "portaudio.conf.xml"-->
+ <!--#include "alsa.conf.xml"-->
+ <!--#include "sofia.conf.xml"-->
+ <!--#include "wanpipe.conf.xml"-->
+ <!--#include "woomera.conf.xml"-->
+
+ <!-- Applications -->
+ <!-- none for mod_bridgecall, mod_commands, mod_echo, mod_park, mod_playback -->
+ <!--#include "conference.conf.xml"-->
+ <!-- ivr.conf is used by mod_dptools -->
+ <!--#include "ivr.conf.xml"-->
+
+ <!-- Dialplan Interfaces -->
+ <!--#include "dialplan_directory.conf.xml"-->
+ <!-- mod_dialplan_xml is configured in the separate "dialplan" section. -->
+
+ <!-- Codec Interfaces -->
+ <!-- no configuration needed -->
+ <!-- File Format Interfaces -->
+ <!-- no configuration needed -->
+ <!-- Timers -->
+ <!-- no configuration needed -->
+
+ <!-- Languages -->
+ <!--#include "spidermonkey.conf.xml"-->
+ <!-- none for mod_perl -->
+
+ <!-- ASR /TTS -->
+ <!-- none for mod_cepstral -->
+ <!--#include "rss.conf.xml"-->
+
+ <!-- Say -->
+ <!-- none for mod_say_en -->
+ <!--#include "mod_cdr.conf.xml"-->
+ <!--#include "mod_local_stream.conf.xml"-->
+ </section>
+
+ <section name="dialplan" description="Regex/XML Dialplan">
+ <!--#include "default_context.xml"-->
+ </section>
+
+ <!-- mod_dingaling is reliant on the vcard data in the "directory" section. -->
+ <!-- mod_sofia is reliant on the user data for authorization -->
+ <section name="directory" description="User Directory">
+ <!--#include "directory.xml"-->
+ </section>
+
+ <!-- phrases section (under development still) -->
+ <section name="phrases" description="Speech Phrase Management">
+ <macros>
+ <language name="en" sound_path="/snds" tts_engine="cepstral" tts_voice="david">
+ <!--#include "lang_en.xml"-->
+ </language>
+ <language name="fr" sound_path="/var/sounds/lang/fr/jean" tts_engine="cepstral" tts_voice="jean-pierre">
+ <!--#include "lang_fr.xml"-->
+ </language>
+ </macros>
+ </section>
+
+</document>
+
+
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="iax.conf" description="IAX Configuration">
+ <settings>
+ <param name="debug" value="0"/>
+ <!-- <param name="ip" value="1.2.3.4"/> -->
+ <param name="port" value="4569"/>
+ <param name="dialplan" value="XML"/>
+ <param name="codec-prefs" value="PCMU@20i,PCMA,speex,L16"/>
+ <param name="codec-master" value="us"/>
+ <param name="codec-rates" value="8"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="ivr.conf" description="IVR menus">
+ <menus>
+ <menu name="main"
+ greet-long="/soundfiles/greet-long.wav"
+ greet-short="/soundfiles/greet-short.wav"
+ invalid-sound="/soundfiles/invalid.wav"
+ exit-sound="/soundfiles/exit.wav" timeout ="15" max-failures="3">
+ <entry action="menu-exit" digits="*"/>
+ <entry action="menu-sub" digits="2" param="menu2"/>
+ <entry action="menu-exec-api" digits="3" param="api arg"/>
+ <entry action="menu-play-sound" digits="4" param="/soundfiles/4.wav"/>
+ <entry action="menu-back" digits="5"/>
+ <entry action="menu-call-transfer" digits="7" param="888"/>
+ <entry action="menu-sub" digits="8" param="menu8"/>
+ </menu>
+ <menu name="menu8"
+ greet-long="/soundfiles/greet-long.wav"
+ greet-short="/soundfiles/greet-short.wav"
+ invalid-sound="/soundfiles/invalid.wav"
+ exit-sound="/soundfiles/exit.wav"
+ timeout ="15"
+ max-failures="3">
+ <entry action="menu-back" digits="#"/>
+ <entry action="menu-play-sound" digits="4" param="/soundfiles/4.wav"/>
+ <entry action="menu-top" digits="*"/>
+ </menu>
+ <menu name="menu2"
+ greet-long="/soundfiles/greet-long.wav"
+ greet-short="/soundfiles/greet-short.wav"
+ invalid-sound="/soundfiles/invalid.wav"
+ exit-sound="/soundfiles/exit.wav"
+ timeout ="15"
+ max-failures="3">
+ <entry action="menu-back" digits="#"/>
+ <entry action="menu-play-sound" digits="4" param="/soundfiles/4.wav"/>
+ <entry action="menu-top" digits="*"/>
+ </menu>
+ </menus>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/mod_cdr.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/mod_cdr.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/mod_cdr.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/mod_cdr.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/mod_cdr.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="mod_cdr.conf" description="CDR Configuration">
+ <pddcdr>
+ <param name="path" value="/work/temp/pddcdr"/>
+ <!-- <param name="chanvars" value="username,accountcode"/> -->
+ <!-- <param name="chanvars_fixed" value="foo"/> -->
+ </pddcdr>
+ <csvcdr>
+ <param name="path" value="/work/temp/csvcdr"/>
+ <param name="size_limit" value="25"/>
+ <!-- <param name="chanvars_fixed" value="username"/> -->
+ <!-- <param name="chanvars_supp" value="*"/> -->
+ <!-- <param name="repeat_fixed_in_supp" value="0"/> -->
+ </csvcdr>
+ <mysqlcdr>
+ <param name="hostname" value="10.0.0.1"/>
+ <param name="username" value="test"/>
+ <param name="password" value="test"/>
+ <param name="dbname" value="testing"/>
+ <!-- This following line logs username as a varchar, and The_Kow as a tiny -->
+ <!-- <param name="chanvars_fixed" value="username=s,The_Kow=t"/> -->
+ <!-- If you do not want to log any and all chanvars to the chanvar table, comment the next 2 lines out -->
+ <param name="chanvars_supp" value="*"/>
+ <param name="chanvars_supp_repeat_fixed" value="0"/>
+ </mysqlcdr>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="portaudio.conf" description="Soundcard Endpoint">
+ <settings>
+ <!-- indev, outdev, ringdev:
+ partial case sensitive string match on something in the name
+ or the device number prefixed with # eg "#1" (or blank for default) -->
+
+ <!-- device to use for input -->
+ <param name="indev" value=""/>
+ <!-- device to use for output -->
+ <param name="outdev" value=""/>
+
+ <!--device to use for inbound ring -->
+ <!--<param name="ringdev" value=""/>-->
+ <!--File to play as the ring sound -->
+ <!--<param name="ring-file" value="/sounds/ring.wav"/>-->
+ <!--Number of seconds to pause between rings -->
+ <!--<param name="ring-interval" value="5"/>-->
+
+ <!--file to play when calls are on hold-->
+ <!--<param name="hold-file" value="/sounds/holdmusic.wav"/>-->
+ <!--Timer to use for hold music (i'd leave this one commented)-->
+ <!--<param name="timer-name" value="soft"/>-->
+
+ <!--Default dialplan and caller-id info -->
+ <param name="dialplan" value="XML"/>
+ <param name="cid-name" value="FreeSwitch"/>
+ <param name="cid-num" value="5555551212"/>
+
+ <!--audio sample rate and interval -->
+ <param name="sample-rate" value="8000"/>
+ <param name="codec-ms" value="20"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="post_load_modules.conf" description="Modules">
+ <modules>
+ <!-- Multi-Faceted -->
+ <!-- mod_enum is a dialplan interface, an application interface and an api command interface -->
+ <load module="mod_enum"/>
+
+ <!-- XML Interfaces -->
+ <load module="mod_xml_rpc"/>
+ <load module="mod_xml_cdr"/>
+
+ <!-- Event Handlers -->
+ <!-- <load module="mod_cdr"/> -->
+ <!-- <load module="mod_event_multicast"/> -->
+ <load module="mod_event_socket"/>
+ <!-- <load module="mod_xmpp_event"/> -->
+ <!-- <load module="mod_zeroconf"/> -->
+
+ <!-- Directory Interfaces -->
+ <!-- <load module="mod_ldap"/> -->
+
+ <!-- Endpoints -->
+ <!-- <load module="mod_dingaling"/> -->
+ <!--<load module="mod_iax"/>-->
+ <load module="mod_portaudio"/>
+ <load module="mod_alsa"/>
+ <load module="mod_sofia"/>
+ <!-- <load module="mod_wanpipe"/> -->
+ <!-- <load module="mod_woomera"/> -->
+
+ <!-- Applications -->
+ <load module="mod_commands"/>
+ <load module="mod_conference"/>
+ <load module="mod_dptools"/>
+
+ <!-- Dialplan Interfaces -->
+ <!-- <load module="mod_dialplan_directory"/> -->
+ <load module="mod_dialplan_xml"/>
+
+ <!-- Codec Interfaces -->
+ <load module="mod_g711"/>
+ <load module="mod_gsm"/>
+ <!-- <load module="mod_ilbc"/> -->
+ <load module="mod_l16"/>
+ <!-- <load module="mod_speex"/> -->
+
+ <!-- File Format Interfaces -->
+ <load module="mod_sndfile"/>
+ <load module="mod_native_file"/>
+ <!--For icecast/mp3 streams/files-->
+ <!--<load module="mod_shout"/>-->
+ <!--For local streams (play all the files in a directory)-->
+ <!--<load module="mod_local_stream"/>-->
+
+ <!-- Timers -->
+ <load module="mod_softtimer"/>
+
+ <!-- Languages -->
+ <load module="mod_spidermonkey"/>
+ <!-- <load module="mod_perl"/> -->
+
+ <!-- ASR /TTS -->
+ <load module="mod_cepstral"/>
+ <!-- <load module="mod_rss"/> -->
+
+ <!-- Say -->
+ <load module="mod_say_en"/>
+ </modules>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="rss.conf" description="RSS Parser">
+ <feeds>
+ <!-- Just download the files to wherever and refer to them here -->
+ <!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
+ <!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
+ </feeds>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,101 @@
+{literal}
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="sofia.conf" description="sofia Endpoint">
+ <profiles>
+ <profile name="internal">
+ <!--aliases are other names that will work as a valid profile name for this profile-->
+ <aliases>
+ <alias name="default"/>
+ </aliases>
+ <!-- Outbound Registrations -->
+ <gateways>
+ <!--<gateway name="asterlink.com">-->
+ <!--/// account username *required* ///-->
+ <!--<param name="username" value="cluecon"/>-->
+ <!--/// auth realm: *optional* same as gateway name, if blank ///-->
+ <!--<param name="realm" value="asterlink.com"/>-->
+ <!--/// domain to use in from: *optional* same as realm, if blank ///-->
+ <!--<param name="from-domain" value="asterlink.com"/>-->
+ <!--/// account password *required* ///-->
+ <!--<param name="password" value="2007"/>-->
+ <!--/// replace the INVITE from user with the channel's caller-id ///-->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--/// extension for inbound calls: *optional* same as username, if blank ///-->
+ <!--<param name="extension" value="cluecon"/>-->
+ <!--/// proxy host: *optional* same as realm, if blank ///-->
+ <!--<param name="proxy" value="asterlink.com"/>-->
+ <!--/// expire in seconds: *optional* 3600, if blank ///-->
+ <!--<param name="expire-seconds" value="60"/>-->
+ <!--/// do not register ///-->
+ <!--<param name="register" value="false"/>-->
+ <!--How many seconds before a retry when a failure or timeout occurs -->
+ <!--<param name="retry_seconds" value="30"/>-->
+ <!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--</gateway>-->
+ </gateways>
+
+ <domains>
+ <!-- indicator to parse the directory for domains with parse="true" to get gateways-->
+ <!--<domain name="trxtel.com" parse="true"/>-->
+ </domains>
+
+ <settings>
+ <param name="debug" value="1"/>
+ <param name="rfc2833-pt" value="101"/>
+ <param name="sip-port" value="5060"/>
+ <param name="dialplan" value="XML"/>
+ <param name="dtmf-duration" value="100"/>
+ <param name="codec-prefs" value="PCMU@20i"/>
+ <param name="codec-ms" value="20"/>
+ <param name="use-rtp-timer" value="true"/>
+ <param name="rtp-timer-name" value="soft"/>
+ <param name="rtp-ip" value="0.0.0.0"/>
+ <param name="sip-ip" value="0.0.0.0"/>
+ <!--set to 'greedy' if you want your codec list to take precedence -->
+ <param name="inbound-codec-negotiation" value="generous"/>
+ <!-- if you want to send any special bind params of your own -->
+ <!--<param name="bind-params" value="transport=udp"/>-->
+
+ <!--If you don't want to pass through timestampes from 1 RTP call to another (on a per call basis with rtp_rewrite_timestamps chanvar)-->
+ <!--<param name="rtp-rewrite-timestampes" value="true"/>-->
+
+ <!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+
+ <!--Uncomment to set all inbound calls to no media mode-->
+ <!--<param name="inbound-no-media" value="true"/>-->
+
+ <!--Uncomment to let calls hit the dialplan *before* you decide if the codec is ok-->
+ <!--<param name="inbound-late-negotiation" value="true"/>-->
+
+ <!-- this lets anything register -->
+ <!-- comment the next line and uncomment one or both of the other 2 lines for call authentication -->
+<!-- <param name="accept-blind-reg" value="true"/> -->
+
+ <!--TTL for nonce in sip auth-->
+ <param name="nonce-ttl" value="60"/>
+ <!--Uncomment if you want to force the outbound leg of a bridge to only offer the codec
+ that the originator is using-->
+ <!--<param name="disable-transcoding" value="true"/>-->
+ <!--<param name="auth-calls" value="true"/>-->
+ <!-- on authed calls, authenticate *all* the packets not just invite -->
+ <!--<param name="auth-all-packets" value="true"/>-->
+
+ <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>-->
+
+ <!-- <param name="ext-sip-ip" value="100.101.102.103"/> -->
+ <!-- VAD choose one (out is a good choice); -->
+ <!-- <param name="vad" value="in"/> -->
+ <!-- <param name="vad" value="out"/> -->
+ <!-- <param name="vad" value="both"/> -->
+ <!--<param name="alias" value="sip:10.0.1.251:5555"/>-->
+ </settings>
+ </profile>
+ </profiles>
+</configuration>
+</section>
+</document>
+{/literal}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="spidermonkey.conf" description="Spider Monkey JavaScript Plug-Ins">
+ <modules>
+ <load module="mod_spidermonkey_teletone"/>
+ <load module="mod_spidermonkey_core_db"/>
+ <!--<load module="mod_spidermonkey_odbc"/>-->
+ </modules>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/switch.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/switch.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/switch.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/switch.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/switch.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="switch.conf" description="Modules">
+ <settings>
+ <!--Most channels to allow at once -->
+ <param name="max-sessions" value="1000"/>
+ <!--Try to catch any crashes that can be recoverable (in the context of a call)-->
+ <param name="crash-protection" value="false"/>
+ <!--RTP port range -->
+ <!--<param name="rtp-start-port" value="16384"/>-->
+ <!--<param name="rtp-end-port" value="32768"/>-->
+ </settings>
+ <!--Any variables defined here will be available in every channel, in the dialplan etc -->
+ <variables>
+ <variable name="uk-ring" value="%(400,200,400,450);%(400,2200,400,450)"/>
+ <variable name="us-ring" value="%(2000, 4000, 440.0, 480.0)"/>
+ <variable name="bong-ring" value="v=4000;>=0;+=2;#(60,0);v=2000;%(940,0,350,440)"/>
+ </variables>
+</configuration>
+
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/syslog.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/syslog.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/syslog.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/syslog.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/syslog.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="syslog.conf" description="Syslog Logger">
+ <!-- SYSLOG -->
+ <!-- emerg - system is unusable -->
+ <!-- alert - action must be taken immediately -->
+ <!-- crit - critical conditions -->
+ <!-- err - error conditions -->
+ <!-- warning - warning conditions -->
+ <!-- notice - normal, but significant, condition -->
+ <!-- info - informational message -->
+ <!-- debug - debug-level message -->
+ <settings>
+ <param name="ident" value="freeswitch"/>
+ <param name="facility" value="user"/>
+ <param name="format" value="${time} - ${message}"/>
+ <param name="level" value="debug,info,warning-alert"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/voicemail.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/voicemail.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/voicemail.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/voicemail.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/voicemail.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,50 @@
+<configuration name="voicemail.conf" description="Voicemail">
+ <settings>
+ </settings>
+ <profiles>
+ <profile name="default">
+ <param name="file-extension" value="wav"/>
+ <param name="terminator-key" value="#"/>
+ <param name="max-login-attempts" value="3"/>
+ <param name="digit-timeout" value="10000"/>
+ <param name="max-record-len" value="300"/>
+ <param name="tone-spec" value="%(1000, 0, 640)"/>
+ <param name="callback-dialplan" value="XML"/>
+ <param name="callback-context" value="default"/>
+ <param name="terminator-key" value="#"/>
+ <param name="play-new-messages-key" value="1"/>
+ <param name="play-saved-messages-key" value="2"/>
+ <param name="main-menu-key" value="0"/>
+ <param name="config-menu-key" value="5"/>
+ <param name="record-greeting-key" value="1"/>
+ <param name="choose-greeting-key" value="2"/>
+ <param name="record-name-key" value="3"/>
+ <param name="record-file-key" value="3"/>
+ <param name="listen-file-key" value="1"/>
+ <param name="save-file-key" value="2"/>
+ <param name="delete-file-key" value="7"/>
+ <param name="undelete-file-key" value="8"/>
+ <param name="email-key" value="4"/>
+ <param name="pause-key" value="0"/>
+ <param name="restart-key" value="1"/>
+ <param name="ff-key" value="6"/>
+ <param name="rew-key" value="4"/>
+ <email>
+ <body>{literal}<![CDATA[At ${voicemail_time} you were left a message from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
+to your account ${voicemail_account}@${voicemail_domain}
+]]>{/literal}</body>
+ <headers>{literal}<![CDATA[From: FreeSWITCH mod_voicemail <${voicemail_account}@${voicemail_domain}>
+To: <${voicemail_email}>
+Subject: Voicemail from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
+X-Priority: ${voicemail_priority}
+X-Mailer: FreeSWITCH
+]]>{/literal}</headers>
+ <!-- this is the format voicemail_time will have -->
+ <param name="date-fmt" value="%A, %B %d %Y, %I %M %p"/>
+ <param name="email-from" value="{literal}${voicemail_account}@${voicemail_domain}{/literal}"/>
+ </email>
+ <!--<param name="storage-dir" value="/tmp"/>-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+ </profile>
+ </profiles>
+</configuration>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="wanpipe.conf" description="Sangoma Wanpipe Endpoint">
+ <settings>
+ <param name="debug" value="0"/>
+ <param name="dialplan" value="XML"/>
+ <param name="ms-per-frame" value="20"/>
+ <param name="dtmf-on" value="800"/>
+ <param name="dtmf-off" value="100"/>
+ <param name="supress-dtmf-tone" value="yes"/>
+ </settings>
+ <ss7boost_handles>
+<!--
+ <handle>
+ <param name="local-ip" value="127.0.0.65"/>
+ <param name="local-port" value="53000"/>
+ <param name="remote-ip" value="127.0.0.66"/>
+ <param name="remote-port" value="53000"/>
+ </handle>
+-->
+ </ss7boost_handles>
+ <pri_spans>
+ <!-- may be any single digit or a range of digits separated by a '-' e.g "1-4" -->
+ <span id="1">
+ <param name="node" value="cpe"/>
+ <param name="switch" value="ni2"/>
+ <!--<param name="switch" value="dms100"/>-->
+ <!-- <param name="switch" value="lucent5e"/> -->
+ <!-- <param name="switch" value="att4ess"/> -->
+ <!-- <param name="switch" value="euroisdn"/> -->
+ <!-- <param name="switch" value="gr303eoc"/> -->
+ <!-- <param name="switch" value="gr303tmc"/> -->
+ <param name="dp" value="national"/>
+ <!-- <param name="dp" value="international"/> -->
+ <!-- <param name="dp" value="local"/> -->
+ <!-- <param name="dp" value="private"/> -->
+ <!-- <param name="dp" value="unknown"/> -->
+ <param name="l1" value="ulaw"/>
+ <!-- <param name="l1" value="alaw"/> -->
+ <param name="bchan" value="1-23"/>
+ <param name="dchan" value="24"/>
+ <param name="dialplan" value="XML"/>
+ </span>
+ </pri_spans>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="woomera.conf" description="Woomera Endpoint">
+ <settings>
+ <param name="debug" value="0"/>
+ </settings>
+ <interface>
+ <param name="host" value="localhost"/>
+ <param name="port" value="42420"/>
+ <param name="audio-ip" value="127.0.0.1"/>
+ <param name="dialplan" value="XML"/>
+ </interface>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_cdr.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_cdr.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/xml_cdr.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_cdr.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_cdr.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+<configuration name="xml_cdr.conf" description="XML CDR CURL logger">
+ <settings>
+ <!-- the url to post to if blank web posting is disabled -->
+ <!-- <param name="url" value="http://localhost/cdr_curl/post.php"/> -->
+
+ <!-- optional: credentials to send to web server -->
+ <!-- <param name="cred" value="user:pass"/> -->
+
+ <!-- the total number of retries (not counting the first 'try') to post to webserver incase of failure -->
+ <!-- <param name="retries" value="2"/> -->
+
+ <!-- delay between retries in seconds, default is 5 seconds -->
+ <!-- <param name="delay" value="1"/> -->
+
+ <!-- optional: if not present we do not log every record to disk -->
+ <!-- either an absolute path, a relative path assuming ${prefix}/logs or a blank value will default to ${prefix}/logs/xml_cdr -->
+ <param name="log-dir" value=""/>
+
+ <!-- encode the post data may be 'true' for url encoding, 'false' for no encoding or 'base64' for base64 encoding -->
+ <!--<param name="encode" value="true"/>-->
+
+ <!-- optional: full path to the error log dir for failed web posts if not specified its the same as log-dir -->
+ <!-- either an absolute path, a relative path assuming ${prefix}/logs or a blank or omitted value will default to ${prefix}/logs/xml_cdr -->
+ <!-- <param name="err-log-dir" value="/tmp"/> -->
+
+ <!-- optional: if enabled this will disable CA root certificate checks by libcurl -->
+ <!-- note: default value is disabled. only enable if you want this! -->
+ <!-- <param name="ignore-cacert-check" value="true" /> -->
+
+ </settings>
+</configuration>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_curl.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_curl.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/xml_curl.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_curl.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_curl.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="xml_curl.conf" description="cURL XML Gateway">
+ <bindings>
+ <binding name="example">
+ <!-- The url to a gateway cgi that can generate xml similar to
+ what's in this file only on-the-fly (leave it commented if you dont
+ need it) -->
+ <!-- one or more |-delim of configuration|directory|dialplan -->
+ <param name="gateway-url" value="http://www.mydomain.com/test.cgi" bindings="dialplan"/>
+ <!-- set this to provide authentication credentials to the server -->
+ <!--<param name="gateway-credentials" value="muser:mypass"/>-->
+ <!-- set to true to disable Expect: 100-continue lighttpd requires this setting -->
+ <!--<param name="disable-100-continue" value="true"/>-->
+ </binding>
+ </bindings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="xml_rpc.conf" description="XML RPC">
+ <settings>
+ <!-- The port where you want to run the http service (default 8080) -->
+ <param name="http-port" value="8080"/>
+ <!-- if all 3 of the following params exist all http traffic will require auth -->
+ <param name="auth-realm" value="freeswitch"/>
+ <param name="auth-user" value="freeswitch"/>
+ <param name="auth-pass" value="works"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="xmpp_event.conf" description="XMPP Event Handler">
+ <settings>
+ <param name="#debug" value="1"/>
+ <param name="jid" value="freeswitch@my.jabber.com/me"/>
+ <param name="passwd" value="mypass"/>
+ <param name="target-jid" value="freeswitch@reader.org/him"/>
+ </settings>
+</configuration>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="configuration" description="Various Configuration">
+<configuration name="zeroconf.conf" description="Zeroconf Event Handler">
+ <settings>
+ <param name="publish" value="yes"/>
+ <param name="browse" value="_sip._udp"/>
+ </settings>
+</configuration>
+</section>
+</document>
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/dialplan)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="dialplan" description="Regex/XML Dialplan">
+ <context name="default">
+ <extension name="myextension">
+ <condition field="destination_number" expression=".*">
+ <action application="answer"/>
+ <action application="playback" data="/sounds/oops.wav"/>
+ </condition>
+ </extension>
+ </context>
+ </section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="dialplan" description="Regex/XML Dialplan">
+ <context name="default">
+ <extension name="myextension">
+ <condition field="destination_number" expression="^.*$">
+{foreach key=k item=v from=$ACTION}
+ <action application="{$v[0]}" data="{$v[1]}"/>
+{/foreach}
+ </condition>
+ </extension>
+ </context>
+ </section>
+</document>
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/directory (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/directory)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/directory/192.168.153.128.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/directory/192.168.153.128.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/directory/192.168.153.128.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/directory/192.168.153.128.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/directory/192.168.153.128.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="directory" description="User Directory">
+ <domain name="{$DOMAIN}">
+ <user id="{$USER}">
+ <params>
+ <param name="password" value="{$PASSWORD}"/>
+ </params>
+ </user>
+ </domain>
+
+ </section>
+</document>
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/phrases)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_en.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_en.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/phrases/lang_en.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_en.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_en.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,80 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="phrases" description="Speech Phrase Management">
+ <macros>
+ <language name="en" sound_path="/snds" tts_engine="cepstral" tts_voice="david">
+<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="vm-youhave.wav"/>
+ <action function="say" data="$1" method="pronounced" type="items"/>
+ <action function="play-file" data="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 -->
+</language>
+</macros>
+</section>
+</document>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_fr.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_fr.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-curl/templates/switch1/phrases/lang_fr.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_fr.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-curl/templates/switch1/phrases/lang_fr.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+ <section name="phrases" description="Speech Phrase Management">
+ <macros>
+ <language name="fr" sound_path="/var/sounds/lang/fr/jean" tts_engine="cepstral" tts_voice="jean-pierre">
+<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 y a $1 minutes et de $2 secondes de restant"/>
+ </match>
+ </input>
+</macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
+</language>
+</macros>
+</section>
+</document>
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/README
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/README (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/README) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/README (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+You will need to get smarty from http://smarty.php.net to make this work
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/fsxmlrpc.inc
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/fsxmlrpc.inc (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/fsxmlrpc.inc) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/fsxmlrpc.inc (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/fsxmlrpc.inc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,217 @@
+<?php
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005/2006, Anthony Minessale II <anthmct@yahoo.com>
+ *
+ * Version: MPL 1.1
+ *
+ * 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.
+ *
+ * The Original Code is FreeSWITCH(tm) PHP5 XMLRPC convienience library
+ *
+ * The Initial Developer of the Original Code is
+ * Bret McDanel <trixter AT 0xdecafbad.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Thanks to Ken Rice for showing me a simple xmlrpc example which enabled me to write this
+ *
+ * Contributor(s):
+ *
+ *
+ * fsxmlrpc.inc
+ *
+ */
+
+include_once("xmlrpc.inc");
+
+class fsxmlrpc extends xmlrpc_client {
+ function sendRequest($msg='') {
+ if($msg == '') return false;
+
+ $resp=$this->send($msg);
+
+ if(!$resp) {
+ echo "Communication error: " . $this->client->errstr;
+ } else if (!$resp->faultCode()) {
+ return(explode("\n" , $resp->value()->scalarval()));
+ } else {
+ print "An error occurred: ";
+ print "Code: " . htmlspecialchars($resp->faultCode()) .
+ " Reason: '" . htmlspecialchars($resp->faultString());
+ }
+
+ return false;
+ }
+
+
+ function getChannels() {
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("show", "string"),
+ new xmlrpcval("channels", "string"))));
+
+ if(!$resp) return false;
+
+ $x=0;
+ foreach ($resp as $call) {
+ $session = explode(",", $call);
+ if($session[0]!='uuid' && sizeof($session) >= 2) {
+ $calls[$x]['uuid'] = $session[0];
+ $calls[$x]['created'] = $session[1];
+ $calls[$x]['name'] = $session[2];
+ $calls[$x]['state'] = $session[3];
+ $calls[$x]['cid_name'] = $session[4];
+ $calls[$x]['cid_num'] = $session[5];
+ $calls[$x]['ip_addr'] = $session[6];
+ $calls[$x]['dest'] = $session[7];
+ $calls[$x]['application'] = $session[8];
+ $calls[$x]['application_data'] = $session[9];
+ $calls[$x]['read_codec'] = $session[10];
+ $calls[$x]['read_rate'] = $session[11];
+ $calls[$x]['write_codec'] = $session[12];
+ $calls[$x]['write_rate'] = $session[13];
+ $x++;
+ }
+ }
+ return($calls);
+
+ }
+
+ function getHelp() {
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("help", "string"),
+ new xmlrpcval("", "string"))));
+
+ if(!$resp) return false;
+
+ $x=0;
+ foreach ($resp as $call) {
+ $session = explode(",", $call);
+ if($session[0]!='uuid' && sizeof($session) >= 2) {
+ $calls[$x]['command'] = $session[0];
+ $calls[$x]['args'] = $session[1];
+ $calls[$x]['description'] = $session[2];
+ $x++;
+ }
+ }
+ return($calls);
+
+ }
+
+ function conferenceList() {
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("list", "string"))));
+
+ if(!$resp) return false;
+
+ for ($i=0,$j=0;$i< count($resp); $i++,$j++) {
+ preg_match("/Conference (.*) \((\d+) member.*\)/",$resp[$i],$matches);
+ if(isset($matches[1]) && $matches[1]!="") {
+ $conference[$j]['title'] = $resp[$i];
+ $conference[$j]['name'] = $matches[1];
+ $conference[$j]['members'] = $matches[2];
+
+ for ($x=0; $x<$conference[$j]['members']; $x++) {
+ $confmember = explode(";",$resp[$i+$x+1]);
+ $member[$x]['member_id'] = $confmember[0];
+ $member[$x]['channel_id'] = $confmember[1];
+ $member[$x]['uuid'] = $confmember[2];
+ $member[$x]['cid_name'] = $confmember[3];
+ $member[$x]['cid_num'] = $confmember[4];
+ $member[$x]['flags'] = $confmember[5];
+ $member[$x]['volume_in'] = $confmember[6];
+ $member[$x]['volume_out'] = $confmember[7];
+ $member[$x]['energy'] = $confmember[8];
+ }
+ $conference[$j]['sessions'] = $member;
+ $i+=$x;
+ }
+ }
+
+ if($i>0) return($conference);
+ return(false);
+
+ }
+
+ function conferenceKick($confname='',$memid='') {
+ if($confname=='' || $memid=='') return false;
+
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("$confname kick $memid", "string"))));
+
+ if(!$resp) return false;
+ for ($i=0;$i< count($resp); $i++) {
+ if(strlen($resp[$i])>2 && $resp[$i]=="OK kicked $memid") return true;
+ }
+ return false;
+ }
+
+ function conferenceMute($confname='',$memid='') {
+ if($confname=='' || $memid=='') return false;
+
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("$confname mute $memid", "string"))));
+
+ if(!$resp) return false;
+ for ($i=0;$i< count($resp); $i++) {
+ if(strlen($resp[$i])>2 && $resp[$i]=="OK mute $memid") return true;
+ }
+ return false;
+ }
+
+ function conferenceUnmute($confname='',$memid='') {
+ if($confname=='' || $memid=='') return false;
+
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("$confname unmute $memid", "string"))));
+
+ if(!$resp) return false;
+ for ($i=0;$i< count($resp); $i++) {
+ if(strlen($resp[$i])>2 && $resp[$i]=="OK unmute $memid") return true;
+ }
+ return false;
+ }
+
+ function conferenceDeaf($confname='',$memid='') {
+ if($confname=='' || $memid=='') return false;
+
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("$confname deaf $memid", "string"))));
+
+ if(!$resp) return false;
+ for ($i=0;$i< count($resp); $i++) {
+ if(strlen($resp[$i])>2 && $resp[$i]=="OK deaf $memid") return true;
+ }
+ return false;
+ }
+
+ function conferenceUndeaf($confname='',$memid='') {
+ if($confname=='' || $memid=='') return false;
+
+ $resp = $this->sendRequest(new xmlrpcmsg('freeswitch.api',
+ array(new xmlrpcval("conference", "string"),
+ new xmlrpcval("$confname undeaf $memid", "string"))));
+
+ if(!$resp) return false;
+ for ($i=0;$i< count($resp); $i++) {
+ if(strlen($resp[$i])>2 && $resp[$i]=="OK undeaf $memid") return true;
+ }
+ return false;
+ }
+
+
+}
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/index.php
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/index.php (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/index.php) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/index.php (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/index.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,167 @@
+<?php // -*- mode:c; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil; -*-
+/*
+ * example for http://www.cluecon.com 2007
+ *
+ * this program illustrates some of the XML-RPC functionality
+ *
+ * because this is an example its not the best design. For example, it would be better
+ * to have a cron job or something store this in a DB instead of hammering your FS box
+ * each time you want to see what calls are in. It would also make it easier to hangup,
+ * kick, etc the calls in progress. DB usage is beyond the scope of this example however.
+ *
+ * I did try to get people thinking about some of the problems that might be encountered
+ * in a 'real app' such as multilanguage support, seperation of html from content (so non-devs
+ * can more easily update the look and feel as well as just better design), support for
+ * multiple FS boxes, etc.
+ *
+ * specifically the multilanguage approach used here is not good at all. Smarty has some
+ * multilanguage stuff that can be better than this, and there are a lot of other packages
+ * the idea was just to get people to think about it :)
+ */
+ini_set("include_path",".:/usr/local/lib/php:/usr/share/php:./Smarty-2.6.18/libs");
+include_once("fsxmlrpc.inc");
+include_once('Smarty.class.php');
+
+
+
+$hosts = array (
+ 0 => array ( "hostname" => "switch1.my.tld",
+ "port" => 8080,
+ "username" => "username",
+ "password" => "password"
+ ),
+ 1 => array ( "hostname" => "switch2.my.tld",
+ "port" => 8080,
+ "username" => "username",
+ "password" => "password"
+ ),
+ );
+
+
+
+$smarty = new Smarty;
+$chanArray = Array();
+$confArray = Array();
+
+function connect($host)
+{
+ $client=new fsxmlrpc("/RPC2",$host['hostname'] , $host['port']);
+ $client->setCredentials($host['username'],$host['password'],NULL);
+ return $client;
+}
+
+
+function findGateway($host)
+{
+ global $hosts;
+ foreach ($hosts as $key => $value) {
+ if($hosts[$key]['hostname'] == $host) {
+ return $hosts[$key];
+ }
+ }
+ return false;
+}
+
+
+$language='default';
+if(isset($_GET['hl']) && $_GET['hl']!='') {
+ // security warning, I dont check for ../../ this is just an example afterall
+ if(file_exists($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/themes/" . $_GET['hl'] . "/index.tpl")) {
+ $language=$_GET['hl'];
+ }
+}
+
+include_once($_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/themes/" . $language . "/errors.inc");
+
+
+if(isset($_POST['action']) && $_POST['action']!='') {
+ switch($_POST['action']) {
+ case "kick":
+ if(isset($_POST['memid']) && isset($_POST['conf'])) {
+ foreach($_POST['memid'] as $singleVar) {
+ $client=connect(findGateway($_POST['gateway']));
+ if($client->conferenceKick($_POST['conf'],$singleVar)) {
+ $errors[]=$ERRMSG[KICK_SUCCESS] . "$_POST[conf]:$singleVar";
+ } else {
+ $errors[]=$ERRMSG[KICK_FAIL] . "$_POST[conf]:$singleVar";
+ }
+ }
+ }
+ break;
+ case "mute":
+ if(isset($_POST['memid']) && isset($_POST['conf'])) {
+ foreach($_POST['memid'] as $singleVar) {
+ $client=connect(findGateway($_POST['gateway']));
+ if($client->conferenceMute($_POST['conf'],$singleVar)) {
+ $errors[]=$ERRMSG[MUTE_SUCCESS] . "$_POST[conf]:$singleVar";
+ } else {
+ $errors[]=$ERRMSG[MUTE_FAIL] . "$_POST[conf]:$singleVar";
+ }
+ }
+ }
+ break;
+ case "unmute":
+ if(isset($_POST['memid']) && isset($_POST['conf'])) {
+ foreach($_POST['memid'] as $singleVar) {
+ $client=connect(findGateway($_POST['gateway']));
+ if($client->conferenceUnmute($_POST['conf'],$singleVar)) {
+ $errors[]=$ERRMSG[UNMUTE_SUCCESS] . "$_POST[conf]:$singleVar";
+ } else {
+ $errors[]=$ERRMSG[UNMUTE_FAIL] . "$_POST[conf]:$singleVar";
+ }
+ }
+ }
+ break;
+ case "deaf":
+ if(isset($_POST['memid']) && isset($_POST['conf'])) {
+ foreach($_POST['memid'] as $singleVar) {
+ $client=connect(findGateway($_POST['gateway']));
+ if($client->conferenceDeaf($_POST['conf'],$singleVar)) {
+ $errors[]=$ERRMSG[DEAF_SUCCESS] . "$_POST[conf]:$singleVar";
+ } else {
+ $errors[]=$ERRMSG[DEAF_FAIL] . "$_POST[conf]:$singleVar";
+ }
+ }
+ }
+ break;
+ case "undeaf":
+ if(isset($_POST['memid']) && isset($_POST['conf'])) {
+ foreach($_POST['memid'] as $singleVar) {
+ $client=connect(findGateway($_POST['gateway']));
+ if($client->conferenceUndeaf($_POST['conf'],$singleVar)) {
+ $errors[]=$ERRMSG[UNDEAF_SUCCESS] . "$_POST[conf]:$singleVar";
+ } else {
+ $errors[]=$ERRMSG[UNDEAF_FAIL] . "$_POST[conf]:$singleVar";
+ }
+ }
+ }
+ break;
+ }
+}
+
+
+
+foreach ($hosts as $i => $value) {
+ $client=connect($hosts[$i]);
+ // $client->setDebug(2);
+
+ $chanArray = array_merge($chanArray,$client->getChannels());
+ $ca = $client->conferenceList();
+
+ // we need to track the gateway so we can perform operations on the caller
+ foreach ($ca as $j => $value) {
+ $ca[$j][gateway] = $hosts[$i]['hostname'];
+ }
+ $confArray = array_merge($confArray,$ca);
+}
+
+// echo "<pre>".print_r($confArray,true)."</pre>";
+
+$smarty->assign('errors',$errors);
+$smarty->assign('channels',$chanArray);
+$smarty->assign('conferences',$confArray);
+
+
+$smarty->template_dir=$_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/themes/" . $language . "/";
+$smarty->display("index.tpl");
+?>
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/templates_c (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/templates_c)
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes)
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/channels.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/channels.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/channels.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/channels.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/channels.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,26 @@
+{if is_array($channels)}
+<table id="fstable" cellspacing="0" summary="Channel list">
+<caption>Channel List</caption>
+ <tr>
+ <th scope="col" abbr="UUID">UUID</th>
+ <th scope="col" abbr="Start">Start</th>
+ <th scope="col" abbr="From">From</th>
+ <th scope="col" abbr="To">To</th>
+ <th scope="col" abbr="Route">Route</th>
+ </tr>
+{section name=cnt loop=$channels}
+{strip}
+ <tr class="{cycle values="normal,alt"}">
+ <td>{$channels[cnt].uuid}</td>
+ <td>{$channels[cnt].created}</td>
+ <td>{$channels[cnt].cid_name} <{$channels[cnt].cid_num}></td>
+ <td>{$channels[cnt].dest}</td>
+ <td>{$channels[cnt].name}</td>
+ </tr>
+{/strip}
+{/section}
+</table>
+<br/>
+{else}
+There are currently no channels active<br/>
+{/if}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/conference.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/conference.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/conference.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/conference.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/conference.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+{section name=cnt loop=$conferences}
+ {strip}
+ <form method="post" action="{$smarty.server.PHP_SELF}">
+ <input type="hidden" name="conf" value="{$conferences[cnt].name}"/>
+ <input type="hidden" name="gateway" value="{$conferences[cnt].gateway}"/>
+ <table id="fstable" cellspacing="0" summary="Conference list">
+ <caption>{$conferences[cnt].title}</caption>
+ <tr>
+ <th scope="col" abbr=""></th>
+ <th scope="col" abbr="ID">ID</th>
+ <th scope="col" abbr="UUID">UUID</th>
+ <th scope="col" abbr="CLID">CLID</th>
+ <th scope="col" abbr="Flags">Flags</th>
+ <th scope="col" abbr="in/out/energy">in/out/energy</th>
+ </tr>
+ {section name=cnt2 loop=$conferences[cnt].sessions}
+ <tr class="{cycle values="normal,alt"}">
+ <td><input type="checkbox" name="memid[]" value="{$conferences[cnt].sessions[cnt2].member_id}"/></td>
+ <td>{$conferences[cnt].sessions[cnt2].member_id}</td>
+ <td>{$conferences[cnt].sessions[cnt2].uuid}</td>
+ <td>{$conferences[cnt].sessions[cnt2].cid_name} <{$conferences[cnt].sessions[cnt2].cid_num}></td>
+ <td>{$conferences[cnt].sessions[cnt2].flags}</td>
+ <td>{$conferences[cnt].sessions[cnt2].volume_in}/{$conferences[cnt].sessions[cnt2].volume_out}/{$conferences[cnt].sessions[cnt2].energy}</td>
+ </tr>
+ {/section}
+ </table>
+ <input class="submit" type="submit" name="action" value="kick">
+ <input class="submit" type="submit" name="action" value="mute">
+ <input class="submit" type="submit" name="action" value="unmute">
+ <input class="submit" type="submit" name="action" value="deaf">
+ <input class="submit" type="submit" name="action" value="undeaf">
+ </form>
+ {/strip}
+{sectionelse}
+There are currently no conferences active<br/>
+{/section}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.inc
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.inc (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/errors.inc) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.inc (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.inc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+<?php
+$ERRMSG[KICK_SUCCESS] = "Success: kick";
+$ERRMSG[KICK_FAIL] = "Fail: kick";
+$ERRMSG[MUTE_SUCCESS] = "Success: mute";
+$ERRMSG[MUTE_FAIL] = "Fail: mute";
+$ERRMSG[UNMUTE_SUCCESS] = "Success: unmute";
+$ERRMSG[UNMUTE_FAIL] = "Fail: unmute";
+$ERRMSG[DEAF_SUCCESS] = "Success: deaf";
+$ERRMSG[DEAF_FAIL] = "Fail: deaf";
+$ERRMSG[UNDEAF_SUCCESS] = "Success: undeaf";
+$ERRMSG[UNDEAF_FAIL] = "Fail: undeaf";
+?>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/errors.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/errors.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+{if is_array($errors)}
+<fieldset class="boxit"><legend>Errors</legend>
+{section name=cnt loop=$errors}
+{$errors[cnt]}<br/>
+{/section}
+</fieldset>
+<br/>
+{/if}
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/images (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/images)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/images/submit.gif
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/images/submit.gif (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/images/submit.gif)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/index.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/index.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/index.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/index.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/index.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>FreeSWITCH Information</title>
+<link href="themes/default/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<a href="?hl=es">Español</a><br/>
+{include file='errors.tpl'}
+
+{include file='channels.tpl'}
+
+{include file='conference.tpl'}
+</body>
+</html>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/style.css
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/style.css (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/default/style.css) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/style.css (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/default/style.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,92 @@
+body {
+ font: normal 10px auto "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color: #4f6b72;
+ background: #fff;
+}
+
+a {
+ color: #c75f3e;
+}
+
+#fstable {
+ width: 800px;
+ padding: 0;
+ margin: 0;
+}
+
+caption {
+ padding: 0 0 5px 0;
+ width: 800px;
+ font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ text-align: center;
+ background: #CAE8EA;
+}
+
+th {
+ font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color: #4f6b72;
+ border-right: 1px solid #C1DAD7;
+ border-bottom: 1px solid #C1DAD7;
+ border-top: 1px solid #C1DAD7;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ text-align: left;
+ padding: 6px 6px 6px 12px;
+ background: #CAE8EA;
+}
+
+
+td {
+ border-right: 1px solid #C1DAD7;
+ border-bottom: 1px solid #C1DAD7;
+ padding: 6px 6px 6px 12px;
+}
+
+
+tr.alt {
+ background: #F5FAFA;
+ color: #797268;
+}
+tr.normal {
+ background: #E6EAE9;
+ color: #4f6b72;
+}
+
+
+
+input.submit {
+ vertical-align: middle;
+ font:0.9em "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color:#666;
+ margin:0 0 20px 0;
+ height:20px;
+ border:solid 0px #fff;
+
+ background: transparent url(images/submit.gif) no-repeat;
+ width: 47px;
+
+ text-transform:uppercase;
+ outline: none;
+}
+
+input.submit:hover {
+ color: #f00;
+}
+
+
+
+.boxit {
+ width: 785px;
+ margin-left: 0px;
+ margin-right: 5px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border: 1px solid #CAE8EA;
+}
+fieldset legend {
+ font-size: 1.7em;
+ color: #f00;
+ padding: 2px 6px;
+ padding-bottom: 0px;
+ margin: 0 0 10px 10px;
+}
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/channels.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/channels.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/channels.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/channels.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/channels.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,26 @@
+{if is_array($channels)}
+<table id="fstable" cellspacing="0" summary="Channel list">
+<caption>Channel List</caption>
+ <tr>
+ <th scope="col" abbr="UUID">UUID</th>
+ <th scope="col" abbr="Start">Comienzo</th>
+ <th scope="col" abbr="From">De</th>
+ <th scope="col" abbr="To">A</th>
+ <th scope="col" abbr="Route">Ruta</th>
+ </tr>
+{section name=cnt loop=$channels}
+{strip}
+ <tr class="{cycle values="normal,alt"}">
+ <td>{$channels[cnt].uuid}</td>
+ <td>{$channels[cnt].created}</td>
+ <td>{$channels[cnt].cid_name} <{$channels[cnt].cid_num}></td>
+ <td>{$channels[cnt].dest}</td>
+ <td>{$channels[cnt].name}</td>
+ </tr>
+{/strip}
+{/section}
+</table>
+<br/>
+{else}
+There are currently no channels active<br/>
+{/if}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/conference.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/conference.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/conference.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/conference.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/conference.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,37 @@
+{section name=cnt loop=$conferences}
+ {strip}
+ <form method="post" action="{$smarty.server.PHP_SELF}">
+ <input type="hidden" name="conf" value="{$conferences[cnt].name}"/>
+ <input type="hidden" name="gateway" value="{$conferences[cnt].gateway}"/>
+ <table id="fstable" cellspacing="0" summary="Conference list">
+ <caption>{$conferences[cnt].title}</caption>
+ <tr>
+ <th scope="col" abbr=""></th>
+ <th scope="col" abbr="ID">ID</th>
+ <th scope="col" abbr="UUID">UUID</th>
+ <th scope="col" abbr="CLID">CLID</th>
+ <th scope="col" abbr="Flags">Banderas</th>
+ <th scope="col" abbr="in/out/energy">en/fuera de/energía</th>
+ </tr>
+ {section name=cnt2 loop=$conferences[cnt].sessions}
+ <tr class="{cycle values="normal,alt"}">
+ <td><input type="checkbox" name="memid[]" value="{$conferences[cnt].sessions[cnt2].member_id}"/></td>
+ <td>{$conferences[cnt].sessions[cnt2].member_id}</td>
+ <td>{$conferences[cnt].sessions[cnt2].uuid}</td>
+ <td>{$conferences[cnt].sessions[cnt2].cid_name} <{$conferences[cnt].sessions[cnt2].cid_num}></td>
+ <td>{$conferences[cnt].sessions[cnt2].flags}</td>
+ <td>{$conferences[cnt].sessions[cnt2].volume_in}/{$conferences[cnt].sessions[cnt2].volume_out}/{$conferences[cnt].sessions[cnt2].energy}</td>
+ </tr>
+ {/section}
+ </table>
+ <input class="submit" type="submit" name="action" value="kick">
+ <input class="submit" type="submit" name="action" value="mute">
+ <input class="submit" type="submit" name="action" value="unmute">
+ <input class="submit" type="submit" name="action" value="deaf">
+ <input class="submit" type="submit" name="action" value="undeaf">
+ </form>
+ {/strip}
+{sectionelse}
+There are currently no conferences active<br/>
+{/section}
+
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.inc
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.inc (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/errors.inc) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.inc (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.inc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+<?php
+$ERRMSG[KICK_SUCCESS] = "Éxito: kick";
+$ERRMSG[KICK_FAIL] = "Fall: kick";
+$ERRMSG[MUTE_SUCCESS] = "Éxito: mute";
+$ERRMSG[MUTE_FAIL] = "Fall: mute";
+$ERRMSG[UNMUTE_SUCCESS] = "Éxito: unmute";
+$ERRMSG[UNMUTE_FAIL] = "Fall: unmute";
+$ERRMSG[DEAF_SUCCESS] = "Éxito: deaf";
+$ERRMSG[DEAF_FAIL] = "Fall: deaf";
+$ERRMSG[UNDEAF_SUCCESS] = "Éxito: undeaf";
+$ERRMSG[UNDEAF_FAIL] = "Fall: undeaf";
+?>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/errors.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/errors.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+{if is_array($errors)}
+<fieldset class="boxit"><legend>Errors</legend>
+{section name=cnt loop=$errors}
+{$errors[cnt]}<br/>
+{/section}
+</fieldset>
+<br/>
+{/if}
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/images (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/images)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/images/submit.gif
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/images/submit.gif (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/images/submit.gif)
(Binary files differ)
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/index.tpl
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/index.tpl (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/index.tpl) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/index.tpl (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/index.tpl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>FreeSWITCH Information</title>
+<link href="themes/default/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<a href="?hl=en">English</a><br/>
+
+{include file='errors.tpl'}
+
+{include file='channels.tpl'}
+
+{include file='conference.tpl'}
+</body>
+</html>
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/style.css
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/style.css (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/themes/es/style.css) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/style.css (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/themes/es/style.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,92 @@
+body {
+ font: normal 10px auto "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color: #4f6b72;
+ background: #fff;
+}
+
+a {
+ color: #c75f3e;
+}
+
+#fstable {
+ width: 800px;
+ padding: 0;
+ margin: 0;
+}
+
+caption {
+ padding: 0 0 5px 0;
+ width: 800px;
+ font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ text-align: center;
+ background: #CAE8EA;
+}
+
+th {
+ font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color: #4f6b72;
+ border-right: 1px solid #C1DAD7;
+ border-bottom: 1px solid #C1DAD7;
+ border-top: 1px solid #C1DAD7;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ text-align: left;
+ padding: 6px 6px 6px 12px;
+ background: #CAE8EA;
+}
+
+
+td {
+ border-right: 1px solid #C1DAD7;
+ border-bottom: 1px solid #C1DAD7;
+ padding: 6px 6px 6px 12px;
+}
+
+
+tr.alt {
+ background: #F5FAFA;
+ color: #797268;
+}
+tr.normal {
+ background: #E6EAE9;
+ color: #4f6b72;
+}
+
+
+
+input.submit {
+ vertical-align: middle;
+ font:0.9em "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+ color:#666;
+ margin:0 0 20px 0;
+ height:20px;
+ border:solid 0px #fff;
+
+ background: transparent url(images/submit.gif) no-repeat;
+ width: 47px;
+
+ text-transform:uppercase;
+ outline: none;
+}
+
+input.submit:hover {
+ color: #f00;
+}
+
+
+
+.boxit {
+ width: 785px;
+ margin-left: 0px;
+ margin-right: 5px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border: 1px solid #CAE8EA;
+}
+fieldset legend {
+ font-size: 1.7em;
+ color: #f00;
+ padding: 2px 6px;
+ padding-bottom: 0px;
+ margin: 0 0 10px 10px;
+}
Deleted: freeswitch/branches/seven/contrib/trixter/xml-rpc/xmlrpc.inc
Copied: freeswitch/branches/seven/contrib/trixter/xml-rpc/xmlrpc.inc (from rev 14471, freeswitch/trunk/contrib/trixter/xml-rpc/xmlrpc.inc) (0 => 14472)
--- freeswitch/branches/seven/contrib/trixter/xml-rpc/xmlrpc.inc (rev 0)
+++ freeswitch/branches/seven/contrib/trixter/xml-rpc/xmlrpc.inc 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3566 @@
+<?php
+// by Edd Dumbill (C) 1999-2002
+// <edd@usefulinc.com>
+// $Id: xmlrpc.inc,v 1.150 2006/08/28 09:06:21 ggiunta Exp $
+
+// Copyright (c) 1999,2000,2002 Edd Dumbill.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+//
+// * Neither the name of the "XML-RPC for PHP" nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+// OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ if(!function_exists('xml_parser_create'))
+ {
+ // For PHP 4 onward, XML functionality is always compiled-in on windows:
+ // no more need to dl-open it. It might have been compiled out on *nix...
+ if(strtoupper(substr(PHP_OS, 0, 3) != 'WIN'))
+ {
+ dl('xml.so');
+ }
+ }
+
+ // Try to be backward compat with php < 4.2 (are we not being nice ?)
+ $phpversion = phpversion();
+ if($phpversion[0] == '4' && $phpversion[2] < 2)
+ {
+ // give an opportunity to user to specify where to include other files from
+ if(!defined('PHP_XMLRPC_COMPAT_DIR'))
+ {
+ define('PHP_XMLRPC_COMPAT_DIR',dirname(__FILE__).'/compat/');
+ }
+ if($phpversion[2] == '0')
+ {
+ if($phpversion[4] < 6)
+ {
+ include(PHP_XMLRPC_COMPAT_DIR.'is_callable.php');
+ }
+ include(PHP_XMLRPC_COMPAT_DIR.'is_scalar.php');
+ include(PHP_XMLRPC_COMPAT_DIR.'array_key_exists.php');
+ include(PHP_XMLRPC_COMPAT_DIR.'version_compare.php');
+ }
+ include(PHP_XMLRPC_COMPAT_DIR.'var_export.php');
+ include(PHP_XMLRPC_COMPAT_DIR.'is_a.php');
+ }
+
+ // G. Giunta 2005/01/29: declare global these variables,
+ // so that xmlrpc.inc will work even if included from within a function
+ // Milosch: 2005/08/07 - explicitly request these via $GLOBALS where used.
+ $GLOBALS['xmlrpcI4']='i4';
+ $GLOBALS['xmlrpcInt']='int';
+ $GLOBALS['xmlrpcBoolean']='boolean';
+ $GLOBALS['xmlrpcDouble']='double';
+ $GLOBALS['xmlrpcString']='string';
+ $GLOBALS['xmlrpcDateTime']='dateTime.iso8601';
+ $GLOBALS['xmlrpcBase64']='base64';
+ $GLOBALS['xmlrpcArray']='array';
+ $GLOBALS['xmlrpcStruct']='struct';
+ $GLOBALS['xmlrpcValue']='undefined';
+
+ $GLOBALS['xmlrpcTypes']=array(
+ $GLOBALS['xmlrpcI4'] => 1,
+ $GLOBALS['xmlrpcInt'] => 1,
+ $GLOBALS['xmlrpcBoolean'] => 1,
+ $GLOBALS['xmlrpcString'] => 1,
+ $GLOBALS['xmlrpcDouble'] => 1,
+ $GLOBALS['xmlrpcDateTime'] => 1,
+ $GLOBALS['xmlrpcBase64'] => 1,
+ $GLOBALS['xmlrpcArray'] => 2,
+ $GLOBALS['xmlrpcStruct'] => 3
+ );
+
+ $GLOBALS['xmlrpc_valid_parents'] = array(
+ 'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
+ 'BOOLEAN' => array('VALUE'),
+ 'I4' => array('VALUE'),
+ 'INT' => array('VALUE'),
+ 'STRING' => array('VALUE'),
+ 'DOUBLE' => array('VALUE'),
+ 'DATETIME.ISO8601' => array('VALUE'),
+ 'BASE64' => array('VALUE'),
+ 'MEMBER' => array('STRUCT'),
+ 'NAME' => array('MEMBER'),
+ 'DATA' => array('ARRAY'),
+ 'ARRAY' => array('VALUE'),
+ 'STRUCT' => array('VALUE'),
+ 'PARAM' => array('PARAMS'),
+ 'METHODNAME' => array('METHODCALL'),
+ 'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
+ 'FAULT' => array('METHODRESPONSE'),
+ 'NIL' => array('VALUE') // only used when extension activated
+ );
+
+ // define extra types for supporting NULL (useful for json or <NIL/>)
+ $GLOBALS['xmlrpcNull']='null';
+ $GLOBALS['xmlrpcTypes']['null']=1;
+
+ // Not in use anymore since 2.0. Shall we remove it?
+ /// @deprecated
+ $GLOBALS['xmlEntities']=array(
+ 'amp' => '&',
+ 'quot' => '"',
+ 'lt' => '<',
+ 'gt' => '>',
+ 'apos' => "'"
+ );
+
+ // tables used for transcoding different charsets into us-ascii xml
+
+ $GLOBALS['xml_iso88591_Entities']=array();
+ $GLOBALS['xml_iso88591_Entities']['in'] = array();
+ $GLOBALS['xml_iso88591_Entities']['out'] = array();
+ for ($i = 0; $i < 32; $i++)
+ {
+ $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
+ $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
+ }
+ for ($i = 160; $i < 256; $i++)
+ {
+ $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
+ $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
+ }
+
+ /// @todo add to iso table the characters from cp_1252 range, i.e. 128 to 159.
+ /// These will NOT be present in true ISO-8859-1, but will save the unwary
+ /// windows user from sending junk.
+/*
+$cp1252_to_xmlent =
+ array(
+ '\x80'=>'€', '\x81'=>'?', '\x82'=>'‚', '\x83'=>'ƒ',
+ '\x84'=>'„', '\x85'=>'…', '\x86'=>'†', \x87'=>'‡',
+ '\x88'=>'ˆ', '\x89'=>'‰', '\x8A'=>'Š', '\x8B'=>'‹',
+ '\x8C'=>'Œ', '\x8D'=>'?', '\x8E'=>'Ž', '\x8F'=>'?',
+ '\x90'=>'?', '\x91'=>'‘', '\x92'=>'’', '\x93'=>'“',
+ '\x94'=>'”', '\x95'=>'•', '\x96'=>'–', '\x97'=>'—',
+ '\x98'=>'˜', '\x99'=>'™', '\x9A'=>'š', '\x9B'=>'›',
+ '\x9C'=>'œ', '\x9D'=>'?', '\x9E'=>'ž', '\x9F'=>'Ÿ'
+ );
+*/
+
+ $GLOBALS['xmlrpcerr']['unknown_method']=1;
+ $GLOBALS['xmlrpcstr']['unknown_method']='Unknown method';
+ $GLOBALS['xmlrpcerr']['invalid_return']=2;
+ $GLOBALS['xmlrpcstr']['invalid_return']='Invalid return payload: enable debugging to examine incoming payload';
+ $GLOBALS['xmlrpcerr']['incorrect_params']=3;
+ $GLOBALS['xmlrpcstr']['incorrect_params']='Incorrect parameters passed to method';
+ $GLOBALS['xmlrpcerr']['introspect_unknown']=4;
+ $GLOBALS['xmlrpcstr']['introspect_unknown']="Can't introspect: method unknown";
+ $GLOBALS['xmlrpcerr']['http_error']=5;
+ $GLOBALS['xmlrpcstr']['http_error']="Didn't receive 200 OK from remote server.";
+ $GLOBALS['xmlrpcerr']['no_data']=6;
+ $GLOBALS['xmlrpcstr']['no_data']='No data received from server.';
+ $GLOBALS['xmlrpcerr']['no_ssl']=7;
+ $GLOBALS['xmlrpcstr']['no_ssl']='No SSL support compiled in.';
+ $GLOBALS['xmlrpcerr']['curl_fail']=8;
+ $GLOBALS['xmlrpcstr']['curl_fail']='CURL error';
+ $GLOBALS['xmlrpcerr']['invalid_request']=15;
+ $GLOBALS['xmlrpcstr']['invalid_request']='Invalid request payload';
+ $GLOBALS['xmlrpcerr']['no_curl']=16;
+ $GLOBALS['xmlrpcstr']['no_curl']='No CURL support compiled in.';
+ $GLOBALS['xmlrpcerr']['server_error']=17;
+ $GLOBALS['xmlrpcstr']['server_error']='Internal server error';
+ $GLOBALS['xmlrpcerr']['multicall_error']=18;
+ $GLOBALS['xmlrpcstr']['multicall_error']='Received from server invalid multicall response';
+
+ $GLOBALS['xmlrpcerr']['multicall_notstruct'] = 9;
+ $GLOBALS['xmlrpcstr']['multicall_notstruct'] = 'system.multicall expected struct';
+ $GLOBALS['xmlrpcerr']['multicall_nomethod'] = 10;
+ $GLOBALS['xmlrpcstr']['multicall_nomethod'] = 'missing methodName';
+ $GLOBALS['xmlrpcerr']['multicall_notstring'] = 11;
+ $GLOBALS['xmlrpcstr']['multicall_notstring'] = 'methodName is not a string';
+ $GLOBALS['xmlrpcerr']['multicall_recursion'] = 12;
+ $GLOBALS['xmlrpcstr']['multicall_recursion'] = 'recursive system.multicall forbidden';
+ $GLOBALS['xmlrpcerr']['multicall_noparams'] = 13;
+ $GLOBALS['xmlrpcstr']['multicall_noparams'] = 'missing params';
+ $GLOBALS['xmlrpcerr']['multicall_notarray'] = 14;
+ $GLOBALS['xmlrpcstr']['multicall_notarray'] = 'params is not an array';
+
+ $GLOBALS['xmlrpcerr']['cannot_decompress']=103;
+ $GLOBALS['xmlrpcstr']['cannot_decompress']='Received from server compressed HTTP and cannot decompress';
+ $GLOBALS['xmlrpcerr']['decompress_fail']=104;
+ $GLOBALS['xmlrpcstr']['decompress_fail']='Received from server invalid compressed HTTP';
+ $GLOBALS['xmlrpcerr']['dechunk_fail']=105;
+ $GLOBALS['xmlrpcstr']['dechunk_fail']='Received from server invalid chunked HTTP';
+ $GLOBALS['xmlrpcerr']['server_cannot_decompress']=106;
+ $GLOBALS['xmlrpcstr']['server_cannot_decompress']='Received from client compressed HTTP request and cannot decompress';
+ $GLOBALS['xmlrpcerr']['server_decompress_fail']=107;
+ $GLOBALS['xmlrpcstr']['server_decompress_fail']='Received from client invalid compressed HTTP request';
+
+ // The charset encoding used by the server for received messages and
+ // by the client for received responses when received charset cannot be determined
+ // or is not supported
+ $GLOBALS['xmlrpc_defencoding']='UTF-8';
+
+ // The encoding used internally by PHP.
+ // String values received as xml will be converted to this, and php strings will be converted to xml
+ // as if having been coded with this
+ $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
+
+ $GLOBALS['xmlrpcName']='XML-RPC for PHP';
+ $GLOBALS['xmlrpcVersion']='2.1';
+
+ // let user errors start at 800
+ $GLOBALS['xmlrpcerruser']=800;
+ // let XML parse errors start at 100
+ $GLOBALS['xmlrpcerrxml']=100;
+
+ // formulate backslashes for escaping regexp
+ // Not in use anymore since 2.0. Shall we remove it?
+ /// @deprecated
+ $GLOBALS['xmlrpc_backslash']=chr(92).chr(92);
+
+ // used to store state during parsing
+ // quick explanation of components:
+ // ac - used to accumulate values
+ // isf - used to indicate a parsing fault (2) or xmlrpcresp fault (1)
+ // isf_reason - used for storing xmlrpcresp fault string
+ // lv - used to indicate "looking for a value": implements
+ // the logic to allow values with no types to be strings
+ // params - used to store parameters in method calls
+ // method - used to store method name
+ // stack - array with genealogy of xml elements names:
+ // used to validate nesting of xmlrpc elements
+ $GLOBALS['_xh']=null;
+
+ /**
+ * Convert a string to the correct XML representation in a target charset
+ * To help correct communication of non-ascii chars inside strings, regardless
+ * of the charset used when sending requests, parsing them, sending responses
+ * and parsing responses, an option is to convert all non-ascii chars present in the message
+ * into their equivalent 'charset entity'. Charset entities enumerated this way
+ * are independent of the charset encoding used to transmit them, and all XML
+ * parsers are bound to understand them.
+ * Note that in the std case we are not sending a charset encoding mime type
+ * along with http headers, so we are bound by RFC 3023 to emit strict us-ascii.
+ *
+ * @todo do a bit of basic benchmarking (strtr vs. str_replace)
+ * @todo make usage of iconv() or recode_string() or mb_string() where available
+ */
+ function xmlrpc_encode_entitites($data, $src_encoding='', $dest_encoding='')
+ {
+ if ($src_encoding == '')
+ {
+ // lame, but we know no better...
+ $src_encoding = $GLOBALS['xmlrpc_internalencoding'];
+ }
+
+ switch(strtoupper($src_encoding.'_'.$dest_encoding))
+ {
+ case 'ISO-8859-1_':
+ case 'ISO-8859-1_US-ASCII':
+ $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
+ $escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
+ break;
+ case 'ISO-8859-1_UTF-8':
+ $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
+ $escaped_data = utf8_encode($escaped_data);
+ break;
+ case 'ISO-8859-1_ISO-8859-1':
+ case 'US-ASCII_US-ASCII':
+ case 'US-ASCII_UTF-8':
+ case 'US-ASCII_':
+ case 'US-ASCII_ISO-8859-1':
+ case 'UTF-8_UTF-8':
+ $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
+ break;
+ case 'UTF-8_':
+ case 'UTF-8_US-ASCII':
+ case 'UTF-8_ISO-8859-1':
+ // NB: this will choke on invalid UTF-8, going most likely beyond EOF
+ $escaped_data = '';
+ // be kind to users creating string xmlrpcvals out of different php types
+ $data = (string) $data;
+ $ns = strlen ($data);
+ for ($nn = 0; $nn < $ns; $nn++)
+ {
+ $ch = $data[$nn];
+ $ii = ord($ch);
+ //1 7 0bbbbbbb (127)
+ if ($ii < 128)
+ {
+ /// @todo shall we replace this with a (supposedly) faster str_replace?
+ switch($ii){
+ case 34:
+ $escaped_data .= '"';
+ break;
+ case 38:
+ $escaped_data .= '&';
+ break;
+ case 39:
+ $escaped_data .= ''';
+ break;
+ case 60:
+ $escaped_data .= '<';
+ break;
+ case 62:
+ $escaped_data .= '>';
+ break;
+ default:
+ $escaped_data .= $ch;
+ } // switch
+ }
+ //2 11 110bbbbb 10bbbbbb (2047)
+ else if ($ii>>5 == 6)
+ {
+ $b1 = ($ii & 31);
+ $ii = ord($data[$nn+1]);
+ $b2 = ($ii & 63);
+ $ii = ($b1 * 64) + $b2;
+ $ent = sprintf ('&#%d;', $ii);
+ $escaped_data .= $ent;
+ }
+ //3 16 1110bbbb 10bbbbbb 10bbbbbb
+ else if ($ii>>4 == 14)
+ {
+ $b1 = ($ii & 31);
+ $ii = ord($data[$nn+1]);
+ $b2 = ($ii & 63);
+ $ii = ord($data[$nn+2]);
+ $b3 = ($ii & 63);
+ $ii = ((($b1 * 64) + $b2) * 64) + $b3;
+ $ent = sprintf ('&#%d;', $ii);
+ $escaped_data .= $ent;
+ }
+ //4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
+ else if ($ii>>3 == 30)
+ {
+ $b1 = ($ii & 31);
+ $ii = ord($data[$nn+1]);
+ $b2 = ($ii & 63);
+ $ii = ord($data[$nn+2]);
+ $b3 = ($ii & 63);
+ $ii = ord($data[$nn+3]);
+ $b4 = ($ii & 63);
+ $ii = ((((($b1 * 64) + $b2) * 64) + $b3) * 64) + $b4;
+ $ent = sprintf ('&#%d;', $ii);
+ $escaped_data .= $ent;
+ }
+ }
+ break;
+ default:
+ $escaped_data = '';
+ error_log("Converting from $src_encoding to $dest_encoding: not supported...");
+ }
+ return $escaped_data;
+ }
+
+ /// xml parser handler function for opening element tags
+ function xmlrpc_se($parser, $name, $attrs, $accept_single_vals=false)
+ {
+ // if invalid xmlrpc already detected, skip all processing
+ if ($GLOBALS['_xh']['isf'] < 2)
+ {
+ // check for correct element nesting
+ // top level element can only be of 2 types
+ /// @todo optimization creep: save this check into a bool variable, instead of using count() every time:
+ /// there is only a single top level element in xml anyway
+ if (count($GLOBALS['_xh']['stack']) == 0)
+ {
+ if ($name != 'METHODRESPONSE' && $name != 'METHODCALL' && (
+ $name != 'VALUE' && !$accept_single_vals))
+ {
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = 'missing top level xmlrpc element';
+ return;
+ }
+ else
+ {
+ $GLOBALS['_xh']['rt'] = strtolower($name);
+ }
+ }
+ else
+ {
+ // not top level element: see if parent is OK
+ $parent = end($GLOBALS['_xh']['stack']);
+ if (!array_key_exists($name, $GLOBALS['xmlrpc_valid_parents']) || !in_array($parent, $GLOBALS['xmlrpc_valid_parents'][$name]))
+ {
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = "xmlrpc element $name cannot be child of $parent";
+ return;
+ }
+ }
+
+ switch($name)
+ {
+ // optimize for speed switch cases: most common cases first
+ case 'VALUE':
+ /// @todo we could check for 2 VALUE elements inside a MEMBER or PARAM element
+ $GLOBALS['_xh']['vt']='value'; // indicator: no value found yet
+ $GLOBALS['_xh']['ac']='';
+ $GLOBALS['_xh']['lv']=1;
+ $GLOBALS['_xh']['php_class']=null;
+ break;
+ case 'I4':
+ case 'INT':
+ case 'STRING':
+ case 'BOOLEAN':
+ case 'DOUBLE':
+ case 'DATETIME.ISO8601':
+ case 'BASE64':
+ if ($GLOBALS['_xh']['vt']!='value')
+ {
+ //two data elements inside a value: an error occurred!
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
+ return;
+ }
+ $GLOBALS['_xh']['ac']=''; // reset the accumulator
+ break;
+ case 'STRUCT':
+ case 'ARRAY':
+ if ($GLOBALS['_xh']['vt']!='value')
+ {
+ //two data elements inside a value: an error occurred!
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
+ return;
+ }
+ // create an empty array to hold child values, and push it onto appropriate stack
+ $cur_val = array();
+ $cur_val['values'] = array();
+ $cur_val['type'] = $name;
+ // check for out-of-band information to rebuild php objs
+ // and in case it is found, save it
+ if (@isset($attrs['PHP_CLASS']))
+ {
+ $cur_val['php_class'] = $attrs['PHP_CLASS'];
+ }
+ $GLOBALS['_xh']['valuestack'][] = $cur_val;
+ $GLOBALS['_xh']['vt']='data'; // be prepared for a data element next
+ break;
+ case 'DATA':
+ if ($GLOBALS['_xh']['vt']!='data')
+ {
+ //two data elements inside a value: an error occurred!
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = "found two data elements inside an array element";
+ return;
+ }
+ case 'METHODCALL':
+ case 'METHODRESPONSE':
+ case 'PARAMS':
+ // valid elements that add little to processing
+ break;
+ case 'METHODNAME':
+ case 'NAME':
+ /// @todo we could check for 2 NAME elements inside a MEMBER element
+ $GLOBALS['_xh']['ac']='';
+ break;
+ case 'FAULT':
+ $GLOBALS['_xh']['isf']=1;
+ break;
+ case 'MEMBER':
+ $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name']=''; // set member name to null, in case we do not find in the xml later on
+ //$GLOBALS['_xh']['ac']='';
+ // Drop trough intentionally
+ case 'PARAM':
+ // clear value type, so we can check later if no value has been passed for this param/member
+ $GLOBALS['_xh']['vt']=null;
+ break;
+ case 'NIL':
+ // we do not support the <NIL/> extension yet, so
+ // drop through intentionally
+ default:
+ /// INVALID ELEMENT: RAISE ISF so that it is later recognized!!!
+ $GLOBALS['_xh']['isf'] = 2;
+ $GLOBALS['_xh']['isf_reason'] = "found not-xmlrpc xml element $name";
+ break;
+ }
+
+ // Save current element name to stack, to validate nesting
+ $GLOBALS['_xh']['stack'][] = $name;
+
+ /// @todo optimization creep: move this inside the big switch() above
+ if($name!='VALUE')
+ {
+ $GLOBALS['_xh']['lv']=0;
+ }
+ }
+ }
+
+ /// Used in decoding xml chunks that might represent single xmlrpc values
+ function xmlrpc_se_any($parser, $name, $attrs)
+ {
+ xmlrpc_se($parser, $name, $attrs, true);
+ }
+
+ /// xml parser handler function for close element tags
+ function xmlrpc_ee($parser, $name, $rebuild_xmlrpcvals = true)
+ {
+ if ($GLOBALS['_xh']['isf'] < 2)
+ {
+ // push this element name from stack
+ // NB: if XML validates, correct opening/closing is guaranteed and
+ // we do not have to check for $name == $curr_elem.
+ // we also checked for proper nesting at start of elements...
+ $curr_elem = array_pop($GLOBALS['_xh']['stack']);
+
+ switch($name)
+ {
+ case 'VALUE':
+ // This if() detects if no scalar was inside <VALUE></VALUE>
+ if ($GLOBALS['_xh']['vt']=='value')
+ {
+ $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+ $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcString'];
+ }
+
+ if ($rebuild_xmlrpcvals)
+ {
+ // build the xmlrpc val out of the data received, and substitute it
+ $temp =& new xmlrpcval($GLOBALS['_xh']['value'], $GLOBALS['_xh']['vt']);
+ // in case we got info about underlying php class, save it
+ // in the object we're rebuilding
+ if (isset($GLOBALS['_xh']['php_class']))
+ $temp->_php_class = $GLOBALS['_xh']['php_class'];
+ // check if we are inside an array or struct:
+ // if value just built is inside an array, let's move it into array on the stack
+ $vscount = count($GLOBALS['_xh']['valuestack']);
+ if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
+ {
+ $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $temp;
+ }
+ else
+ {
+ $GLOBALS['_xh']['value'] = $temp;
+ }
+ }
+ else
+ {
+ /// @todo this needs to treat correctly php-serialized objects,
+ /// since std deserializing is done by php_xmlrpc_decode,
+ /// which we will not be calling...
+ if (isset($GLOBALS['_xh']['php_class']))
+ {
+ }
+
+ // check if we are inside an array or struct:
+ // if value just built is inside an array, let's move it into array on the stack
+ $vscount = count($GLOBALS['_xh']['valuestack']);
+ if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
+ {
+ $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $GLOBALS['_xh']['value'];
+ }
+ }
+ break;
+ case 'BOOLEAN':
+ case 'I4':
+ case 'INT':
+ case 'STRING':
+ case 'DOUBLE':
+ case 'DATETIME.ISO8601':
+ case 'BASE64':
+ $GLOBALS['_xh']['vt']=strtolower($name);
+ /// @todo: optimization creep - remove the if/elseif cycle below
+ /// since the case() in which we are already did that
+ if ($name=='STRING')
+ {
+ $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+ }
+ elseif ($name=='DATETIME.ISO8601')
+ {
+ if (!preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $GLOBALS['_xh']['ac']))
+ {
+ error_log('XML-RPC: invalid value received in DATETIME: '.$GLOBALS['_xh']['ac']);
+ }
+ $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcDateTime'];
+ $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+ }
+ elseif ($name=='BASE64')
+ {
+ /// @todo check for failure of base64 decoding / catch warnings
+ $GLOBALS['_xh']['value']=base64_decode($GLOBALS['_xh']['ac']);
+ }
+ elseif ($name=='BOOLEAN')
+ {
+ // special case here: we translate boolean 1 or 0 into PHP
+ // constants true or false.
+ // Strings 'true' and 'false' are accepted, even though the
+ // spec never mentions them (see eg. Blogger api docs)
+ // NB: this simple checks helps a lot sanitizing input, ie no
+ // security problems around here
+ if ($GLOBALS['_xh']['ac']=='1' || strcasecmp($GLOBALS['_xh']['ac'], 'true') == 0)
+ {
+ $GLOBALS['_xh']['value']=true;
+ }
+ else
+ {
+ // log if receiveing something strange, even though we set the value to false anyway
+ if ($GLOBALS['_xh']['ac']!='0' && strcasecmp($_xh[$parser]['ac'], 'false') != 0)
+ error_log('XML-RPC: invalid value received in BOOLEAN: '.$GLOBALS['_xh']['ac']);
+ $GLOBALS['_xh']['value']=false;
+ }
+ }
+ elseif ($name=='DOUBLE')
+ {
+ // we have a DOUBLE
+ // we must check that only 0123456789-.<space> are characters here
+ if (!preg_match('/^[+-]?[eE0123456789 \t.]+$/', $GLOBALS['_xh']['ac']))
+ {
+ /// @todo: find a better way of throwing an error
+ // than this!
+ error_log('XML-RPC: non numeric value received in DOUBLE: '.$GLOBALS['_xh']['ac']);
+ $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
+ }
+ else
+ {
+ // it's ok, add it on
+ $GLOBALS['_xh']['value']=(double)$GLOBALS['_xh']['ac'];
+ }
+ }
+ else
+ {
+ // we have an I4/INT
+ // we must check that only 0123456789-<space> are characters here
+ if (!preg_match('/^[+-]?[0123456789 \t]+$/', $GLOBALS['_xh']['ac']))
+ {
+ /// @todo find a better way of throwing an error
+ // than this!
+ error_log('XML-RPC: non numeric value received in INT: '.$GLOBALS['_xh']['ac']);
+ $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
+ }
+ else
+ {
+ // it's ok, add it on
+ $GLOBALS['_xh']['value']=(int)$GLOBALS['_xh']['ac'];
+ }
+ }
+ //$GLOBALS['_xh']['ac']=''; // is this necessary?
+ $GLOBALS['_xh']['lv']=3; // indicate we've found a value
+ break;
+ case 'NAME':
+ $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name'] = $GLOBALS['_xh']['ac'];
+ break;
+ case 'MEMBER':
+ //$GLOBALS['_xh']['ac']=''; // is this necessary?
+ // add to array in the stack the last element built,
+ // unless no VALUE was found
+ if ($GLOBALS['_xh']['vt'])
+ {
+ $vscount = count($GLOBALS['_xh']['valuestack']);
+ $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][$GLOBALS['_xh']['valuestack'][$vscount-1]['name']] = $GLOBALS['_xh']['value'];
+ } else
+ error_log('XML-RPC: missing VALUE inside STRUCT in received xml');
+ break;
+ case 'DATA':
+ //$GLOBALS['_xh']['ac']=''; // is this necessary?
+ $GLOBALS['_xh']['vt']=null; // reset this to check for 2 data elements in a row - even if they're empty
+ break;
+ case 'STRUCT':
+ case 'ARRAY':
+ // fetch out of stack array of values, and promote it to current value
+ $curr_val = array_pop($GLOBALS['_xh']['valuestack']);
+ $GLOBALS['_xh']['value'] = $curr_val['values'];
+ $GLOBALS['_xh']['vt']=strtolower($name);
+ if (isset($curr_val['php_class']))
+ {
+ $GLOBALS['_xh']['php_class'] = $curr_val['php_class'];
+ }
+ break;
+ case 'PARAM':
+ // add to array of params the current value,
+ // unless no VALUE was found
+ if ($GLOBALS['_xh']['vt'])
+ {
+ $GLOBALS['_xh']['params'][]=$GLOBALS['_xh']['value'];
+ $GLOBALS['_xh']['pt'][]=$GLOBALS['_xh']['vt'];
+ }
+ else
+ error_log('XML-RPC: missing VALUE inside PARAM in received xml');
+ break;
+ case 'METHODNAME':
+ $GLOBALS['_xh']['method']=preg_replace('/^[\n\r\t ]+/', '', $GLOBALS['_xh']['ac']);
+ break;
+ case 'PARAMS':
+ case 'FAULT':
+ case 'METHODCALL':
+ case 'METHORESPONSE':
+ break;
+ default:
+ // End of INVALID ELEMENT!
+ // shall we add an assert here for unreachable code???
+ break;
+ }
+ }
+ }
+
+ /// Used in decoding xmlrpc requests/responses without rebuilding xmlrpc values
+ function xmlrpc_ee_fast($parser, $name)
+ {
+ xmlrpc_ee($parser, $name, false);
+ }
+
+ /// xml parser handler function for character data
+ function xmlrpc_cd($parser, $data)
+ {
+ // skip processing if xml fault already detected
+ if ($GLOBALS['_xh']['isf'] < 2)
+ {
+ // "lookforvalue==3" means that we've found an entire value
+ // and should discard any further character data
+ if($GLOBALS['_xh']['lv']!=3)
+ {
+ // G. Giunta 2006-08-23: useless change of 'lv' from 1 to 2
+ //if($GLOBALS['_xh']['lv']==1)
+ //{
+ // if we've found text and we're just in a <value> then
+ // say we've found a value
+ //$GLOBALS['_xh']['lv']=2;
+ //}
+ // we always initialize the accumulator before starting parsing, anyway...
+ //if(!@isset($GLOBALS['_xh']['ac']))
+ //{
+ // $GLOBALS['_xh']['ac'] = '';
+ //}
+ $GLOBALS['_xh']['ac'].=$data;
+ }
+ }
+ }
+
+ /// xml parser handler function for 'other stuff', ie. not char data or
+ /// element start/end tag. In fact it only gets called on unknown entities...
+ function xmlrpc_dh($parser, $data)
+ {
+ // skip processing if xml fault already detected
+ if ($GLOBALS['_xh']['isf'] < 2)
+ {
+ if(substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')
+ {
+ // G. Giunta 2006-08-25: useless change of 'lv' from 1 to 2
+ //if($GLOBALS['_xh']['lv']==1)
+ //{
+ // $GLOBALS['_xh']['lv']=2;
+ //}
+ $GLOBALS['_xh']['ac'].=$data;
+ }
+ }
+ return true;
+ }
+
+ class xmlrpc_client
+ {
+ var $path;
+ var $server;
+ var $port=0;
+ var $method='http';
+ var $errno;
+ var $errstr;
+ var $debug=0;
+ var $username='';
+ var $password='';
+ var $authtype=1;
+ var $cert='';
+ var $certpass='';
+ var $cacert='';
+ var $cacertdir='';
+ var $key='';
+ var $keypass='';
+ var $verifypeer=true;
+ var $verifyhost=1;
+ var $no_multicall=false;
+ var $proxy='';
+ var $proxyport=0;
+ var $proxy_user='';
+ var $proxy_pass='';
+ var $proxy_authtype=1;
+ var $cookies=array();
+ /**
+ * List of http compression methods accepted by the client for responses.
+ * NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
+ *
+ * NNB: you can set it to any non-empty array for HTTP11 and HTTPS, since
+ * in those cases it will be up to CURL to decide the compression methods
+ * it supports. You might check for the presence of 'zlib' in the output of
+ * curl_version() to determine wheter compression is supported or not
+ */
+ var $accepted_compression = array();
+ /**
+ * Name of compression scheme to be used for sending requests.
+ * Either null, gzip or deflate
+ */
+ var $request_compression = '';
+ /**
+ * CURL handle: used for keep-alive connections (PHP 4.3.8 up, see:
+ * http://curl.haxx.se/docs/faq.html#7.3)
+ */
+ var $xmlrpc_curl_handle = null;
+ /// Wheter to use persistent connections for http 1.1 and https
+ var $keepalive = false;
+ /// Charset encodings that can be decoded without problems by the client
+ var $accepted_charset_encodings = array();
+ /// Charset encoding to be used in serializing request. NULL = use ASCII
+ var $request_charset_encoding = '';
+ /**
+ * Decides the content of xmlrpcresp objects returned by calls to send()
+ * valid strings are 'xmlrpcvals', 'phpvals' or 'xml'
+ */
+ var $return_type = 'xmlrpcvals';
+
+ /**
+ * @param string $path either the complete server URL or the PATH part of the xmlrc server URL, e.g. /xmlrpc/server.php
+ * @param string $server the server name / ip address
+ * @param integer $port the port the server is listening on, defaults to 80 or 443 depending on protocol used
+ * @param string $method the http protocol variant: defaults to 'http', 'https' and 'http11' can be used if CURL is installed
+ */
+ function xmlrpc_client($path, $server='', $port='', $method='')
+ {
+ // allow user to specify all params in $path
+ if($server == '' and $port == '' and $method == '')
+ {
+ $parts = parse_url($path);
+ $server = $parts['host'];
+ $path = $parts['path'];
+ if(isset($parts['query']))
+ {
+ $path .= '?'.$parts['query'];
+ }
+ if(isset($parts['fragment']))
+ {
+ $path .= '#'.$parts['fragment'];
+ }
+ if(isset($parts['port']))
+ {
+ $port = $parts['port'];
+ }
+ if(isset($parts['scheme']))
+ {
+ $method = $parts['scheme'];
+ }
+ if(isset($parts['user']))
+ {
+ $this->username = $parts['user'];
+ }
+ if(isset($parts['pass']))
+ {
+ $this->password = $parts['pass'];
+ }
+ }
+ if($path == '' || $path[0] != '/')
+ {
+ $this->path='/'.$path;
+ }
+ else
+ {
+ $this->path=$path;
+ }
+ $this->server=$server;
+ if($port != '')
+ {
+ $this->port=$port;
+ }
+ if($method != '')
+ {
+ $this->method=$method;
+ }
+
+ // if ZLIB is enabled, let the client by default accept compressed responses
+ if(function_exists('gzinflate') || (
+ function_exists('curl_init') && (($info = curl_version()) &&
+ ((is_string($info) && strpos($info, 'zlib') !== null) || isset($info['libz_version'])))
+ ))
+ {
+ $this->accepted_compression = array('gzip', 'deflate');
+ }
+
+ // keepalives: enabled by default ONLY for PHP >= 4.3.8
+ // (see http://curl.haxx.se/docs/faq.html#7.3)
+ if(version_compare(phpversion(), '4.3.8') >= 0)
+ {
+ $this->keepalive = true;
+ }
+
+ // by default the xml parser can support these 3 charset encodings
+ $this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
+ }
+
+ /**
+ * Enables/disables the echoing to screen of the xmlrpc responses received
+ * @param integer $debug values 0, 1 and 2 are supported (2 = echo sent msg too, before received response)
+ * @access public
+ */
+ function setDebug($in)
+ {
+ $this->debug=$in;
+ }
+
+ /**
+ * Add some http BASIC AUTH credentials, used by the client to authenticate
+ * @param string $u username
+ * @param string $p password
+ * @param integer $t auth type. See curl_setopt man page for supported auth types. Defaults to CURLAUTH_BASIC (basic auth)
+ * @access public
+ */
+ function setCredentials($u, $p, $t=1)
+ {
+ $this->username=$u;
+ $this->password=$p;
+ $this->authtype=$t;
+ }
+
+ /**
+ * Add a client-side https certificate
+ * @param string $cert
+ * @param string $certpass
+ * @access public
+ */
+ function setCertificate($cert, $certpass)
+ {
+ $this->cert = $cert;
+ $this->certpass = $certpass;
+ }
+
+ /**
+ * Add a CA certificate to verify server with (see man page about
+ * CURLOPT_CAINFO for more details
+ * @param string $cacert certificate file name (or dir holding certificates)
+ * @param bool $is_dir set to true to indicate cacert is a dir. defaults to false
+ * @access public
+ */
+ function setCaCertificate($cacert, $is_dir=false)
+ {
+ if ($is_dir)
+ {
+ $this->cacert = $cacert;
+ }
+ else
+ {
+ $this->cacertdir = $cacert;
+ }
+ }
+
+ /**
+ * Set attributes for SSL communication: private SSL key
+ * @param string $key The name of a file containing a private SSL key
+ * @param string $keypass The secret password needed to use the private SSL key
+ * @access public
+ * NB: does not work in older php/curl installs
+ * Thanks to Daniel Convissor
+ */
+ function setKey($key, $keypass)
+ {
+ $this->key = $key;
+ $this->keypass = $keypass;
+ }
+
+ /**
+ * Set attributes for SSL communication: verify server certificate
+ * @param bool $i enable/disable verification of peer certificate
+ * @access public
+ */
+ function setSSLVerifyPeer($i)
+ {
+ $this->verifypeer = $i;
+ }
+
+ /**
+ * Set attributes for SSL communication: verify match of server cert w. hostname
+ * @param int $i
+ * @access public
+ */
+ function setSSLVerifyHost($i)
+ {
+ $this->verifyhost = $i;
+ }
+
+ /**
+ * Set proxy info
+ * @param string $proxyhost
+ * @param string $proxyport Defaults to 8080 for HTTP and 443 for HTTPS
+ * @param string $proxyusername Leave blank if proxy has public access
+ * @param string $proxypassword Leave blank if proxy has public access
+ * @param int $proxyauthtype set to constant CURLAUTH_MTLM to use NTLM auth with proxy
+ * @access public
+ */
+ function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '', $proxyauthtype = 1)
+ {
+ $this->proxy = $proxyhost;
+ $this->proxyport = $proxyport;
+ $this->proxy_user = $proxyusername;
+ $this->proxy_pass = $proxypassword;
+ $this->proxy_autthtype = $proxyauthtype;
+ }
+
+ /**
+ * Enables/disables reception of compressed xmlrpc responses.
+ * Note that enabling reception of compressed responses merely adds some standard
+ * http headers to xmlrpc requests. It is up to the xmlrpc server to return
+ * compressed responses when receiving such requests.
+ * @param string $compmethod either 'gzip', 'deflate', 'any' or ''
+ * @access public
+ */
+ function setAcceptedCompression($compmethod)
+ {
+ if ($compmethod == 'any')
+ $this->accepted_compression = array('gzip', 'deflate');
+ else
+ $this->accepted_compression = array($compmethod);
+ }
+
+ /**
+ * Enables/disables http compression of xmlrpc request.
+ * Take care when sending compressed requests: servers might not support them
+ * (and automatic fallback to uncompressed requests is not yet implemented)
+ * @param string $compmethod either 'gzip', 'deflate' or ''
+ * @access public
+ */
+ function setRequestCompression($compmethod)
+ {
+ $this->request_compression = $compmethod;
+ }
+
+ /**
+ * Adds a cookie to list of cookies that will be sent to server.
+ * NB: setting any param but name and value will turn the cookie into a 'version 1' cookie:
+ * do not do it unless you know what you are doing
+ * @param string $name
+ * @param string $value
+ * @param string $path
+ * @param string $domain
+ * @param int $port
+ * @access public
+ *
+ * @todo check correctness of urlencoding cookie value (copied from php way of doing it...)
+ */
+ function setCookie($name, $value='', $path='', $domain='', $port=null)
+ {
+ $this->cookies[$name]['value'] = urlencode($value);
+ if ($path || $domain || $port)
+ {
+ $this->cookies[$name]['path'] = $path;
+ $this->cookies[$name]['domain'] = $domain;
+ $this->cookies[$name]['port'] = $port;
+ $this->cookies[$name]['version'] = 1;
+ }
+ else
+ {
+ $this->cookies[$name]['version'] = 0;
+ }
+ }
+
+ /**
+ * Send an xmlrpc request
+ * @param mixed $msg The message object, or an array of messages for using multicall, or the complete xml representation of a request
+ * @param integer $timeout Connection timeout, in seconds, If unspecified, a platform specific timeout will apply
+ * @param string $method if left unspecified, the http protocol chosen during creation of the object will be used
+ * @return xmlrpcresp
+ * @access public
+ */
+ function& send($msg, $timeout=0, $method='')
+ {
+ // if user deos not specify http protocol, use native method of this client
+ // (i.e. method set during call to constructor)
+ if($method == '')
+ {
+ $method = $this->method;
+ }
+
+ if(is_array($msg))
+ {
+ // $msg is an array of xmlrpcmsg's
+ $r = $this->multicall($msg, $timeout, $method);
+ return $r;
+ }
+ elseif(is_string($msg))
+ {
+ $n =& new xmlrpcmsg('');
+ $n->payload = $msg;
+ $msg = $n;
+ }
+
+ // where msg is an xmlrpcmsg
+ $msg->debug=$this->debug;
+
+ if($method == 'https')
+ {
+ $r =& $this->sendPayloadHTTPS(
+ $msg,
+ $this->server,
+ $this->port,
+ $timeout,
+ $this->username,
+ $this->password,
+ $this->authtype,
+ $this->cert,
+ $this->certpass,
+ $this->cacert,
+ $this->cacertdir,
+ $this->proxy,
+ $this->proxyport,
+ $this->proxy_user,
+ $this->proxy_pass,
+ $this->proxy_authtype,
+ $this->keepalive,
+ $this->key,
+ $this->keypass
+ );
+ }
+ elseif($method == 'http11')
+ {
+ $r =& $this->sendPayloadCURL(
+ $msg,
+ $this->server,
+ $this->port,
+ $timeout,
+ $this->username,
+ $this->password,
+ $this->authtype,
+ null,
+ null,
+ null,
+ null,
+ $this->proxy,
+ $this->proxyport,
+ $this->proxy_user,
+ $this->proxy_pass,
+ $this->proxy_authtype,
+ 'http',
+ $this->keepalive
+ );
+ }
+ else
+ {
+ $r =& $this->sendPayloadHTTP10(
+ $msg,
+ $this->server,
+ $this->port,
+ $timeout,
+ $this->username,
+ $this->password,
+ $this->authtype,
+ $this->proxy,
+ $this->proxyport,
+ $this->proxy_user,
+ $this->proxy_pass,
+ $this->proxy_authtype
+ );
+ }
+
+ return $r;
+ }
+
+ /**
+ * @access private
+ */
+ function &sendPayloadHTTP10($msg, $server, $port, $timeout=0,
+ $username='', $password='', $authtype=1, $proxyhost='',
+ $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1)
+ {
+ if($port==0)
+ {
+ $port=80;
+ }
+
+ // Only create the payload if it was not created previously
+ if(empty($msg->payload))
+ {
+ $msg->createPayload($this->request_charset_encoding);
+ }
+
+ $payload = $msg->payload;
+ // Deflate request body and set appropriate request headers
+ if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
+ {
+ if($this->request_compression == 'gzip')
+ {
+ $a = @gzencode($payload);
+ if($a)
+ {
+ $payload = $a;
+ $encoding_hdr = "Content-Encoding: gzip\r\n";
+ }
+ }
+ else
+ {
+ $a = @gzcompress($payload);
+ if($a)
+ {
+ $payload = $a;
+ $encoding_hdr = "Content-Encoding: deflate\r\n";
+ }
+ }
+ }
+ else
+ {
+ $encoding_hdr = '';
+ }
+
+ // thanks to Grant Rauscher <grant7@firstworld.net> for this
+ $credentials='';
+ if($username!='')
+ {
+ $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
+ if ($authtype != 1)
+ {
+ error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth is supported with HTTP 1.0');
+ }
+ }
+
+ $accepted_encoding = '';
+ if(is_array($this->accepted_compression) && count($this->accepted_compression))
+ {
+ $accepted_encoding = 'Accept-Encoding: ' . implode(', ', $this->accepted_compression) . "\r\n";
+ }
+
+ $proxy_credentials = '';
+ if($proxyhost)
+ {
+ if($proxyport == 0)
+ {
+ $proxyport = 8080;
+ }
+ $connectserver = $proxyhost;
+ $connectport = $proxyport;
+ $uri = 'http://'.$server.':'.$port.$this->path;
+ if($proxyusername != '')
+ {
+ if ($proxyauthtype != 1)
+ {
+ error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth to proxy is supported with HTTP 1.0');
+ }
+ $proxy_credentials = 'Proxy-Authorization: Basic ' . base64_encode($proxyusername.':'.$proxypassword) . "\r\n";
+ }
+ }
+ else
+ {
+ $connectserver = $server;
+ $connectport = $port;
+ $uri = $this->path;
+ }
+
+ // Cookie generation, as per rfc2965 (version 1 cookies) or
+ // netscape's rules (version 0 cookies)
+ $cookieheader='';
+ foreach ($this->cookies as $name => $cookie)
+ {
+ if ($cookie['version'])
+ {
+ $cookieheader .= 'Cookie: $Version="' . $cookie['version'] . '"; ';
+ $cookieheader .= $name . '="' . $cookie['value'] . '";';
+ if ($cookie['path'])
+ $cookieheader .= ' $Path="' . $cookie['path'] . '";';
+ if ($cookie['domain'])
+ $cookieheader .= ' $Domain="' . $cookie['domain'] . '";';
+ if ($cookie['port'])
+ $cookieheader .= ' $Port="' . $cookie['domain'] . '";';
+ $cookieheader = substr($cookieheader, 0, -1) . "\r\n";
+ }
+ else
+ {
+ $cookieheader .= 'Cookie: ' . $name . '=' . $cookie['value'] . "\r\n";
+ }
+ }
+
+ $op= 'POST ' . $uri. " HTTP/1.0\r\n" .
+ 'User-Agent: ' . $GLOBALS['xmlrpcName'] . ' ' . $GLOBALS['xmlrpcVersion'] . "\r\n" .
+ 'Host: '. $server . ':' . $port . "\r\n" .
+ $credentials .
+ $proxy_credentials .
+ $accepted_encoding .
+ $encoding_hdr .
+ 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings) . "\r\n" .
+ $cookieheader .
+ 'Content-Type: ' . $msg->content_type . "\r\nContent-Length: " .
+ strlen($payload) . "\r\n\r\n" .
+ $payload;
+
+ if($this->debug > 1)
+ {
+ print "<PRE>\n---SENDING---\n" . htmlentities($op) . "\n---END---\n</PRE>";
+ // let the client see this now in case http times out...
+ flush();
+ }
+
+ if($timeout>0)
+ {
+ $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr, $timeout);
+ }
+ else
+ {
+ $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr);
+ }
+ if($fp)
+ {
+ if($timeout>0 && function_exists('stream_set_timeout'))
+ {
+ stream_set_timeout($fp, $timeout);
+ }
+ }
+ else
+ {
+ $this->errstr='Connect error: '.$this->errstr;
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr . ' (' . $this->errno . ')');
+ return $r;
+ }
+
+ if(!fputs($fp, $op, strlen($op)))
+ {
+ $this->errstr='Write error';
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr);
+ return $r;
+ }
+ else
+ {
+ // reset errno and errstr on succesful socket connection
+ $this->errstr = '';
+ }
+ // G. Giunta 2005/10/24: close socket before parsing.
+ // should yeld slightly better execution times, and make easier recursive calls (e.g. to follow http redirects)
+ $ipd='';
+ while($data=fread($fp, 32768))
+ {
+ // shall we check for $data === FALSE?
+ // as per the manual, it signals an error
+ $ipd.=$data;
+ }
+ fclose($fp);
+ $r =& $msg->parseResponse($ipd, false, $this->return_type);
+ return $r;
+
+ }
+
+ /**
+ * @access private
+ */
+ function &sendPayloadHTTPS($msg, $server, $port, $timeout=0, $username='',
+ $password='', $authtype=1, $cert='',$certpass='', $cacert='', $cacertdir='',
+ $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1,
+ $keepalive=false, $key='', $keypass='')
+ {
+ $r =& $this->sendPayloadCURL($msg, $server, $port, $timeout, $username,
+ $password, $authtype, $cert, $certpass, $cacert, $cacertdir, $proxyhost, $proxyport,
+ $proxyusername, $proxypassword, $proxyauthtype, 'https', $keepalive, $key, $keypass);
+ return $r;
+ }
+
+ /**
+ * Contributed by Justin Miller <justin@voxel.net>
+ * Requires curl to be built into PHP
+ * NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!
+ * @access private
+ */
+ function &sendPayloadCURL($msg, $server, $port, $timeout=0, $username='',
+ $password='', $authtype=1, $cert='', $certpass='', $cacert='', $cacertdir='',
+ $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1, $method='https',
+ $keepalive=false, $key='', $keypass='')
+ {
+ if(!function_exists('curl_init'))
+ {
+ $this->errstr='CURL unavailable on this install';
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_curl'], $GLOBALS['xmlrpcstr']['no_curl']);
+ return $r;
+ }
+ if($method == 'https')
+ {
+ if(($info = curl_version()) &&
+ ((is_string($info) && strpos($info, 'OpenSSL') === null) || (is_array($info) && !isset($info['ssl_version']))))
+ {
+ $this->errstr='SSL unavailable on this install';
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_ssl'], $GLOBALS['xmlrpcstr']['no_ssl']);
+ return $r;
+ }
+ }
+
+ if($port == 0)
+ {
+ if($method == 'http')
+ {
+ $port = 80;
+ }
+ else
+ {
+ $port = 443;
+ }
+ }
+
+ // Only create the payload if it was not created previously
+ if(empty($msg->payload))
+ {
+ $msg->createPayload($this->request_charset_encoding);
+ }
+
+ // Deflate request body and set appropriate request headers
+ $payload = $msg->payload;
+ if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
+ {
+ if($this->request_compression == 'gzip')
+ {
+ $a = @gzencode($payload);
+ if($a)
+ {
+ $payload = $a;
+ $encoding_hdr = 'Content-Encoding: gzip';
+ }
+ }
+ else
+ {
+ $a = @gzcompress($payload);
+ if($a)
+ {
+ $payload = $a;
+ $encoding_hdr = 'Content-Encoding: deflate';
+ }
+ }
+ }
+ else
+ {
+ $encoding_hdr = '';
+ }
+
+ if($this->debug > 1)
+ {
+ print "<PRE>\n---SENDING---\n" . htmlentities($payload) . "\n---END---\n</PRE>";
+ // let the client see this now in case http times out...
+ flush();
+ }
+
+ if(!$keepalive || !$this->xmlrpc_curl_handle)
+ {
+ $curl = curl_init($method . '://' . $server . ':' . $port . $this->path);
+ if($keepalive)
+ {
+ $this->xmlrpc_curl_handle = $curl;
+ }
+ }
+ else
+ {
+ $curl = $this->xmlrpc_curl_handle;
+ }
+
+ // results into variable
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+
+ if($this->debug)
+ {
+ curl_setopt($curl, CURLOPT_VERBOSE, 1);
+ }
+ curl_setopt($curl, CURLOPT_USERAGENT, $GLOBALS['xmlrpcName'].' '.$GLOBALS['xmlrpcVersion']);
+ // required for XMLRPC: post the data
+ curl_setopt($curl, CURLOPT_POST, 1);
+ // the data
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
+
+ // return the header too
+ curl_setopt($curl, CURLOPT_HEADER, 1);
+
+ // will only work with PHP >= 5.0
+ // NB: if we set an empty string, CURL will add http header indicating
+ // ALL methods it is supporting. This is possibly a better option than
+ // letting the user tell what curl can / cannot do...
+ if(is_array($this->accepted_compression) && count($this->accepted_compression))
+ {
+ //curl_setopt($curl, CURLOPT_ENCODING, implode(',', $this->accepted_compression));
+ // empty string means 'any supported by CURL' (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+ if (count($this->accepted_compression) == 1)
+ {
+ curl_setopt($curl, CURLOPT_ENCODING, $this->accepted_compression[0]);
+ }
+ else
+ curl_setopt($curl, CURLOPT_ENCODING, '');
+ }
+ // extra headers
+ $headers = array('Content-Type: ' . $msg->content_type , 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings));
+ // if no keepalive is wanted, let the server know it in advance
+ if(!$keepalive)
+ {
+ $headers[] = 'Connection: close';
+ }
+ // request compression header
+ if($encoding_hdr)
+ {
+ $headers[] = $encoding_hdr;
+ }
+
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ // timeout is borked
+ if($timeout)
+ {
+ curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);
+ }
+
+ if($username && $password)
+ {
+ curl_setopt($curl, CURLOPT_USERPWD, $username.':'.$password);
+ if (defined('CURLOPT_HTTPAUTH'))
+ {
+ curl_setopt($curl, CURLOPT_HTTPAUTH, $authtype);
+ }
+ else if ($authtype != 1)
+ {
+ error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth is supported by the current PHP/curl install');
+ }
+ }
+
+ if($method == 'https')
+ {
+ // set cert file
+ if($cert)
+ {
+ curl_setopt($curl, CURLOPT_SSLCERT, $cert);
+ }
+ // set cert password
+ if($certpass)
+ {
+ curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $certpass);
+ }
+ // whether to verify remote host's cert
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);
+ // set ca certificates file/dir
+ if($cacert)
+ {
+ curl_setopt($curl, CURLOPT_CAINFO, $cacert);
+ }
+ if($cacertdir)
+ {
+ curl_setopt($curl, CURLOPT_CAPATH, $cacertdir);
+ }
+ // set key file (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+ if($key)
+ {
+ curl_setopt($curl, CURLOPT_SSLKEY, $key);
+ }
+ // set key password (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+ if($keypass)
+ {
+ curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $keypass);
+ }
+ // whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);
+ }
+
+ // proxy info
+ if($proxyhost)
+ {
+ if($proxyport == 0)
+ {
+ $proxyport = 8080; // NB: even for HTTPS, local connection is on port 8080
+ }
+ curl_setopt($curl, CURLOPT_PROXY,$proxyhost.':'.$proxyport);
+ //curl_setopt($curl, CURLOPT_PROXYPORT,$proxyport);
+ if($proxyusername)
+ {
+ curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyusername.':'.$proxypassword);
+ if (defined('CURLOPT_PROXYAUTH'))
+ {
+ curl_setopt($curl, CURLOPT_PROXYAUTH, $proxyauthtype);
+ }
+ else if ($proxyauthtype != 1)
+ {
+ error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth to proxy is supported by the current PHP/curl install');
+ }
+ }
+ }
+
+ // NB: should we build cookie http headers by hand rather than let CURL do it?
+ // the following code does not honour 'expires', 'path' and 'domain' cookie attributes
+ // set to clint obj the the user...
+ if (count($this->cookies))
+ {
+ $cookieheader = '';
+ foreach ($this->cookies as $name => $cookie)
+ {
+ $cookieheader .= $name . '=' . $cookie['value'] . ', ';
+ }
+ curl_setopt($curl, CURLOPT_COOKIE, substr($cookieheader, 0, -2));
+ }
+
+ $result = curl_exec($curl);
+
+ if(!$result)
+ {
+ $this->errstr='no response';
+ $resp=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['curl_fail'], $GLOBALS['xmlrpcstr']['curl_fail']. ': '. curl_error($curl));
+ if(!$keepalive)
+ {
+ curl_close($curl);
+ }
+ }
+ else
+ {
+ if(!$keepalive)
+ {
+ curl_close($curl);
+ }
+ $resp =& $msg->parseResponse($result, true, $this->return_type);
+ }
+ return $resp;
+ }
+
+ /**
+ * Send an array of request messages and return an array of responses.
+ * Unless $this->no_multicall has been set to true, it will try first
+ * to use one single xmlrpc call to server method system.multicall, and
+ * revert to sending many successive calls in case of failure.
+ * This failure is also stored in $this->no_multicall for subsequent calls.
+ * Unfortunately, there is no server error code universally used to denote
+ * the fact that multicall is unsupported, so there is no way to reliably
+ * distinguish between that and a temporary failure.
+ * If you are sure that server supports multicall and do not want to
+ * fallback to using many single calls, set the fourth parameter to FALSE.
+ *
+ * NB: trying to shoehorn extra functionality into existing syntax has resulted
+ * in pretty much convoluted code...
+ *
+ * @param array $msgs an array of xmlrpcmsg objects
+ * @param integer $timeout connection timeout (in seconds)
+ * @param string $method the http protocol variant to be used
+ * @param boolen fallback When true, upon receiveing an error during multicall, multiple single calls will be attempted
+ * @return array
+ * @access public
+ */
+ function multicall($msgs, $timeout=0, $method='http', $fallback=true)
+ {
+ if(!$this->no_multicall)
+ {
+ $results = $this->_try_multicall($msgs, $timeout, $method);
+ if(is_array($results))
+ {
+ // System.multicall succeeded
+ return $results;
+ }
+ else
+ {
+ // either system.multicall is unsupported by server,
+ // or call failed for some other reason.
+ if ($fallback)
+ {
+ // Don't try it next time...
+ $this->no_multicall = true;
+ }
+ else
+ {
+ if (is_a($results, 'xmlrpcresp'))
+ {
+ $result = $results;
+ }
+ else
+ {
+ $result =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['multicall_error'], $GLOBALS['xmlrpcstr']['multicall_error']);
+ }
+ }
+ }
+ }
+ else
+ {
+ // override fallback, in case careless user tries to do two
+ // opposite things at the same time
+ $fallback = true;
+ }
+
+ $results = array();
+ if ($fallback)
+ {
+ // system.multicall is (probably) unsupported by server:
+ // emulate multicall via multiple requests
+ foreach($msgs as $msg)
+ {
+ $results[] =& $this->send($msg, $timeout, $method);
+ }
+ }
+ else
+ {
+ // user does NOT want to fallback on many single calls:
+ // since we should always return an array of responses,
+ // return an array with the same error repeated n times
+ foreach($msgs as $msg)
+ {
+ $results[] = $result;
+ }
+ }
+ return $results;
+ }
+
+ /**
+ * Attempt to boxcar $msgs via system.multicall.
+ * Returns either an array of xmlrpcreponses, an xmlrpc error response
+ * or false (when recived response does not respect valid multiccall syntax)
+ * @access private
+ */
+ function _try_multicall($msgs, $timeout, $method)
+ {
+ // Construct multicall message
+ $calls = array();
+ foreach($msgs as $msg)
+ {
+ $call['methodName'] =& new xmlrpcval($msg->method(),'string');
+ $numParams = $msg->getNumParams();
+ $params = array();
+ for($i = 0; $i < $numParams; $i++)
+ {
+ $params[$i] = $msg->getParam($i);
+ }
+ $call['params'] =& new xmlrpcval($params, 'array');
+ $calls[] =& new xmlrpcval($call, 'struct');
+ }
+ $multicall =& new xmlrpcmsg('system.multicall');
+ $multicall->addParam(new xmlrpcval($calls, 'array'));
+
+ // Attempt RPC call
+ $result =& $this->send($multicall, $timeout, $method);
+
+ if($result->faultCode() != 0)
+ {
+ // call to system.multicall failed
+ return $result;
+ }
+
+ // Unpack responses.
+ $rets = $result->value();
+
+ if ($this->return_type == 'xml')
+ {
+ return $rets;
+ }
+ else if ($this->return_type == 'phpvals')
+ {
+ ///@todo test this code branch...
+ $rets = $result->value();
+ if(!is_array($rets))
+ {
+ return false; // bad return type from system.multicall
+ }
+ $numRets = count($rets);
+ if($numRets != count($msgs))
+ {
+ return false; // wrong number of return values.
+ }
+
+ $response = array();
+ for($i = 0; $i < $numRets; $i++)
+ {
+ $val = $rets[$i];
+ if (!is_array($val)) {
+ return false;
+ }
+ switch(count($val))
+ {
+ case 1:
+ if(!isset($val[0]))
+ {
+ return false; // Bad value
+ }
+ // Normal return value
+ $response[$i] =& new xmlrpcresp($val[0], 0, '', 'phpvals');
+ break;
+ case 2:
+ /// @todo remove usage of @: it is apparently quite slow
+ $code = @$val['faultCode'];
+ if(!is_int($code))
+ {
+ return false;
+ }
+ $str = @$val['faultString'];
+ if(!is_string($str))
+ {
+ return false;
+ }
+ $response[$i] =& new xmlrpcresp(0, $code, $str);
+ break;
+ default:
+ return false;
+ }
+ }
+ return $response;
+ }
+ else // return type == 'xmlrpcvals'
+ {
+ $rets = $result->value();
+ if($rets->kindOf() != 'array')
+ {
+ return false; // bad return type from system.multicall
+ }
+ $numRets = $rets->arraysize();
+ if($numRets != count($msgs))
+ {
+ return false; // wrong number of return values.
+ }
+
+ $response = array();
+ for($i = 0; $i < $numRets; $i++)
+ {
+ $val = $rets->arraymem($i);
+ switch($val->kindOf())
+ {
+ case 'array':
+ if($val->arraysize() != 1)
+ {
+ return false; // Bad value
+ }
+ // Normal return value
+ $response[$i] =& new xmlrpcresp($val->arraymem(0));
+ break;
+ case 'struct':
+ $code = $val->structmem('faultCode');
+ if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')
+ {
+ return false;
+ }
+ $str = $val->structmem('faultString');
+ if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')
+ {
+ return false;
+ }
+ $response[$i] =& new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
+ break;
+ default:
+ return false;
+ }
+ }
+ return $response;
+ }
+ }
+ } // end class xmlrpc_client
+
+ class xmlrpcresp
+ {
+ var $val = 0;
+ var $valtyp;
+ var $errno = 0;
+ var $errstr = '';
+ var $payload;
+ var $hdrs = array();
+ var $_cookies = array();
+ var $content_type = 'text/xml';
+ var $raw_data = '';
+
+ /**
+ * @param mixed $val either an xmlrpcval obj, a php value or the xml serialization of an xmlrpcval (a string)
+ * @param integer $fcode set it to anything but 0 to create an error response
+ * @param string $fstr the error string, in case of an error response
+ * @param string $valtyp either 'xmlrpcvals', 'phpvals' or 'xml'
+ *
+ * @todo add check that $val / $fcode / $fstr is of correct type???
+ * NB: as of now we do not do it, since it might be either an xmlrpcval or a plain
+ * php val, or a complete xml chunk, depending on usage of xmlrpc_client::send() inside which creator is called...
+ */
+ function xmlrpcresp($val, $fcode = 0, $fstr = '', $valtyp='')
+ {
+ if($fcode != 0)
+ {
+ // error response
+ $this->errno = $fcode;
+ $this->errstr = $fstr;
+ //$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.
+ }
+ else
+ {
+ // successful response
+ $this->val = $val;
+ if ($valtyp == '')
+ {
+ // user did not declare type of response value: try to guess it
+ if (is_object($this->val) && is_a($this->val, 'xmlrpcval'))
+ {
+ $this->valtyp = 'xmlrpcvals';
+ }
+ else if (is_string($this->val))
+ {
+ $this->valtyp = 'xml';
+
+ }
+ else
+ {
+ $this->valtyp = 'phpvals';
+ }
+ }
+ else
+ {
+ // user declares type of resp value: believe him
+ $this->valtyp = $valtyp;
+ }
+ }
+ }
+
+ /**
+ * Returns the error code of the response.
+ * @return integer the error code of this response (0 for not-error responses)
+ * @access public
+ */
+ function faultCode()
+ {
+ return $this->errno;
+ }
+
+ /**
+ * Returns the error code of the response.
+ * @return string the error string of this response ('' for not-error responses)
+ * @access public
+ */
+ function faultString()
+ {
+ return $this->errstr;
+ }
+
+ /**
+ * Returns the value received by the server.
+ * @return mixed the xmlrpcval object returned by the server. Might be an xml string or php value if the response has been created by specially configured xmlrpc_client objects
+ * @access public
+ */
+ function value()
+ {
+ return $this->val;
+ }
+
+ /**
+ * Returns an array with the cookies received from the server.
+ * Array has the form: $cookiename => array ('value' => $val, $attr1 => $val1, $attr2 = $val2, ...)
+ * with attributes being e.g. 'expires', 'path', domain'.
+ * NB: cookies sent as 'expired' by the server (i.e. with an expiry date in the past)
+ * are still present in the array. It is up to the user-defined code to decide
+ * how to use the received cookies, and wheter they have to be sent back with the next
+ * request to the server (using xmlrpc_client::setCookie) or not
+ * @return array array of cookies received from the server
+ * @access public
+ */
+ function cookies()
+ {
+ return $this->_cookies;
+ }
+
+ /**
+ * Returns xml representation of the response. XML prologue not included
+ * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
+ * @return string the xml representation of the response
+ * @access public
+ */
+ function serialize($charset_encoding='')
+ {
+ if ($charset_encoding != '')
+ $this->content_type = 'text/xml; charset=' . $charset_encoding;
+ else
+ $this->content_type = 'text/xml';
+ $result = "<methodResponse>\n";
+ if($this->errno)
+ {
+ // G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients
+ // by xml-encoding non ascii chars
+ $result .= "<fault>\n" .
+"<value>\n<struct><member><name>faultCode</name>\n<value><int>" . $this->errno .
+"</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>" .
+xmlrpc_encode_entitites($this->errstr, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "</string></value>\n</member>\n" .
+"</struct>\n</value>\n</fault>";
+ }
+ else
+ {
+ if(!is_object($this->val) || !is_a($this->val, 'xmlrpcval'))
+ {
+ if (is_string($this->val) && $this->valtyp == 'xml')
+ {
+ $result .= "<params>\n<param>\n" .
+ $this->val .
+ "</param>\n</params>";
+ }
+ else
+ {
+ /// @todo try to build something serializable?
+ die('cannot serialize xmlrpcresp objects whose content is native php values');
+ }
+ }
+ else
+ {
+ $result .= "<params>\n<param>\n" .
+ $this->val->serialize($charset_encoding) .
+ "</param>\n</params>";
+ }
+ }
+ $result .= "\n</methodResponse>";
+ $this->payload = $result;
+ return $result;
+ }
+ }
+
+ class xmlrpcmsg
+ {
+ var $payload;
+ var $methodname;
+ var $params=array();
+ var $debug=0;
+ var $content_type = 'text/xml';
+
+ /**
+ * @param string $meth the name of the method to invoke
+ * @param array $pars array of parameters to be paased to the method (xmlrpcval objects)
+ */
+ function xmlrpcmsg($meth, $pars=0)
+ {
+ $this->methodname=$meth;
+ if(is_array($pars) && count($pars)>0)
+ {
+ for($i=0; $i<count($pars); $i++)
+ {
+ $this->addParam($pars[$i]);
+ }
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function xml_header($charset_encoding='')
+ {
+ if ($charset_encoding != '')
+ {
+ return "<?xml version=\"1.0\" encoding=\"$charset_encoding\" ?" . ">\n<methodCall>\n";
+ }
+ else
+ {
+ return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function xml_footer()
+ {
+ return '</methodCall>';
+ }
+
+ /**
+ * @access private
+ */
+ function kindOf()
+ {
+ return 'msg';
+ }
+
+ /**
+ * @access private
+ */
+ function createPayload($charset_encoding='')
+ {
+ if ($charset_encoding != '')
+ $this->content_type = 'text/xml; charset=' . $charset_encoding;
+ else
+ $this->content_type = 'text/xml';
+ $this->payload=$this->xml_header($charset_encoding);
+ $this->payload.='<methodName>' . $this->methodname . "</methodName>\n";
+ $this->payload.="<params>\n";
+ for($i=0; $i<count($this->params); $i++)
+ {
+ $p=$this->params[$i];
+ $this->payload.="<param>\n" . $p->serialize($charset_encoding) .
+ "</param>\n";
+ }
+ $this->payload.="</params>\n";
+ $this->payload.=$this->xml_footer();
+ }
+
+ /**
+ * Gets/sets the xmlrpc method to be invoked
+ * @param string $meth the method to be set (leave empty not to set it)
+ * @return string the method that will be invoked
+ * @access public
+ */
+ function method($meth='')
+ {
+ if($meth!='')
+ {
+ $this->methodname=$meth;
+ }
+ return $this->methodname;
+ }
+
+ /**
+ * Returns xml representation of the message. XML prologue included
+ * @return string the xml representation of the message, xml prologue included
+ * @access public
+ */
+ function serialize($charset_encoding='')
+ {
+ $this->createPayload($charset_encoding);
+ return $this->payload;
+ }
+
+ /**
+ * Add a parameter to the list of parameters to be used upon method invocation
+ * @param xmlrpcval $par
+ * @return boolean false on failure
+ * @access public
+ */
+ function addParam($par)
+ {
+ // add check: do not add to self params which are not xmlrpcvals
+ if(is_object($par) && is_a($par, 'xmlrpcval'))
+ {
+ $this->params[]=$par;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Returns the nth parameter in the message. The index zero-based.
+ * @param integer $i the index of the parameter to fetch (zero based)
+ * @return xmlrpcval the i-th parameter
+ * @access public
+ */
+ function getParam($i) { return $this->params[$i]; }
+
+ /**
+ * Returns the number of parameters in the messge.
+ * @return integer the number of parameters currently set
+ * @access public
+ */
+ function getNumParams() { return count($this->params); }
+
+ /**
+ * Given an open file handle, read all data available and parse it as axmlrpc response.
+ * NB: the file handle is not closed by this function.
+ * @access public
+ * @return xmlrpcresp
+ * @todo add 2nd & 3rd param to be passed to ParseResponse() ???
+ */
+ function &parseResponseFile($fp)
+ {
+ $ipd='';
+ while($data=fread($fp, 32768))
+ {
+ $ipd.=$data;
+ }
+ //fclose($fp);
+ $r =& $this->parseResponse($ipd);
+ return $r;
+ }
+
+ /**
+ * Parses HTTP headers and separates them from data.
+ * @access private
+ */
+ function &parseResponseHeaders(&$data, $headers_processed=false)
+ {
+ // Strip HTTP 1.1 100 Continue header if present
+ while(preg_match('/^HTTP\/1\.1 1[0-9]{2} /', $data))
+ {
+ $pos = strpos($data, 'HTTP', 12);
+ // server sent a Continue header without any (valid) content following...
+ // give the client a chance to know it
+ if(!$pos && !is_int($pos)) // works fine in php 3, 4 and 5
+ {
+ break;
+ }
+ $data = substr($data, $pos);
+ }
+ if(!preg_match('/^HTTP\/[0-9.]+ 200 /', $data))
+ {
+ $errstr= substr($data, 0, strpos($data, "\n")-1);
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: HTTP error, got response: ' .$errstr);
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (' . $errstr . ')');
+ return $r;
+ }
+
+ $GLOBALS['_xh']['headers'] = array();
+ $GLOBALS['_xh']['cookies'] = array();
+
+ // be tolerant to usage of \n instead of \r\n to separate headers and data
+ // (even though it is not valid http)
+ $pos = strpos($data,"\r\n\r\n");
+ if($pos || is_int($pos))
+ {
+ $bd = $pos+4;
+ }
+ else
+ {
+ $pos = strpos($data,"\n\n");
+ if($pos || is_int($pos))
+ {
+ $bd = $pos+2;
+ }
+ else
+ {
+ // No separation between response headers and body: fault?
+ $bd = 0;
+ }
+ }
+ // be tolerant to line endings, and extra empty lines
+ $ar = split("\r?\n", trim(substr($data, 0, $pos)));
+ while(list(,$line) = @each($ar))
+ {
+ // take care of multi-line headers and cookies
+ $arr = explode(':',$line,2);
+ if(count($arr) > 1)
+ {
+ $header_name = strtolower(trim($arr[0]));
+ /// @todo some other headers (the ones that allow a CSV list of values)
+ /// do allow many values to be passed using multiple header lines.
+ /// We should add content to $GLOBALS['_xh']['headers'][$header_name]
+ /// instead of replacing it for those...
+ if ($header_name == 'set-cookie' || $header_name == 'set-cookie2')
+ {
+ if ($header_name == 'set-cookie2')
+ {
+ // version 2 cookies:
+ // there could be many cookies on one line, comma separated
+ $cookies = explode(',', $arr[1]);
+ }
+ else
+ {
+ $cookies = array($arr[1]);
+ }
+ foreach ($cookies as $cookie)
+ {
+ // glue together all received cookies, using a comma to separate them
+ // (same as php does with getallheaders())
+ if (isset($GLOBALS['_xh']['headers'][$header_name]))
+ $GLOBALS['_xh']['headers'][$header_name] .= ', ' . trim($cookie);
+ else
+ $GLOBALS['_xh']['headers'][$header_name] = trim($cookie);
+ // parse cookie attributes, in case user wants to coorectly honour then
+ // feature creep: only allow rfc-compliant cookie attributes?
+ $cookie = explode(';', $cookie);
+ foreach ($cookie as $pos => $val)
+ {
+ $val = explode('=', $val, 2);
+ $tag = trim($val[0]);
+ $val = trim(@$val[1]);
+ /// @todo with version 1 cookies, we should strip leading and trailing " chars
+ if ($pos == 0)
+ {
+ $cookiename = $tag;
+ $GLOBALS['_xh']['cookies'][$tag] = array();
+ $GLOBALS['_xh']['cookies'][$cookiename]['value'] = urldecode($val);
+ }
+ else
+ {
+ $GLOBALS['_xh']['cookies'][$cookiename][$tag] = $val;
+ }
+ }
+ }
+ }
+ else
+ {
+ $GLOBALS['_xh']['headers'][$header_name] = trim($arr[1]);
+ }
+ }
+ elseif(isset($header_name))
+ {
+ /// @todo version1 cookies might span multiple lines, thus breaking the parsing above
+ $GLOBALS['_xh']['headers'][$header_name] .= ' ' . trim($line);
+ }
+ }
+
+ $data = substr($data, $bd);
+
+ if($this->debug && count($GLOBALS['_xh']['headers']))
+ {
+ print '<PRE>';
+ foreach($GLOBALS['_xh']['headers'] as $header => $value)
+ {
+ print "HEADER: $header: $value\n";
+ }
+ foreach($GLOBALS['_xh']['cookies'] as $header => $value)
+ {
+ print "COOKIE: $header={$value['value']}\n";
+ }
+ print "</PRE>\n";
+ }
+
+ // if CURL was used for the call, http headers have been processed,
+ // and dechunking + reinflating have been carried out
+ if(!$headers_processed)
+ {
+ // Decode chunked encoding sent by http 1.1 servers
+ if(isset($GLOBALS['_xh']['headers']['transfer-encoding']) && $GLOBALS['_xh']['headers']['transfer-encoding'] == 'chunked')
+ {
+ if(!$data = decode_chunked($data))
+ {
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: errors occurred when trying to rebuild the chunked data received from server');
+ $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['dechunk_fail'], $GLOBALS['xmlrpcstr']['dechunk_fail']);
+ return $r;
+ }
+ }
+
+ // Decode gzip-compressed stuff
+ // code shamelessly inspired from nusoap library by Dietrich Ayala
+ if(isset($GLOBALS['_xh']['headers']['content-encoding']))
+ {
+ $GLOBALS['_xh']['headers']['content-encoding'] = str_replace('x-', '', $GLOBALS['_xh']['headers']['content-encoding']);
+ if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' || $GLOBALS['_xh']['headers']['content-encoding'] == 'gzip')
+ {
+ // if decoding works, use it. else assume data wasn't gzencoded
+ if(function_exists('gzinflate'))
+ {
+ if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data))
+ {
+ $data = $degzdata;
+ if($this->debug)
+ print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
+ }
+ elseif($GLOBALS['_xh']['headers']['content-encoding'] == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
+ {
+ $data = $degzdata;
+ if($this->debug)
+ print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
+ }
+ else
+ {
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: errors occurred when trying to decode the deflated data received from server');
+ $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['decompress_fail'], $GLOBALS['xmlrpcstr']['decompress_fail']);
+ return $r;
+ }
+ }
+ else
+ {
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: the server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
+ $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['cannot_decompress'], $GLOBALS['xmlrpcstr']['cannot_decompress']);
+ return $r;
+ }
+ }
+ }
+ } // end of 'if needed, de-chunk, re-inflate response'
+
+ // real stupid hack to avoid PHP 4 complaining about returning NULL by ref
+ $r = null;
+ $r =& $r;
+ return $r;
+ }
+
+ /**
+ * Parse the xmlrpc response containeed in the string $data and return an xmlrpcresp object.
+ * @param string $data the xmlrpc response, eventually including http headers
+ * @param bool $headers_processed when true prevents parsing HTTP headers for interpretation of content-encoding and consequent decoding
+ * @param string $return_type decides return type, i.e. content of response->value(). Either 'xmlrpcvals', 'xml' or 'phpvals'
+ * @return xmlrpcresp
+ * @access public
+ */
+ function &parseResponse($data='', $headers_processed=false, $return_type='xmlrpcvals')
+ {
+ if($this->debug)
+ {
+ //by maHo, replaced htmlspecialchars with htmlentities
+ print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";
+ $start = strpos($data, '<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
+ if ($start)
+ {
+ $start += strlen('<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
+ $end = strpos($data, '-->', $start);
+ $comments = substr($data, $start, $end-$start);
+ print "<PRE>---SERVER DEBUG INFO (DECODED) ---\n\t".htmlentities(str_replace("\n", "\n\t", base64_decode($comments)))."\n---END---\n</PRE>";
+ }
+ }
+
+ if($data == '')
+ {
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: no response received from server.');
+ $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_data'], $GLOBALS['xmlrpcstr']['no_data']);
+ return $r;
+ }
+
+ $GLOBALS['_xh']=array();
+
+ $raw_data = $data;
+ // parse the HTTP headers of the response, if present, and separate them from data
+ if(substr($data, 0, 4) == 'HTTP')
+ {
+ $r =& $this->parseResponseHeaders($data, $headers_processed);
+ if ($r)
+ {
+ // failed processing of HTTP response headers
+ // save into response obj the full payload received, for debugging
+ $r->raw_data = $data;
+ return $r;
+ }
+ }
+ else
+ {
+ $GLOBALS['_xh']['headers'] = array();
+ $GLOBALS['_xh']['cookies'] = array();
+ }
+
+
+ // be tolerant of extra whitespace in response body
+ $data = trim($data);
+
+ /// @todo return an error msg if $data=='' ?
+
+ // be tolerant of junk after methodResponse (e.g. javascript ads automatically inserted by free hosts)
+ // idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib
+ $bd = false;
+ // Poor man's version of strrpos for php 4...
+ $pos = strpos($data, '</methodResponse>');
+ while($pos || is_int($pos))
+ {
+ $bd = $pos+17;
+ $pos = strpos($data, '</methodResponse>', $bd);
+ }
+ if($bd)
+ {
+ $data = substr($data, 0, $bd);
+ }
+
+ // if user wants back raw xml, give it to him
+ if ($return_type == 'xml')
+ {
+ $r =& new xmlrpcresp($data, 0, '', 'xml');
+ $r->hdrs = $GLOBALS['_xh']['headers'];
+ $r->_cookies = $GLOBALS['_xh']['cookies'];
+ $r->raw_data = $raw_data;
+ return $r;
+ }
+
+ // try to 'guestimate' the character encoding of the received response
+ $resp_encoding = guess_encoding(@$GLOBALS['_xh']['headers']['content-type'], $data);
+
+ $GLOBALS['_xh']['ac']='';
+ //$GLOBALS['_xh']['qt']=''; //unused...
+ $GLOBALS['_xh']['stack'] = array();
+ $GLOBALS['_xh']['valuestack'] = array();
+ $GLOBALS['_xh']['isf']=0; // 0 = OK, 1 for xmlrpc fault responses, 2 = invalid xmlrpc
+ $GLOBALS['_xh']['isf_reason']='';
+ $GLOBALS['_xh']['rt']=''; // 'methodcall or 'methodresponse'
+
+ // if response charset encoding is not known / supported, try to use
+ // the default encoding and parse the xml anyway, but log a warning...
+ if (!in_array($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+ // the following code might be better for mb_string enabled installs, but
+ // makes the lib about 200% slower...
+ //if (!is_valid_charset($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+ {
+ error_log('XML-RPC: xmlrpcmsg::parseResponse: invalid charset encoding of received response: '.$resp_encoding);
+ $resp_encoding = $GLOBALS['xmlrpc_defencoding'];
+ }
+ $parser = xml_parser_create($resp_encoding);
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+ // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
+ // the xml parser to give us back data in the expected charset
+ xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
+
+ if ($return_type == 'phpvals')
+ {
+ xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
+ }
+ else
+ {
+ xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
+ }
+
+ xml_set_character_data_handler($parser, 'xmlrpc_cd');
+ xml_set_default_handler($parser, 'xmlrpc_dh');
+
+ // first error check: xml not well formed
+ if(!xml_parse($parser, $data, count($data)))
+ {
+ // thanks to Peter Kocks <peter.kocks@baygate.com>
+ if((xml_get_current_line_number($parser)) == 1)
+ {
+ $errstr = 'XML error at line 1, check URL';
+ }
+ else
+ {
+ $errstr = sprintf('XML error: %s at line %d, column %d',
+ xml_error_string(xml_get_error_code($parser)),
+ xml_get_current_line_number($parser), xml_get_current_column_number($parser));
+ }
+ error_log($errstr);
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'], $GLOBALS['xmlrpcstr']['invalid_return'].' ('.$errstr.')');
+ xml_parser_free($parser);
+ if($this->debug)
+ {
+ print $errstr;
+ }
+ $r->hdrs = $GLOBALS['_xh']['headers'];
+ $r->_cookies = $GLOBALS['_xh']['cookies'];
+ $r->raw_data = $raw_data;
+ return $r;
+ }
+ xml_parser_free($parser);
+ // second error check: xml well formed but not xml-rpc compliant
+ if ($GLOBALS['_xh']['isf'] > 1)
+ {
+ if ($this->debug)
+ {
+ /// @todo echo something for user?
+ }
+
+ $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
+ $GLOBALS['xmlrpcstr']['invalid_return'] . ' ' . $GLOBALS['_xh']['isf_reason']);
+ }
+ // third error check: parsing of the response has somehow gone boink.
+ // NB: shall we omit this check, since we trust the parsing code?
+ elseif ($return_type == 'xmlrpcvals' && !is_object($GLOBALS['_xh']['value']))
+ {
+ // something odd has happened
+ // and it's time to generate a client side error
+ // indicating something odd went on
+ $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
+ $GLOBALS['xmlrpcstr']['invalid_return']);
+ }
+ else
+ {
+ if ($this->debug)
+ {
+ print "<PRE>---PARSED---\n" ;
+ var_export($GLOBALS['_xh']['value']);
+ print "\n---END---</PRE>";
+ }
+
+ // note that using =& will raise an error if $GLOBALS['_xh']['st'] does not generate an object.
+ $v =& $GLOBALS['_xh']['value'];
+
+ if($GLOBALS['_xh']['isf'])
+ {
+ /// @todo we should test here if server sent an int and a string,
+ /// and/or coerce them into such...
+ if ($return_type == 'xmlrpcvals')
+ {
+ $errno_v = $v->structmem('faultCode');
+ $errstr_v = $v->structmem('faultString');
+ $errno = $errno_v->scalarval();
+ $errstr = $errstr_v->scalarval();
+ }
+ else
+ {
+ $errno = $v['faultCode'];
+ $errstr = $v['faultString'];
+ }
+
+ if($errno == 0)
+ {
+ // FAULT returned, errno needs to reflect that
+ $errno = -1;
+ }
+
+ $r =& new xmlrpcresp(0, $errno, $errstr);
+ }
+ else
+ {
+ $r=&new xmlrpcresp($v, 0, '', $return_type);
+ }
+ }
+
+ $r->hdrs = $GLOBALS['_xh']['headers'];
+ $r->_cookies = $GLOBALS['_xh']['cookies'];
+ $r->raw_data = $raw_data;
+ return $r;
+ }
+ }
+
+ class xmlrpcval
+ {
+ var $me=array();
+ var $mytype=0;
+ var $_php_class=null;
+
+ /**
+ * @param mixed $val
+ * @param string $type any valid xmlrpc type name (lowercase). If null, 'string' is assumed
+ */
+ function xmlrpcval($val=-1, $type='')
+ {
+ /// @todo: optimization creep - do not call addXX, do it all inline.
+ /// downside: booleans will not be coerced anymore
+ if($val!==-1 || $type!='')
+ {
+ // optimization creep: inlined all work done by constructor
+ switch($type)
+ {
+ case '':
+ $this->mytype=1;
+ $this->me['string']=$val;
+ break;
+ case 'i4':
+ case 'int':
+ case 'double':
+ case 'string':
+ case 'boolean':
+ case 'dateTime.iso8601':
+ case 'base64':
+ case 'null':
+ $this->mytype=1;
+ $this->me[$type]=$val;
+ break;
+ case 'array':
+ $this->mytype=2;
+ $this->me['array']=$val;
+ break;
+ case 'struct':
+ $this->mytype=3;
+ $this->me['struct']=$val;
+ break;
+ default:
+ error_log("XML-RPC: xmlrpcval::xmlrpcval: not a known type ($type)");
+ }
+ /*if($type=='')
+ {
+ $type='string';
+ }
+ if($GLOBALS['xmlrpcTypes'][$type]==1)
+ {
+ $this->addScalar($val,$type);
+ }
+ elseif($GLOBALS['xmlrpcTypes'][$type]==2)
+ {
+ $this->addArray($val);
+ }
+ elseif($GLOBALS['xmlrpcTypes'][$type]==3)
+ {
+ $this->addStruct($val);
+ }*/
+ }
+ }
+
+ /**
+ * Add a single php value to an (unitialized) xmlrpcval
+ * @param mixed $val
+ * @param string $type
+ * @return int 1 or 0 on failure
+ */
+ function addScalar($val, $type='string')
+ {
+ $typeof=@$GLOBALS['xmlrpcTypes'][$type];
+ if($typeof!=1)
+ {
+ error_log("XML-RPC: xmlrpcval::addScalar: not a scalar type ($type)");
+ return 0;
+ }
+
+ // coerce booleans into correct values
+ // NB: we should iether do it for datetimes, integers and doubles, too,
+ // or just plain remove this check, implemnted on booleans only...
+ if($type==$GLOBALS['xmlrpcBoolean'])
+ {
+ if(strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))
+ {
+ $val=true;
+ }
+ else
+ {
+ $val=false;
+ }
+ }
+
+ switch($this->mytype)
+ {
+ case 1:
+ error_log('XML-RPC: xmlrpcval::addScalar: scalar xmlrpcval can have only one value');
+ return 0;
+ case 3:
+ error_log('XML-RPC: xmlrpcval::addScalar: cannot add anonymous scalar to struct xmlrpcval');
+ return 0;
+ case 2:
+ // we're adding a scalar value to an array here
+ //$ar=$this->me['array'];
+ //$ar[]=&new xmlrpcval($val, $type);
+ //$this->me['array']=$ar;
+ // Faster (?) avoid all the costly array-copy-by-val done here...
+ $this->me['array'][]=&new xmlrpcval($val, $type);
+ return 1;
+ default:
+ // a scalar, so set the value and remember we're scalar
+ $this->me[$type]=$val;
+ $this->mytype=$typeof;
+ return 1;
+ }
+ }
+
+ /**
+ * Add an array of xmlrpcval objects to an xmlrpcval
+ * @param array $vals
+ * @return int 1 or 0 on failure
+ * @access public
+ *
+ * @todo add some checking for $vals to be an array of xmlrpcvals?
+ */
+ function addArray($vals)
+ {
+ if($this->mytype==0)
+ {
+ $this->mytype=$GLOBALS['xmlrpcTypes']['array'];
+ $this->me['array']=$vals;
+ return 1;
+ }
+ elseif($this->mytype==2)
+ {
+ // we're adding to an array here
+ $this->me['array'] = array_merge($this->me['array'], $vals);
+ return 1;
+ }
+ else
+ {
+ error_log('XML-RPC: xmlrpcval::addArray: already initialized as a [' . $this->kindOf() . ']');
+ return 0;
+ }
+ }
+
+ /**
+ * Add an array of named xmlrpcval objects to an xmlrpcval
+ * @param array $vals
+ * @return int 1 or 0 on failure
+ * @access public
+ *
+ * @todo add some checking for $vals to be an array?
+ */
+ function addStruct($vals)
+ {
+ if($this->mytype==0)
+ {
+ $this->mytype=$GLOBALS['xmlrpcTypes']['struct'];
+ $this->me['struct']=$vals;
+ return 1;
+ }
+ elseif($this->mytype==3)
+ {
+ // we're adding to a struct here
+ $this->me['struct'] = array_merge($this->me['struct'], $vals);
+ return 1;
+ }
+ else
+ {
+ error_log('XML-RPC: xmlrpcval::addStruct: already initialized as a [' . $this->kindOf() . ']');
+ return 0;
+ }
+ }
+
+ // poor man's version of print_r ???
+ // DEPRECATED!
+ function dump($ar)
+ {
+ foreach($ar as $key => $val)
+ {
+ echo "$key => $val<br />";
+ if($key == 'array')
+ {
+ while(list($key2, $val2) = each($val))
+ {
+ echo "-- $key2 => $val2<br />";
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a string containing "struct", "array" or "scalar" describing the base type of the value
+ * @return string
+ * @access public
+ */
+ function kindOf()
+ {
+ switch($this->mytype)
+ {
+ case 3:
+ return 'struct';
+ break;
+ case 2:
+ return 'array';
+ break;
+ case 1:
+ return 'scalar';
+ break;
+ default:
+ return 'undef';
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function serializedata($typ, $val, $charset_encoding='')
+ {
+ $rs='';
+ switch(@$GLOBALS['xmlrpcTypes'][$typ])
+ {
+ case 1:
+ switch($typ)
+ {
+ case $GLOBALS['xmlrpcBase64']:
+ $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
+ break;
+ case $GLOBALS['xmlrpcBoolean']:
+ $rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
+ break;
+ case $GLOBALS['xmlrpcString']:
+ // G. Giunta 2005/2/13: do NOT use htmlentities, since
+ // it will produce named html entities, which are invalid xml
+ $rs.="<${typ}>" . xmlrpc_encode_entitites($val, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding). "</${typ}>";
+ break;
+ case $GLOBALS['xmlrpcInt']:
+ case $GLOBALS['xmlrpcI4']:
+ $rs.="<${typ}>".(int)$val."</${typ}>";
+ break;
+ case $GLOBALS['xmlrpcDouble']:
+ $rs.="<${typ}>".(double)$val."</${typ}>";
+ break;
+ case $GLOBALS['xmlrpcNull']:
+ $rs.="<nil/>";
+ break;
+ default:
+ // no standard type value should arrive here, but provide a possibility
+ // for xmlrpcvals of unknown type...
+ $rs.="<${typ}>${val}</${typ}>";
+ }
+ break;
+ case 3:
+ // struct
+ if ($this->_php_class)
+ {
+ $rs.='<struct php_class="' . $this->_php_class . "\">\n";
+ }
+ else
+ {
+ $rs.="<struct>\n";
+ }
+ foreach($val as $key2 => $val2)
+ {
+ $rs.='<member><name>'.xmlrpc_encode_entitites($key2, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding)."</name>\n";
+ //$rs.=$this->serializeval($val2);
+ $rs.=$val2->serialize($charset_encoding);
+ $rs.="</member>\n";
+ }
+ $rs.='</struct>';
+ break;
+ case 2:
+ // array
+ $rs.="<array>\n<data>\n";
+ for($i=0; $i<count($val); $i++)
+ {
+ //$rs.=$this->serializeval($val[$i]);
+ $rs.=$val[$i]->serialize($charset_encoding);
+ }
+ $rs.="</data>\n</array>";
+ break;
+ default:
+ break;
+ }
+ return $rs;
+ }
+
+ /**
+ * Returns xml representation of the value. XML prologue not included
+ * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
+ * @return string
+ * @access public
+ */
+ function serialize($charset_encoding='')
+ {
+ // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
+ //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
+ //{
+ reset($this->me);
+ list($typ, $val) = each($this->me);
+ return '<value>' . $this->serializedata($typ, $val, $charset_encoding) . "</value>\n";
+ //}
+ }
+
+ // DEPRECATED
+ function serializeval($o)
+ {
+ // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
+ //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
+ //{
+ $ar=$o->me;
+ reset($ar);
+ list($typ, $val) = each($ar);
+ return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
+ //}
+ }
+
+ /**
+ * Checks wheter a struct member with a given name is present.
+ * Works only on xmlrpcvals of type struct.
+ * @param string $m the name of the struct member to be looked up
+ * @return boolean
+ * @access public
+ */
+ function structmemexists($m)
+ {
+ return array_key_exists($m, $this->me['struct']);
+ }
+
+ /**
+ * Returns the value of a given struct member (an xmlrpcval object in itself).
+ * Will raise a php warning if struct member of given name does not exist
+ * @param string $m the name of the struct member to be looked up
+ * @return xmlrpcval
+ * @access public
+ */
+ function structmem($m)
+ {
+ return $this->me['struct'][$m];
+ }
+
+ /**
+ * Reset internal pointer for xmlrpcvals of type struct.
+ * @access public
+ */
+ function structreset()
+ {
+ reset($this->me['struct']);
+ }
+
+ /**
+ * Return next member element for xmlrpcvals of type struct.
+ * @return xmlrpcval
+ * @access public
+ */
+ function structeach()
+ {
+ return each($this->me['struct']);
+ }
+
+ // DEPRECATED! this code looks like it is very fragile and has not been fixed
+ // for a long long time. Shall we remove it for 2.0?
+ function getval()
+ {
+ // UNSTABLE
+ reset($this->me);
+ list($a,$b)=each($this->me);
+ // contributed by I Sofer, 2001-03-24
+ // add support for nested arrays to scalarval
+ // i've created a new method here, so as to
+ // preserve back compatibility
+
+ if(is_array($b))
+ {
+ @reset($b);
+ while(list($id,$cont) = @each($b))
+ {
+ $b[$id] = $cont->scalarval();
+ }
+ }
+
+ // add support for structures directly encoding php objects
+ if(is_object($b))
+ {
+ $t = get_object_vars($b);
+ @reset($t);
+ while(list($id,$cont) = @each($t))
+ {
+ $t[$id] = $cont->scalarval();
+ }
+ @reset($t);
+ while(list($id,$cont) = @each($t))
+ {
+ @$b->$id = $cont;
+ }
+ }
+ // end contrib
+ return $b;
+ }
+
+ /**
+ * Returns the value of a scalar xmlrpcval
+ * @return mixed
+ * @access public
+ */
+ function scalarval()
+ {
+ reset($this->me);
+ list(,$b)=each($this->me);
+ return $b;
+ }
+
+ /**
+ * Returns the type of the xmlrpcval.
+ * For integers, 'int' is always returned in place of 'i4'
+ * @return string
+ * @access public
+ */
+ function scalartyp()
+ {
+ reset($this->me);
+ list($a,)=each($this->me);
+ if($a==$GLOBALS['xmlrpcI4'])
+ {
+ $a=$GLOBALS['xmlrpcInt'];
+ }
+ return $a;
+ }
+
+ /**
+ * Returns the m-th member of an xmlrpcval of struct type
+ * @param integer $m the index of the value to be retrieved (zero based)
+ * @return xmlrpcval
+ * @access public
+ */
+ function arraymem($m)
+ {
+ return $this->me['array'][$m];
+ }
+
+ /**
+ * Returns the number of members in an xmlrpcval of array type
+ * @return integer
+ * @access public
+ */
+ function arraysize()
+ {
+ return count($this->me['array']);
+ }
+
+ /**
+ * Returns the number of members in an xmlrpcval of struct type
+ * @return integer
+ * @access public
+ */
+ function structsize()
+ {
+ return count($this->me['struct']);
+ }
+ }
+
+
+ // date helpers
+
+ /**
+ * Given a timestamp, return the corresponding ISO8601 encoded string.
+ *
+ * Really, timezones ought to be supported
+ * but the XML-RPC spec says:
+ *
+ * "Don't assume a timezone. It should be specified by the server in its
+ * documentation what assumptions it makes about timezones."
+ *
+ * These routines always assume localtime unless
+ * $utc is set to 1, in which case UTC is assumed
+ * and an adjustment for locale is made when encoding
+ *
+ * @param int $timet (timestamp)
+ * @param int $utc (0 or 1)
+ * @return string
+ */
+ function iso8601_encode($timet, $utc=0)
+ {
+ if(!$utc)
+ {
+ $t=strftime("%Y%m%dT%H:%M:%S", $timet);
+ }
+ else
+ {
+ if(function_exists('gmstrftime'))
+ {
+ // gmstrftime doesn't exist in some versions
+ // of PHP
+ $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
+ }
+ else
+ {
+ $t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));
+ }
+ }
+ return $t;
+ }
+
+ /**
+ * Given an ISO8601 date string, return a timet in the localtime, or UTC
+ * @param string $idate
+ * @param int $utc either 0 or 1
+ * @return int (datetime)
+ */
+ function iso8601_decode($idate, $utc=0)
+ {
+ $t=0;
+ if(preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs))
+ {
+ if($utc)
+ {
+ $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+ }
+ else
+ {
+ $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+ }
+ }
+ return $t;
+ }
+
+ /**
+ * Takes an xmlrpc value in PHP xmlrpcval object format and translates it into native PHP types.
+ *
+ * Works with xmlrpc message objects as input, too.
+ *
+ * Given proper options parameter, can rebuild generic php object instances
+ * (provided those have been encoded to xmlrpc format using a corresponding
+ * option in php_xmlrpc_encode())
+ * PLEASE NOTE that rebuilding php objects involves calling their constructor function.
+ * This means that the remote communication end can decide which php code will
+ * get executed on your server, leaving the door possibly open to 'php-injection'
+ * style of attacks (provided you have some classes defined on your server that
+ * might wreak havoc if instances are built outside an appropriate context).
+ * Make sure you trust the remote server/client before eanbling this!
+ *
+ * @author Dan Libby (dan@libby.com)
+ *
+ * @param xmlrpcval $xmlrpc_val
+ * @param array $options if 'decode_php_objs' is set in the options array, xmlrpc structs can be decoded into php objects
+ * @return mixed
+ */
+ function php_xmlrpc_decode($xmlrpc_val, $options=array())
+ {
+ switch($xmlrpc_val->kindOf())
+ {
+ case 'scalar':
+ if (in_array('extension_api', $options))
+ {
+ reset($xmlrpc_val->me);
+ list($typ,$val) = each($xmlrpc_val->me);
+ switch ($typ)
+ {
+ case 'dateTime.iso8601':
+ $xmlrpc_val->scalar = $val;
+ $xmlrpc_val->xmlrpc_type = 'datetime';
+ $xmlrpc_val->timestamp = iso8601_decode($val);
+ return $xmlrpc_val;
+ case 'base64':
+ $xmlrpc_val->scalar = $val;
+ $xmlrpc_val->type = $typ;
+ return $xmlrpc_val;
+ default:
+ return $xmlrpc_val->scalarval();
+ }
+ }
+ return $xmlrpc_val->scalarval();
+ case 'array':
+ $size = $xmlrpc_val->arraysize();
+ $arr = array();
+ for($i = 0; $i < $size; $i++)
+ {
+ $arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i), $options);
+ }
+ return $arr;
+ case 'struct':
+ $xmlrpc_val->structreset();
+ // If user said so, try to rebuild php objects for specific struct vals.
+ /// @todo should we raise a warning for class not found?
+ // shall we check for proper subclass of xmlrpcval instead of
+ // presence of _php_class to detect what we can do?
+ if (in_array('decode_php_objs', $options) && $xmlrpc_val->_php_class != ''
+ && class_exists($xmlrpc_val->_php_class))
+ {
+ $obj = @new $xmlrpc_val->_php_class;
+ while(list($key,$value)=$xmlrpc_val->structeach())
+ {
+ $obj->$key = php_xmlrpc_decode($value, $options);
+ }
+ return $obj;
+ }
+ else
+ {
+ $arr = array();
+ while(list($key,$value)=$xmlrpc_val->structeach())
+ {
+ $arr[$key] = php_xmlrpc_decode($value, $options);
+ }
+ return $arr;
+ }
+ case 'msg':
+ $paramcount = $xmlrpc_val->getNumParams();
+ $arr = array();
+ for($i = 0; $i < $paramcount; $i++)
+ {
+ $arr[] = php_xmlrpc_decode($xmlrpc_val->getParam($i));
+ }
+ return $arr;
+ }
+ }
+
+ // This constant left here only for historical reasons...
+ // it was used to decide if we have to define xmlrpc_encode on our own, but
+ // we do not do it anymore
+ if(function_exists('xmlrpc_decode'))
+ {
+ define('XMLRPC_EPI_ENABLED','1');
+ }
+ else
+ {
+ define('XMLRPC_EPI_ENABLED','0');
+ }
+
+ /**
+ * Takes native php types and encodes them into xmlrpc PHP object format.
+ * It will not re-encode xmlrpcval objects.
+ *
+ * Feature creep -- could support more types via optional type argument
+ * (string => datetime support has been added, ??? => base64 not yet)
+ *
+ * If given a proper options parameter, php object instances will be encoded
+ * into 'special' xmlrpc values, that can later be decoded into php objects
+ * by calling php_xmlrpc_decode() with a corresponding option
+ *
+ * @author Dan Libby (dan@libby.com)
+ *
+ * @param mixed $php_val the value to be converted into an xmlrpcval object
+ * @param array $options can include 'encode_php_objs', 'auto_dates', 'null_extension' or 'extension_api'
+ * @return xmlrpcval
+ */
+ function &php_xmlrpc_encode($php_val, $options=array())
+ {
+ $type = gettype($php_val);
+ switch($type)
+ {
+ case 'string':
+ if (in_array('auto_dates', $options) && preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $php_val))
+ $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcDateTime']);
+ else
+ $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcString']);
+ break;
+ case 'integer':
+ $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcInt']);
+ break;
+ case 'double':
+ $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcDouble']);
+ break;
+ // <G_Giunta_2001-02-29>
+ // Add support for encoding/decoding of booleans, since they are supported in PHP
+ case 'boolean':
+ $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcBoolean']);
+ break;
+ // </G_Giunta_2001-02-29>
+ case 'array':
+ // PHP arrays can be encoded to either xmlrpc structs or arrays,
+ // depending on wheter they are hashes or plain 0..n integer indexed
+ // A shorter one-liner would be
+ // $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
+ // but execution time skyrockets!
+ $j = 0;
+ $arr = array();
+ $ko = false;
+ foreach($php_val as $key => $val)
+ {
+ $arr[$key] =& php_xmlrpc_encode($val, $options);
+ if(!$ko && $key !== $j)
+ {
+ $ko = true;
+ }
+ $j++;
+ }
+ if($ko)
+ {
+ $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
+ }
+ else
+ {
+ $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcArray']);
+ }
+ break;
+ case 'object':
+ if(is_a($php_val, 'xmlrpcval'))
+ {
+ $xmlrpc_val = $php_val;
+ }
+ else
+ {
+ $arr = array();
+ while(list($k,$v) = each($php_val))
+ {
+ $arr[$k] = php_xmlrpc_encode($v, $options);
+ }
+ $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
+ if (in_array('encode_php_objs', $options))
+ {
+ // let's save original class name into xmlrpcval:
+ // might be useful later on...
+ $xmlrpc_val->_php_class = get_class($php_val);
+ }
+ }
+ break;
+ case 'NULL':
+ if (in_array('extension_api', $options))
+ {
+ $xmlrpc_val =& new xmlrpcval('', $GLOBALS['xmlrpcString']);
+ }
+ if (in_array('null_extension', $options))
+ {
+ $xmlrpc_val =& new xmlrpcval('', $GLOBALS['xmlrpcNull']);
+ }
+ else
+ {
+ $xmlrpc_val =& new xmlrpcval();
+ }
+ break;
+ case 'resource':
+ if (in_array('extension_api', $options))
+ {
+ $xmlrpc_val =& new xmlrpcval((int)$php_val, $GLOBALS['xmlrpcInt']);
+ }
+ else
+ {
+ $xmlrpc_val =& new xmlrpcval();
+ }
+ // catch "user function", "unknown type"
+ default:
+ // giancarlo pinerolo <ping@alt.it>
+ // it has to return
+ // an empty object in case, not a boolean.
+ $xmlrpc_val =& new xmlrpcval();
+ break;
+ }
+ return $xmlrpc_val;
+ }
+
+ /**
+ * Convert the xml representation of a method call, method request or single
+ * xmlrpc value into the appropriate object (a.k.a. deserialize)
+ * @param string $xml_val
+ * @param array $options
+ * @return mixed false on error, or an instance of either xmlrpcval, xmlrpcmsg or xmlrpcresp
+ */
+ function php_xmlrpc_decode_xml($xml_val, $options=array())
+ {
+ $GLOBALS['_xh'] = array();
+ $GLOBALS['_xh']['ac'] = '';
+ $GLOBALS['_xh']['stack'] = array();
+ $GLOBALS['_xh']['valuestack'] = array();
+ $GLOBALS['_xh']['params'] = array();
+ $GLOBALS['_xh']['pt'] = array();
+ $GLOBALS['_xh']['isf'] = 0;
+ $GLOBALS['_xh']['isf_reason'] = '';
+ $GLOBALS['_xh']['method'] = false;
+ $GLOBALS['_xh']['rt'] = '';
+ /// @todo 'guestimate' encoding
+ $parser = xml_parser_create();
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+ xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
+ xml_set_element_handler($parser, 'xmlrpc_se_any', 'xmlrpc_ee');
+ xml_set_character_data_handler($parser, 'xmlrpc_cd');
+ xml_set_default_handler($parser, 'xmlrpc_dh');
+ if(!xml_parse($parser, $xml_val, 1))
+ {
+ $errstr = sprintf('XML error: %s at line %d, column %d',
+ xml_error_string(xml_get_error_code($parser)),
+ xml_get_current_line_number($parser), xml_get_current_column_number($parser));
+ error_log($errstr);
+ xml_parser_free($parser);
+ return false;
+ }
+ xml_parser_free($parser);
+ if ($GLOBALS['_xh']['isf'] > 1) // test that $GLOBALS['_xh']['value'] is an obj, too???
+ {
+ error_log($GLOBALS['_xh']['isf_reason']);
+ return false;
+ }
+ switch ($GLOBALS['_xh']['rt'])
+ {
+ case 'methodresponse':
+ $v =& $GLOBALS['_xh']['value'];
+ if ($GLOBALS['_xh']['isf'] == 1)
+ {
+ $vc = $v->structmem('faultCode');
+ $vs = $v->structmem('faultString');
+ $r =& new xmlrpcresp(0, $vc->scalarval(), $vs->scalarval());
+ }
+ else
+ {
+ $r =& new xmlrpcresp($v);
+ }
+ return $r;
+ case 'methodcall':
+ $m =& new xmlrpcmsg($GLOBALS['_xh']['method']);
+ for($i=0; $i < count($GLOBALS['_xh']['params']); $i++)
+ {
+ $m->addParam($GLOBALS['_xh']['params'][$i]);
+ }
+ return $m;
+ case 'value':
+ return $GLOBALS['_xh']['value'];
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * decode a string that is encoded w/ "chunked" transfer encoding
+ * as defined in rfc2068 par. 19.4.6
+ * code shamelessly stolen from nusoap library by Dietrich Ayala
+ *
+ * @param string $buffer the string to be decoded
+ * @return string
+ */
+ function decode_chunked($buffer)
+ {
+ // length := 0
+ $length = 0;
+ $new = '';
+
+ // read chunk-size, chunk-extension (if any) and crlf
+ // get the position of the linebreak
+ $chunkend = strpos($buffer,"\r\n") + 2;
+ $temp = substr($buffer,0,$chunkend);
+ $chunk_size = hexdec( trim($temp) );
+ $chunkstart = $chunkend;
+ while($chunk_size > 0)
+ {
+ $chunkend = strpos($buffer, "\r\n", $chunkstart + $chunk_size);
+
+ // just in case we got a broken connection
+ if($chunkend == false)
+ {
+ $chunk = substr($buffer,$chunkstart);
+ // append chunk-data to entity-body
+ $new .= $chunk;
+ $length += strlen($chunk);
+ break;
+ }
+
+ // read chunk-data and crlf
+ $chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
+ // append chunk-data to entity-body
+ $new .= $chunk;
+ // length := length + chunk-size
+ $length += strlen($chunk);
+ // read chunk-size and crlf
+ $chunkstart = $chunkend + 2;
+
+ $chunkend = strpos($buffer,"\r\n",$chunkstart)+2;
+ if($chunkend == false)
+ {
+ break; //just in case we got a broken connection
+ }
+ $temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
+ $chunk_size = hexdec( trim($temp) );
+ $chunkstart = $chunkend;
+ }
+ return $new;
+ }
+
+ /**
+ * xml charset encoding guessing helper function.
+ * Tries to determine the charset encoding of an XML chunk
+ * received over HTTP.
+ * NB: according to the spec (RFC 3023, if text/xml content-type is received over HTTP without a content-type,
+ * we SHOULD assume it is strictly US-ASCII. But we try to be more tolerant of unconforming (legacy?) clients/servers,
+ * which will be most probably using UTF-8 anyway...
+ *
+ * @param string $httpheaders the http Content-type header
+ * @param string $xmlchunk xml content buffer
+ * @param string $encoding_prefs comma separated list of character encodings to be used as default (when mb extension is enabled)
+ *
+ * @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
+ */
+ function guess_encoding($httpheader='', $xmlchunk='', $encoding_prefs=null)
+ {
+ // discussion: see http://www.yale.edu/pclt/encoding/
+ // 1 - test if encoding is specified in HTTP HEADERS
+
+ //Details:
+ // LWS: (\13\10)?( |\t)+
+ // token: (any char but excluded stuff)+
+ // header: Content-type = ...; charset=value(; ...)*
+ // where value is of type token, no LWS allowed between 'charset' and value
+ // Note: we do not check for invalid chars in VALUE:
+ // this had better be done using pure ereg as below
+
+ /// @todo this test will pass if ANY header has charset specification, not only Content-Type. Fix it?
+ $matches = array();
+ if(preg_match('/;\s*charset=([^;]+)/i', $httpheader, $matches))
+ {
+ return strtoupper(trim($matches[1]));
+ }
+
+ // 2 - scan the first bytes of the data for a UTF-16 (or other) BOM pattern
+ // (source: http://www.w3.org/TR/2000/REC-xml-20001006)
+ // NOTE: actually, according to the spec, even if we find the BOM and determine
+ // an encoding, we should check if there is an encoding specified
+ // in the xml declaration, and verify if they match.
+ /// @todo implement check as described above?
+ /// @todo implement check for first bytes of string even without a BOM? (It sure looks harder than for cases WITH a BOM)
+ if(preg_match('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\x00\x00\xFF\xFE|\xFE\xFF\x00\x00)/', $xmlchunk))
+ {
+ return 'UCS-4';
+ }
+ elseif(preg_match('/^(\xFE\xFF|\xFF\xFE)/', $xmlchunk))
+ {
+ return 'UTF-16';
+ }
+ elseif(preg_match('/^(\xEF\xBB\xBF)/', $xmlchunk))
+ {
+ return 'UTF-8';
+ }
+
+ // 3 - test if encoding is specified in the xml declaration
+ // Details:
+ // SPACE: (#x20 | #x9 | #xD | #xA)+ === [ \x9\xD\xA]+
+ // EQ: SPACE?=SPACE? === [ \x9\xD\xA]*=[ \x9\xD\xA]*
+ if (preg_match('/^<\?xml\s+version\s*=\s*'. "((?:\"[a-zA-Z0-9_.:-]+\")|(?:'[a-zA-Z0-9_.:-]+'))".
+ '\s+encoding\s*=\s*' . "((?:\"[A-Za-z][A-Za-z0-9._-]*\")|(?:'[A-Za-z][A-Za-z0-9._-]*'))/",
+ $xmlchunk, $matches))
+ {
+ return strtoupper(substr($matches[2], 1, -1));
+ }
+
+ // 4 - if mbstring is available, let it do the guesswork
+ // NB: we favour finding an encoding that is compatible with what we can process
+ if(extension_loaded('mbstring'))
+ {
+ if($encoding_prefs)
+ {
+ $enc = mb_detect_encoding($xmlchunk, $encoding_prefs);
+ }
+ else
+ {
+ $enc = mb_detect_encoding($xmlchunk);
+ }
+ // NB: mb_detect likes to call it ascii, xml parser likes to call it US_ASCII...
+ // IANA also likes better US-ASCII, so go with it
+ if($enc == 'ASCII')
+ {
+ $enc = 'US-'.$enc;
+ }
+ return $enc;
+ }
+ else
+ {
+ // no encoding specified: as per HTTP1.1 assume it is iso-8859-1?
+ // Both RFC 2616 (HTTP 1.1) and 1945(http 1.0) clearly state that for text/xxx content types
+ // this should be the standard. And we should be getting text/xml as request and response.
+ // BUT we have to be backward compatible with the lib, which always used UTF-8 as default...
+ return $GLOBALS['xmlrpc_defencoding'];
+ }
+ }
+
+ /**
+ * Checks if a given charset encoding is present in a list of encodings or
+ * if it is a valid subset of any encoding in the list
+ * @param string $encoding charset to be tested
+ * @param mixed $validlist comma separated list of valid charsets (or array of charsets)
+ */
+ function is_valid_charset($encoding, $validlist)
+ {
+ $charset_supersets = array(
+ 'US-ASCII' => array ('ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
+ 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8',
+ 'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-11', 'ISO-8859-12',
+ 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'UTF-8',
+ 'EUC-JP', 'EUC-', 'EUC-KR', 'EUC-CN')
+ );
+ if (is_string($validlist))
+ $validlist = explode(',', $validlist);
+ if (@in_array(strtoupper($encoding), $validlist))
+ return true;
+ else
+ {
+ if (array_key_exists($encoding, $charset_supersets))
+ foreach ($validlist as $allowed)
+ if (in_array($allowed, $charset_supersets[$encoding]))
+ return true;
+ return false;
+ }
+ }
+
+?>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/verifier (from rev 14471, freeswitch/trunk/contrib/verifier)
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket)
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk)
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Call.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Call.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Call.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Call.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Call.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace EventWatcher
+{
+ public class Call
+ {
+ private CallState _currentState = CallState.Disconnected;
+ private CallState _previousState = CallState.Disconnected;
+ private string _id;
+ private string _destination;
+
+ public Call(string id)
+ {
+ _id = id;
+ }
+
+ public string Id
+ {
+ get { return _id; }
+ set { _id = value; }
+ }
+
+ public string Destination
+ {
+ get { return _destination; }
+ }
+
+ public CallState State
+ {
+ get { return _currentState; }
+ }
+
+ public CallState PreviousState
+ {
+ get { return _previousState; }
+ }
+
+ internal void SetCallState(CallState state)
+ {
+ _previousState = _currentState;
+ _currentState = state;
+ }
+
+ internal void SetDestination(string dest)
+ {
+ _destination = dest;
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using FreeSwitch.EventSocket;
+using FreeSwitch.EventSocket.Commands;
+
+namespace EventWatcher
+{
+ internal class CallManager
+ {
+ #region Delegates
+
+ public delegate void CallStateHandler(CallManager mgr, CallStateEvent callEvent);
+
+ #endregion
+
+ private EventManager _eventMgr;
+ private IDictionary<string, CallStateEvent> _events = new Dictionary<string, CallStateEvent>();
+
+ private IDictionary<string, ExtensionMapper> _extensions = new Dictionary<string, ExtensionMapper>();
+ private int _lastCallId = 0;
+
+ public CallManager(EventManager eventSocket)
+ {
+ _eventMgr = eventSocket;
+ }
+
+ public event ExtensionHandler ExtensionAdded;
+ public event CallHandler ExtensionChanged;
+ public event ExtensionHandler ExtensionDisconnected;
+ public event CallStateHandler OnCallState;
+
+ private ExtensionMapper GetMapper(string address)
+ {
+ if (_extensions.ContainsKey(address))
+ return _extensions[address];
+ else
+ {
+ ExtensionMapper em = new ExtensionMapper();
+ em.setter = new ExtensionSetters();
+ em.extension = new Extension(address, em.setter);
+ _extensions.Add(address, em);
+ if (ExtensionAdded != null)
+ ExtensionAdded(em.extension);
+
+ return em;
+ }
+ }
+
+ private string ChannelDestination(string channelName)
+ {
+ //Check.Require(channelName, "Channel name must be set.");
+ string[] parts = channelName.Split('/');
+ //Check.Require(parts.Length == 3, "Channel must be sofia/<domain>/<user>");
+ return parts[2];
+ }
+
+ public void OnSwitchEvents(EventBase theEvent)
+ {
+ if (theEvent is EventPresenceIn)
+ {
+ EventPresenceIn ep = (EventPresenceIn) theEvent;
+ //Channel-State: CS_ROUTING
+ //Channel-Name: sofia/default/jonas%40192.168.1.102%3A5070
+ //Unique-ID: 2f87ba27-2f71-d64d-8c64-9966ee894eac
+ //Call-Direction: inbound
+ //Answer-State: ringing
+ //Event-Name: PRESENCE_IN
+ CallState state = CallState.Unknown;
+ string destination = string.Empty;
+ if (ep.ChannelState.ChannelInfo.State == ChannelState.Routing)
+ {
+ if (IsInbound(ep))
+ {
+ state = CallState.Alerting;
+ destination = ep.Caller.DestinationNumber;
+ }
+ else
+ {
+ state = CallState.Offering;
+ destination = ep.Caller.UserName;
+ }
+ }
+ else if (ep.ChannelState.ChannelInfo.State == ChannelState.Hangup)
+ {
+ state = CallState.Disconnected;
+ if (IsInbound(ep))
+ destination = ep.Caller.DestinationNumber;
+ else
+ destination = ep.Caller.UserName;
+ }
+ if (state != CallState.Unknown)
+ TriggerCallState(ep.ChannelState.ChannelInfo.Address, ep.ChannelState.UniqueId, state, destination);
+ }
+ else if (theEvent is EventChannelAnswer)
+ {
+ EventChannelAnswer ea = (EventChannelAnswer) theEvent;
+ string destination;
+ if (IsInbound(ea))
+ destination = ea.Caller.DestinationNumber;
+ else
+ destination = ea.Caller.UserName;
+
+ TriggerCallState(ea.ChannelInfo.Address, ea.UniqueId, CallState.Connected, destination);
+ }
+
+ else if (theEvent is EventChannelDestroy)
+ {
+ EventChannelDestroy e = (EventChannelDestroy) theEvent;
+ Debug.WriteLine("triggering CallState.Disconnected");
+ TriggerCallState(e.ChannelInfo.Address, e.UniqueId, CallState.Disconnected,
+ e.Originator.DestinationNumber);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="evt"></param>
+ /// <returns>true if it's inbound to pbx (not to user)</returns>
+ private bool IsInbound(EventBase evt)
+ {
+ return evt.Parameters["Call-Direction"] == "inbound";
+ }
+
+
+ public void OnSwitchEvents2(EventBase theEvent)
+ {
+ ChannelEvent evt = theEvent as ChannelEvent;
+ EventChannelState channelState = theEvent as EventChannelState;
+ if (channelState != null)
+ Debug.WriteLine("ChannelState: " + channelState.ChannelInfo.State + " " + channelState.Caller.UserName +
+ " " + channelState.Caller.DestinationNumber);
+ else if (evt != null && evt.ChannelInfo != null)
+ Debug.WriteLine("ChannelEvent: " + evt.Name + " " + evt.ChannelInfo.Address);
+ if (evt != null)
+ {
+ // CHANNEL_ANSWER, No originator = new outgoing call.
+ // ChannelName = the one who makes the call
+ if (evt is EventChannelAnswer)
+ {
+ EventChannelAnswer e = (EventChannelAnswer) evt;
+ if (e.Originator.CallerIdName != string.Empty)
+ {
+ Debug.WriteLine("Skipping emoty ChannelAnswer");
+ return; // We do only want empty ones.
+ }
+
+ if (!IsExternalNumber(evt.ChannelInfo.Address))
+ {
+ Debug.WriteLine("triggering CallState.Alerting");
+ TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Alerting,
+ e.Caller.DestinationNumber);
+ }
+ }
+
+ // CHANNEL_OUTGOING, Event for Alerting/Offering
+ // Originator = the one calling
+ // ChannelName = the one getting called.
+ else if (evt is EventChannelOutgoing)
+ {
+ EventChannelOutgoing e = (EventChannelOutgoing) evt;
+ if (!IsExternalNumber(evt.ChannelInfo.Address))
+ {
+ Debug.WriteLine("triggering CallState.Offering");
+ TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Offering, e.Originator.UserName);
+ }
+ if (!IsExternalNumber(e.Originator.UserName))
+ {
+ Debug.WriteLine("triggering CallState.Alerting");
+ TriggerCallState(e.Originator.UserName, e.Originator.UniqueId, CallState.Alerting,
+ e.ChannelInfo.Address);
+ }
+ }
+
+ else if (evt is EventChannelBridge)
+ {
+ EventChannelBridge e = (EventChannelBridge) evt;
+ if (!IsExternalNumber(evt.ChannelInfo.Address))
+ {
+ Debug.WriteLine("triggering CallState.Connected");
+ TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Connected,
+ e.Caller.DestinationNumber);
+ }
+
+ // Trigger destination
+ if (!IsExternalNumber(e.Caller.DestinationNumber) && e.Originator.ChannelName != string.Empty)
+ {
+ Debug.WriteLine("triggering CallState.Connected");
+ TriggerCallState(ChannelDestination(e.Originator.ChannelName), e.UniqueId, CallState.Connected,
+ e.ChannelInfo.Address);
+ }
+ }
+
+ else if (evt is EventChannelDestroy)
+ {
+ EventChannelDestroy e = (EventChannelDestroy) evt;
+ Debug.WriteLine("triggering CallState.Disconnected");
+ TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Disconnected,
+ e.Originator.DestinationNumber);
+ }
+ }
+ }
+
+ private bool IsExternalNumber(string number)
+ {
+ if (number == null || number == string.Empty)
+ return false;
+ return number[0] == '+';
+ }
+
+ private void TriggerCallState(string extensionOrUserName, string id, CallState state, string destination)
+ {
+ ExtensionMapper em = GetMapper(extensionOrUserName);
+ Debug.WriteLine(String.Format("{0} -> {1}, {2} id: {3}", extensionOrUserName, destination, state, id));
+ Call call = em.setter.callState(id, state, destination);
+ if (ExtensionChanged != null)
+ ExtensionChanged(em.extension, call);
+ }
+
+ private void OnBridgeCallId(CmdBase command, CommandReply reply)
+ {
+ GetVariableReply gvr = (GetVariableReply) reply;
+ if (!gvr.Success)
+ Debug.WriteLine("OnBridgeCallId " + reply.ErrorMessage);
+
+ string otherChannelId = (string) command.ContextData;
+ SetVariable sv = new SetVariable(otherChannelId, "gate_callid", gvr.Value);
+ sv.ReplyReceived += OnCallIdReply;
+ _eventMgr.Send(sv);
+ command.ReplyReceived -= OnBridgeCallId;
+ }
+
+ private void OnCallIdReply(CmdBase command, CommandReply reply)
+ {
+ if (!reply.Success)
+ Debug.WriteLine("OnCallIdReply " + reply.ErrorMessage);
+ command.ReplyReceived -= OnCallIdReply;
+ }
+
+ #region Nested type: ExtensionMapper
+
+ private class ExtensionMapper
+ {
+ public Extension extension;
+ public ExtensionSetters setter;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallStateEvent.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallStateEvent.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/CallStateEvent.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallStateEvent.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/CallStateEvent.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,158 @@
+using System;
+
+namespace EventWatcher
+{
+ public enum CallState
+ {
+ Unknown,
+
+ /// <summary>
+ /// The call has been created, but Connect has not been called yet.
+ /// A call can never transition into the idle state.
+ /// This is the initial state for both incoming and outgoing calls.
+ /// </summary>
+ Idle,
+ /// <summary>
+ /// Connect has been called, and the service provider is working on
+ /// making a connection. This state is valid only on outgoing calls.
+ /// This message is optional, because a service provider may have a
+ /// call transition directly to the connected state.
+ /// </summary>
+ InProgress,
+ /// <summary>
+ /// Call has been connected to the remote end and communication can take place.
+ /// </summary>
+ Connected,
+ /// <summary>
+ /// Call has been disconnected. There are several causes for disconnection.
+ /// See the table of valid call state transitions below.
+ /// </summary>
+ Disconnected,
+ /// <summary>
+ /// A new call has appeared, and is being offered to an application.
+ /// If the application has owner privileges on the call, it can either
+ /// call Answer or Disconnect while the call is in the offering state.
+ /// </summary>
+ Offering,
+ Alerting,
+ /// <summary>
+ /// The call is in the hold state.
+ /// </summary>
+ Held,
+ }
+
+ public enum HangupCause
+ {
+ Success,
+ NormalClearing,
+ NoRouteTransitNet,
+ NoRouteDestination,
+ Busy,
+ Noanswer,
+ Rejected,
+ NumberChanged,
+ Congestion,
+ }
+ /// <summary>
+ /// Subclass for all call events.
+ /// The events are sent as commands through the
+ /// Command Dispatcher.
+ /// </summary>
+ [Serializable]
+ public class CallStateEvent
+ {
+ private string _callId;
+ private string _pbxId;
+ private string _destination;
+ private string _from;
+ private CallState _state = CallState.Idle;
+ private bool _isIncoming = true;
+ private bool _isInternal;
+ private HangupCause _hangupCause;
+
+ public CallStateEvent()
+ {
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="callId">Call identification string</param>
+ /// <param name="pbxId">Id used internally in the pbx to identify the call.</param>
+ /// <param name="from">Sip-Address to the one that made the call</param>
+ /// <param name="destination">Sip-address to where the call was made.</param>
+ public CallStateEvent(string callId, string pbxId, string from, string destination)
+ {
+ _callId = callId;
+ _from = from;
+ PbxId = pbxId;
+ _destination = destination;
+ }
+
+ /// <summary>
+ /// Call identification string.
+ /// </summary>
+ public string CallId
+ {
+ get { return _callId; }
+ set { _callId = value; }
+ }
+
+ /// <summary>
+ /// User that made the call.
+ /// </summary>
+ public string From
+ {
+ get { return _from; }
+ set { _from = value; }
+ }
+
+ /// <summary>
+ /// To whom the call was made.
+ /// </summary>
+ public string Destination
+ {
+ get { return _destination; }
+ set { _destination = value; }
+ }
+
+ /// <summary>
+ /// Current CallState.
+ /// </summary>
+ public CallState State
+ {
+ get { return _state; }
+ set { _state = value; }
+ }
+
+ /// <summary>
+ /// This is an incoming call.
+ /// </summary>
+ public bool Incoming
+ {
+ get { return _isIncoming; }
+ set { _isIncoming = value; }
+ }
+
+ /// <summary>
+ /// This is an internal call in the pbx.
+ /// </summary>
+ public bool Internal
+ {
+ get { return _isInternal; }
+ set { _isInternal = value; }
+ }
+
+ public HangupCause HangupCause
+ {
+ get { return _hangupCause; }
+ set { _hangupCause = value; }
+ }
+
+ internal string PbxId
+ {
+ get { return _pbxId; }
+ set { _pbxId = value; }
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,129 @@
+namespace EventWatcher
+{
+ partial class ChannelWatcher
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.tv = new System.Windows.Forms.TreeView();
+ this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
+ this.tb = new System.Windows.Forms.RichTextBox();
+ this.toolStrip1.SuspendLayout();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripLabel1});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(961, 25);
+ this.toolStrip1.TabIndex = 3;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.Location = new System.Drawing.Point(0, 25);
+ this.splitContainer1.Name = "splitContainer1";
+ this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.tb);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.tv);
+ this.splitContainer1.Size = new System.Drawing.Size(961, 622);
+ this.splitContainer1.SplitterDistance = 307;
+ this.splitContainer1.TabIndex = 4;
+ //
+ // tv
+ //
+ this.tv.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tv.FullRowSelect = true;
+ this.tv.Location = new System.Drawing.Point(0, 0);
+ this.tv.Name = "tv";
+ this.tv.ShowLines = false;
+ this.tv.ShowPlusMinus = false;
+ this.tv.ShowRootLines = false;
+ this.tv.Size = new System.Drawing.Size(961, 311);
+ this.tv.TabIndex = 2;
+ //
+ // toolStripLabel1
+ //
+ this.toolStripLabel1.Name = "toolStripLabel1";
+ this.toolStripLabel1.Size = new System.Drawing.Size(37, 22);
+ this.toolStripLabel1.Text = "Rensa";
+ this.toolStripLabel1.Click += new System.EventHandler(this.toolStripLabel1_Click);
+ //
+ // tb
+ //
+ this.tb.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tb.Location = new System.Drawing.Point(0, 0);
+ this.tb.Name = "tb";
+ this.tb.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
+ this.tb.Size = new System.Drawing.Size(961, 307);
+ this.tb.TabIndex = 0;
+ this.tb.Text = "";
+ this.tb.WordWrap = false;
+ //
+ // ChannelWatcher
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(961, 647);
+ this.Controls.Add(this.splitContainer1);
+ this.Controls.Add(this.toolStrip1);
+ this.Name = "ChannelWatcher";
+ this.Text = "ChannelWatcher";
+ this.Load += new System.EventHandler(this.ChannelWatcher_Load);
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ this.splitContainer1.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel1;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.TreeView tv;
+ private System.Windows.Forms.RichTextBox tb;
+
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,160 @@
+using System;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Windows.Forms;
+using FreeSwitch.EventSocket;
+
+namespace EventWatcher
+{
+ public partial class ChannelWatcher : Form
+ {
+ private EventManager _mgr = new EventManager(null);
+ private Color _currentColor = 0;
+ StringBuilder sb = new StringBuilder();
+
+ public ChannelWatcher()
+ {
+ InitializeComponent();
+ }
+
+ private void ChannelWatcher_Load(object sender, EventArgs e)
+ {
+ _mgr.Start("localhost");
+ _mgr.Subscribe(Event.All);
+ _mgr.EventReceived += OnPreSwitchEvent;
+ ClearTb();
+ // AddText("bajs");
+ }
+
+ private void OnPreSwitchEvent(EventBase theEvent)
+ {
+ if (tv.InvokeRequired)
+ BeginInvoke((MethodInvoker)delegate { OnSwitchEvent(theEvent); });
+ else
+ OnSwitchEvent(theEvent);
+ }
+
+ private void ClearTb()
+ {
+ /*
+{\rtf1\ansi\ansicpg1252\deff0\deflang1053
+ {\colortbl ;\red128\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue255;}
+ {\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
+\viewkind4\uc1\pard\f0\fs17 Hello\cf1\b <\cf3\b0 (Wor"ld")\cf1\b >\cf0\b0 \par
+}
+ */
+ sb.Length = 0;
+ sb.Append(
+ @"{\rtf1\ansi\ansicpg1252\deff0\deflang1053"
+ + @"{\colortbl ;\red0\green0\blue0;\red128\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue255;}"
+ + @"{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}"
+ + @"\viewkind4\uc1\pard\f0\fs20\par \par}");
+ tb.Rtf = sb.ToString();
+ }
+
+ public enum Color
+ {
+ None,
+ Black,
+ Red,
+ Green,
+ Blue
+ }
+
+
+
+ [DllImport("user32.dll")]
+ public static extern bool LockWindowUpdate(IntPtr hWndLock);
+
+ private void AddText(string text)
+ {
+ text = text.Replace("\\", "\\\\").Replace("{", "\\{").Replace("}", "\\}");
+ string colored = string.Empty;
+ bool inQ = false;
+ bool bold = false;
+ foreach (char ch in text)
+ {
+ Color color = Color.None;
+ if (inQ)
+ {
+ if (ch == '"')
+ {
+ inQ = false;
+ color = Color.Black;
+ }
+ }
+ else if (char.IsLetter(ch))
+ color = Color.Black;
+ else if (Char.IsDigit(ch))
+ color = Color.Blue;
+ else if (ch == '"')
+ {
+ inQ = true;
+ color = Color.Green;
+ }
+ else
+ {
+ bold = true;
+ color = Color.Red;
+ }
+
+ if (color != Color.None)
+ SetColor(ref colored, color, bold);
+
+ if (ch == ')')
+ colored += ' ';
+ colored += ch;
+ if (ch == ')')
+ colored += ' ';
+ }
+ sb.Length = sb.Length - 5;
+ sb.AppendLine(colored);
+ sb.Append("\\par\\par}");
+ LockWindowUpdate(tb.Handle);
+ tb.Rtf = sb.ToString();
+ tb.SelectionStart = tb.Text.Length;
+ tb.ScrollToCaret();
+ LockWindowUpdate(IntPtr.Zero);
+ //ScrollToEnd(tb);
+
+ }
+
+ private void SetColor(ref string text, Color color, bool bold)
+ {
+ if (color != _currentColor)
+ {
+ text += "\\cf" + (int) color;
+ //if (bold)
+ // text += "\\b";
+ text += " ";
+ _currentColor = color;
+ }
+ }
+
+ private void OnSwitchEvent(EventBase theEvent)
+ {
+ AddText(theEvent.ToString());
+
+ ChannelEvent evt = theEvent as ChannelEvent;
+ if (evt == null)
+ return;
+
+ TreeNode node = tv.Nodes[evt.UniqueId];
+ if (node == null)
+ {
+ tv.Nodes.Add(evt.UniqueId, evt.ToString());
+ node = tv.Nodes[evt.UniqueId];
+ node.Tag = evt;
+ node.ToolTipText = evt.ToString().Replace(".", "\r\n");
+ }
+ node.Nodes.Add(new TreeNode(evt.ToString()));
+ }
+
+ private void toolStripLabel1_Click(object sender, EventArgs e)
+ {
+ tv.Nodes.Clear();
+ ClearTb();
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,106 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E65ABA5F-A578-4E3C-989D-0FE4E459C03D}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>EventWatcher</RootNamespace>
+ <AssemblyName>EventWatcher</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Design" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Call.cs" />
+ <Compile Include="CallManager.cs" />
+ <Compile Include="CallStateEvent.cs" />
+ <Compile Include="ChannelWatcher.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="ChannelWatcher.Designer.cs">
+ <DependentUpon>ChannelWatcher.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Extension.cs" />
+ <Compile Include="Form1.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Form1.Designer.cs">
+ <DependentUpon>Form1.cs</DependentUpon>
+ </Compile>
+ <Compile Include="LabelTextBox.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <EmbeddedResource Include="ChannelWatcher.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>ChannelWatcher.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Form1.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>Form1.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Resources.resx</DependentUpon>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\FreeSwitchEventSocket\FreeSwitch.EventSocket.csproj">
+ <Project>{3F8895F6-F710-4323-B96A-4EFB6BC97E08}</Project>
+ <Name>FreeSwitch.EventSocket</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="ReadMePlease.txt" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Extension.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Extension.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Extension.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Extension.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Extension.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,162 @@
+using System;
+using System.Collections.Generic;
+
+namespace EventWatcher
+{
+ public delegate void ExtensionHandler(Extension extension);
+ public delegate void CallHandler(Extension extension, Call call);
+ public delegate Call CallStateSetter(string id, CallState state, string destination);
+
+ /// <summary>
+ /// Used to set states for the extension.
+ /// We are using this method since we do not want anything else
+ /// but the CallMgr to be able to set stuff.
+ /// </summary>
+ /// <param name="forwardAll">null if it has changed, else the new forward destination</param>
+ /// <param name="forwardBusy">null if it has changed, else the new forward destination</param>
+ /// <param name="forwardNoAnswer">null if it has changed, else the new forward destination</param>
+ public delegate void ForwardSetter(string forwardAll, string forwardBusy, string forwardNoAnswer);
+
+ public class ExtensionSetters
+ {
+ public CallStateSetter callState;
+ public ForwardSetter forwardSetter;
+ }
+
+ /// <summary>
+ /// Class representing an extension.
+ /// </summary>
+ [Serializable]
+ public class Extension
+ {
+ private readonly string _address = string.Empty;
+ private readonly IDictionary<string, Call> _calls = new Dictionary<string, Call>();
+ private readonly string _destination = string.Empty;
+ private string _forwardAll = string.Empty;
+ private string _forwardBusy = string.Empty;
+ private string _forwardNoAnswer = string.Empty;
+ private ExtensionSetters _handler;
+
+ public Extension(string address)
+ {
+ _address = address;
+ }
+
+ public Extension(string address, ExtensionSetters setters)
+ {
+ _address = address;
+ Handler = setters;
+ }
+
+ public bool IsBusy
+ {
+ get
+ {
+ foreach (KeyValuePair<string, Call> pair in _calls)
+ {
+ if (pair.Value.State != CallState.Disconnected
+ && pair.Value.State != CallState.Held)
+ return false;
+ }
+ return true;
+ }
+ }
+
+ /// <summary>
+ /// Determines if this extension is forwarded in any way
+ /// </summary>
+ public bool IsForwarded
+ {
+ get
+ {
+ return _forwardNoAnswer != string.Empty
+ || _forwardBusy != string.Empty
+ || _forwardAll != string.Empty;
+ }
+ }
+
+ public string ForwardAll
+ {
+ get { return _forwardAll; }
+ }
+
+ public string ForwardBusy
+ {
+ get { return _forwardBusy; }
+ }
+
+ public string ForwardNoAnswer
+ {
+ get { return _forwardNoAnswer; }
+ }
+
+ public string Destination
+ {
+ get { return _destination; }
+ }
+
+ public string Address
+ {
+ get { return _address; }
+ }
+
+ public ExtensionSetters Handler
+ {
+ get { return _handler; }
+ set
+ {
+ if (value != null)
+ //Check.Require(_handler == null, "Handler can only be assigned one time.");
+
+ _handler = value;
+ if (value != null)
+ {
+ value.callState = SetCallState;
+ value.forwardSetter = SetForward;
+ }
+ }
+ }
+
+ private Call SetCallState(string id, CallState state, string destination)
+ {
+ bool wasBusy = IsBusy;
+
+ Call call;
+ if (!_calls.ContainsKey(id))
+ call = new Call(id);
+ else
+ call = _calls[id];
+
+ call.SetCallState(state);
+ call.SetDestination(destination);
+
+ if (CallChanged != null)
+ CallChanged(this, call);
+
+ if (state == CallState.Disconnected)
+ _calls.Remove(id);
+
+
+ if (wasBusy != IsBusy && BusyStateChanged != null)
+ BusyStateChanged(this);
+
+ return call;
+ }
+
+ private void SetForward(string forwardAll, string forwardBusy, string forwardNoAnswer)
+ {
+ if (forwardAll != null)
+ _forwardAll = forwardAll;
+ if (forwardBusy != null)
+ _forwardBusy = forwardBusy;
+ if (forwardNoAnswer != null)
+ _forwardNoAnswer = forwardNoAnswer;
+ if (ForwardChanged != null)
+ ForwardChanged(this);
+ }
+
+ public event ExtensionHandler BusyStateChanged;
+ public event CallHandler CallChanged;
+ public event ExtensionHandler ForwardChanged;
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.Designer.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.Designer.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.Designer.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.Designer.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.Designer.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,212 @@
+namespace EventWatcher
+{
+ partial class Form1
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.log = new System.Windows.Forms.TextBox();
+ this.info = new System.Windows.Forms.RichTextBox();
+ this.lv = new System.Windows.Forms.ListView();
+ this.colAddress = new System.Windows.Forms.ColumnHeader();
+ this.colId = new System.Windows.Forms.ColumnHeader();
+ this.colPbxId = new System.Windows.Forms.ColumnHeader();
+ this.colState = new System.Windows.Forms.ColumnHeader();
+ this.colCaller = new System.Windows.Forms.ColumnHeader();
+ this.colOriginator = new System.Windows.Forms.ColumnHeader();
+ this.colOrginatee = new System.Windows.Forms.ColumnHeader();
+ this.lvAll = new System.Windows.Forms.ListView();
+ this.from = new System.Windows.Forms.ColumnHeader();
+ this.To = new System.Windows.Forms.ColumnHeader();
+ this.ChannelId = new System.Windows.Forms.ColumnHeader();
+ this.SessionId = new System.Windows.Forms.ColumnHeader();
+ this.State = new System.Windows.Forms.ColumnHeader();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.log);
+ this.panel1.Controls.Add(this.info);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Right;
+ this.panel1.Location = new System.Drawing.Point(627, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(293, 546);
+ this.panel1.TabIndex = 11;
+ //
+ // log
+ //
+ this.log.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.log.Location = new System.Drawing.Point(0, 526);
+ this.log.Name = "log";
+ this.log.Size = new System.Drawing.Size(293, 20);
+ this.log.TabIndex = 11;
+ //
+ // info
+ //
+ this.info.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.info.Location = new System.Drawing.Point(0, 0);
+ this.info.Name = "info";
+ this.info.Size = new System.Drawing.Size(293, 546);
+ this.info.TabIndex = 10;
+ this.info.Text = "";
+ //
+ // lv
+ //
+ this.lv.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.colAddress,
+ this.colId,
+ this.colPbxId,
+ this.colState,
+ this.colCaller,
+ this.colOriginator,
+ this.colOrginatee});
+ this.lv.Dock = System.Windows.Forms.DockStyle.Top;
+ this.lv.Location = new System.Drawing.Point(0, 0);
+ this.lv.Name = "lv";
+ this.lv.Size = new System.Drawing.Size(627, 152);
+ this.lv.TabIndex = 12;
+ this.lv.UseCompatibleStateImageBehavior = false;
+ this.lv.View = System.Windows.Forms.View.Details;
+ //
+ // colAddress
+ //
+ this.colAddress.Text = "Anknytning";
+ this.colAddress.Width = 65;
+ //
+ // colId
+ //
+ this.colId.Text = "Id";
+ this.colId.Width = 26;
+ //
+ // colPbxId
+ //
+ this.colPbxId.Text = "PbxId";
+ this.colPbxId.Width = 230;
+ //
+ // colState
+ //
+ this.colState.Text = "Status";
+ this.colState.Width = 50;
+ //
+ // colCaller
+ //
+ this.colCaller.Text = "Caller";
+ this.colCaller.Width = 62;
+ //
+ // colOriginator
+ //
+ this.colOriginator.Text = "Originator";
+ this.colOriginator.Width = 72;
+ //
+ // colOrginatee
+ //
+ this.colOrginatee.Text = "Orginatee";
+ this.colOrginatee.Width = 116;
+ //
+ // lvAll
+ //
+ this.lvAll.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.from,
+ this.To,
+ this.ChannelId,
+ this.SessionId,
+ this.State});
+ this.lvAll.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lvAll.Location = new System.Drawing.Point(0, 152);
+ this.lvAll.Name = "lvAll";
+ this.lvAll.Size = new System.Drawing.Size(627, 394);
+ this.lvAll.TabIndex = 13;
+ this.lvAll.UseCompatibleStateImageBehavior = false;
+ this.lvAll.View = System.Windows.Forms.View.Details;
+ this.lvAll.SelectedIndexChanged += new System.EventHandler(this.lvAll_SelectedIndexChanged);
+ this.lvAll.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvAll_ItemSelectionChanged);
+ //
+ // from
+ //
+ this.from.Text = "Fr\xE5n";
+ //
+ // To
+ //
+ this.To.Text = "Till";
+ this.To.Width = 84;
+ //
+ // ChannelId
+ //
+ this.ChannelId.Text = "ChannelId";
+ this.ChannelId.Width = 282;
+ //
+ // SessionId
+ //
+ this.SessionId.Text = "SessionId";
+ this.SessionId.Width = 318;
+ //
+ // State
+ //
+ this.State.Text = "State";
+ this.State.Width = 99;
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(920, 546);
+ this.Controls.Add(this.lvAll);
+ this.Controls.Add(this.lv);
+ this.Controls.Add(this.panel1);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.TextBox log;
+ private System.Windows.Forms.RichTextBox info;
+ private System.Windows.Forms.ListView lv;
+ private System.Windows.Forms.ColumnHeader colAddress;
+ private System.Windows.Forms.ColumnHeader colId;
+ private System.Windows.Forms.ColumnHeader colPbxId;
+ private System.Windows.Forms.ColumnHeader colState;
+ private System.Windows.Forms.ColumnHeader colCaller;
+ private System.Windows.Forms.ColumnHeader colOriginator;
+ private System.Windows.Forms.ColumnHeader colOrginatee;
+ private System.Windows.Forms.ListView lvAll;
+ private System.Windows.Forms.ColumnHeader from;
+ private System.Windows.Forms.ColumnHeader To;
+ private System.Windows.Forms.ColumnHeader ChannelId;
+ private System.Windows.Forms.ColumnHeader SessionId;
+ private System.Windows.Forms.ColumnHeader State;
+
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,235 @@
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Reflection;
+using System.Windows.Forms;
+using FreeSwitch.EventSocket;
+using FreeSwitch.EventSocket.Commands;
+using FreeSwitch.EventSocket.General;
+
+namespace EventWatcher
+{
+ public partial class Form1 : Form
+ {
+ private EventManager _eventMgr;
+ private CallManager _callMgr;
+
+ public Form1()
+ {
+ InitializeComponent();
+ _eventMgr = new EventManager(null);
+ _callMgr = new CallManager(_eventMgr);
+ _callMgr.OnCallState += OnCallState;
+ _callMgr.ExtensionAdded += OnExtensionAdded;
+ _callMgr.ExtensionChanged += OnExtensionChanged;
+
+
+ }
+
+ private void OnExtensionAdded(Extension extension)
+ {
+ //throw new NotImplementedException();
+ }
+
+ private void OnExtensionChanged(Extension extension, Call call)
+ {
+ if (lv.InvokeRequired)
+ BeginInvoke((MethodInvoker)delegate { OnExtensionChangedX(extension, call); });
+ else
+ OnExtensionChangedX(extension, call);
+ }
+
+ private void OnExtensionChangedX(Extension extension, Call call)
+ {
+ ListViewItem item = null;
+ foreach (ListViewItem item2 in lv.Items)
+ {
+ if (String.Compare(item2.Name, extension.Address, true) == 0)
+ {
+ item = item2;
+ break;
+ }
+ }
+ if (item == null)//(!lv.Items.ContainsKey(extension.Address))
+ {
+ item = lv.Items.Add(extension.Address, extension.Address, 0);
+ item.Tag = extension;
+ item.SubItems.Add(call.Id);
+ item.SubItems.Add(call.State.ToString());
+ item.SubItems.Add(call.PreviousState.ToString());
+ item.SubItems.Add("");
+ item.SubItems.Add(extension.Destination);
+ }
+ else
+ {
+ item.SubItems[2].Text = call.State.ToString();
+ item.SubItems[3].Text = call.PreviousState.ToString();
+ }
+ }
+
+ private void OnExtensionCallState(Extension e)
+ {
+
+ }
+ private void OnCallState(CallManager mgr, CallStateEvent cs)
+ {
+ if (lv.InvokeRequired)
+ BeginInvoke((MethodInvoker)delegate { OnCallStateX(mgr, cs); });
+ else
+ OnCallStateX(mgr, cs);
+ }
+
+ private void OnCallStateX(CallManager mgr, CallStateEvent cs)
+ {
+ ListViewItem item;
+ if (!lv.Items.ContainsKey(cs.PbxId))
+ {
+ item = lv.Items.Add(cs.PbxId, cs.From, 0);
+ item.Tag = cs;
+ item.SubItems.Add(cs.CallId);
+ item.SubItems.Add(cs.PbxId);
+ item.SubItems.Add(cs.State.ToString());
+ item.SubItems.Add(cs.From);
+ item.SubItems.Add(cs.Destination);
+ }
+ else
+ item = lv.Items[cs.PbxId];
+
+ item.SubItems[1].Text = cs.CallId;
+ item.SubItems[3].Text = cs.State.ToString();
+ item.SubItems[4].Text = cs.Destination;
+
+ if (cs.State == CallState.Disconnected)
+ lv.Items.RemoveByKey(cs.PbxId);
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ _eventMgr.Password = "ClueCon";
+ _eventMgr.Start("localhost");
+ _eventMgr.Subscribe(new Events(Event.All));
+ _eventMgr.EventReceived += OnPreSwitchEvent;
+ }
+
+ private void OnPreSwitchEvent(EventBase theEvent)
+ {
+ _callMgr.OnSwitchEvents(theEvent);
+ if (lvAll.InvokeRequired)
+ BeginInvoke((MethodInvoker)delegate { OnSwitchEvent(theEvent); });
+ else
+ OnSwitchEvent(theEvent);
+ }
+
+
+ private string DisplayProperties(object o)
+ {
+ return DisplayProperties(o, 0);
+ }
+
+ private string DisplayProperties(object o, int spaces)
+ {
+ PropertyInfo[] pis = o.GetType().GetProperties();
+ string info = string.Empty;
+ foreach (PropertyInfo pi in pis)
+ {
+ if (pi.PropertyType == typeof (ChannelInfo) || pi.PropertyType == typeof (PartyInfo))
+ {
+ info += pi.Name.PadLeft(spaces + pi.Name.Length) + "\r\n";
+ info += DisplayProperties(pi.GetValue(o, null), spaces + 2);
+ }
+ else
+ info += pi.Name.PadLeft(spaces + pi.Name.Length) + ": " + pi.GetValue(o, null) + "\r\n";
+ }
+ return info;
+ }
+
+ private void OnSwitchEvent(EventBase theEvent)
+ {
+ EventChannelState e = theEvent as EventChannelState;
+ if (e != null)
+ {
+
+ EventChannelState channelEvent = theEvent as EventChannelState;
+ if (channelEvent == null)
+ return;
+
+ //OnSwitchEvents(theEvent);
+
+ ListViewItem item;
+ item = lvAll.Items.Add(channelEvent.ChannelInfo.Address);
+ item.Tag = channelEvent;
+ item.SubItems.Add(channelEvent.Originator.UserName);
+ item.SubItems.Add(channelEvent.UniqueId);
+ item.SubItems.Add(channelEvent.Caller.UniqueId);
+ if (channelEvent.Name == "CHANNEL_STATE")
+ item.SubItems.Add(e.ChannelInfo.State.ToString());
+ else
+ item.SubItems.Add(e.Name);
+
+ if (e.GetType() == typeof(EventCodec) || theEvent.GetType() == typeof(EventChannelExecute)
+ || e.Originator.DestinationNumber == string.Empty)
+ {
+ item.ForeColor = Color.Gray;
+ }
+
+ }
+ log.Text = theEvent.Name;
+ }
+
+ private void AddEvent(ListBox box, ChannelEvent e)
+ {
+ box.Items.Insert(0, new Wrapper(e));
+ }
+
+ private void lvAll_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ /*
+ if (lvAll.SelectedItems.Count == 0)
+ return;
+ ListViewItem itm = lvAll.SelectedItems[0];
+ MessageBox.Show(DisplayProperties(itm.Tag));
+ * */
+ }
+
+ private void lvAll_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
+ {
+ if (lvAll.SelectedItems.Count == 0)
+ return;
+ ListViewItem itm = lvAll.SelectedItems[0];
+ info.Text = DisplayProperties(itm.Tag);
+ }
+
+ #region Nested type: SwitchEventHandler
+
+ private delegate void SwitchEventHandler(EventBase theEvent);
+
+ #endregion
+
+ #region Nested type: Wrapper
+
+ private class Wrapper
+ {
+ public ChannelEvent e;
+
+ public Wrapper(ChannelEvent e)
+ {
+ this.e = e;
+ }
+
+ public override string ToString()
+ {
+ return "[" + e.Name + "] " + e.ChannelInfo.State;
+ }
+ }
+
+ #endregion
+
+ private void btnOriginate_Click(object sender, EventArgs e)
+ {
+ //Originate org = new Originate();
+ //org.Caller = new SofiaSipAddress("gauffin.com");
+ //from_id.Text
+ }
+
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.resx
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.resx (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.resx) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.resx (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Form1.resx 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/LabelTextBox.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/LabelTextBox.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/LabelTextBox.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/LabelTextBox.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/LabelTextBox.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace EventWatcher
+{
+ class LabelTextBox : TextBox
+ {
+ private string _label;
+
+ public string Label
+ {
+ get { return _label; }
+ set
+ {
+ _label = value;
+ if (Text == string.Empty)
+ SetLabel();
+ }
+ }
+
+ public void test()
+ {
+ TextBox x = new TextBox();
+ x.KeyDown += tb_KeyDown;
+ x.TextChanged += tb_TextChanged;
+ }
+
+ private void tb_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
+ {
+ if (ForeColor == Color.FromKnownColor(KnownColor.InactiveCaptionText))
+ RemoveLabel();
+ }
+
+ private void tb_TextChanged(object sender, EventArgs e)
+ {
+ if (Text == string.Empty)
+ SetLabel();
+ else if (Text != _label && Text != string.Empty)
+ RemoveLabel();
+ }
+
+ private void RemoveLabel()
+ {
+ ForeColor = Color.FromKnownColor(KnownColor.WindowText);
+ Text = string.Empty;
+
+ }
+ private void SetLabel()
+ {
+ ForeColor = Color.FromKnownColor(KnownColor.InactiveCaptionText);
+ Text = _label;
+
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace EventWatcher
+{
+ static class Program
+ {
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new ChannelWatcher());
+ }
+ }
+}
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/AssemblyInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/AssemblyInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/AssemblyInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/AssemblyInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/AssemblyInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("EventWatcher")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("EventWatcher")]
+[assembly: AssemblyCopyright("Copyright © 2007")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e6a71f21-6833-455f-a398-a0d6a54c1359")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.Designer.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.Designer.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.Designer.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.Designer.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.Designer.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.312
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace EventWatcher.Properties {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EventWatcher.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.resx
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.resx (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.resx) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.resx (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Resources.resx 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.Designer.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.Designer.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.Designer.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.Designer.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.Designer.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.312
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace EventWatcher.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.settings
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.settings (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.settings) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.settings (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/Properties/Settings.settings 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile>
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ReadMePlease.txt
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ReadMePlease.txt (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/EventWatcher/ReadMePlease.txt) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ReadMePlease.txt (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/EventWatcher/ReadMePlease.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+This is just a test project that I used to develop the event socket lib.
+
+It could in the future be an application that keep track on all channels and their current state.
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/EventSocket.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/EventSocket.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/EventSocket.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/EventSocket.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/EventSocket.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using FreeSwitch.EventSocket;
+using FreeSwitch.EventSocket.Commands;
+using FreeSwitch.EventSocket.General;
+
+namespace FreeSwitch.EventSocket.Test
+{
+ class EventSocket
+ {
+ private FreeSwitch.EventSocket.EventSocket m_es = new FreeSwitch.EventSocket.EventSocket(null);
+
+ public void Setup()
+ {
+ m_es.Connect("192.168.1.102");
+ m_es.Subscribe(new Events(Event.All));
+ //m_es.SendApi(new Originate(new SofiaSipAddress("gauffin.com", "arne"), new Address("8888")));
+ System.Threading.Thread.Sleep(500000);
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/FreeSwitch.EventSocket.Test.csproj
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/FreeSwitch.EventSocket.Test.csproj (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/FreeSwitch.EventSocket.Test.csproj) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/FreeSwitch.EventSocket.Test.csproj (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/FreeSwitch.EventSocket.Test.csproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,55 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{3679225D-79A3-4B6C-BCA1-E2DC265E423A}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>FreeSwitch.EventSocket.Test</RootNamespace>
+ <AssemblyName>FreeSwitch.EventSocket.Test</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="EventSocket.cs" />
+ <Compile Include="ParserTest.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\FreeSwitchEventSocket\FreeSwitch.EventSocket.csproj">
+ <Project>{3F8895F6-F710-4323-B96A-4EFB6BC97E08}</Project>
+ <Name>FreeSwitch.EventSocket</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/ParserTest.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/ParserTest.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/ParserTest.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/ParserTest.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/ParserTest.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.Test
+{
+ class ParserTest
+ {
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Specialized;
+using System.IO;
+using System.Threading;
+
+namespace FreeSwitch.EventSocket.Test
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ /*EventManager mgr = new EventManager();
+ mgr.Subscribe(Events.GetChannelEvents());
+ mgr.Start("localhost");
+ Console.ReadLine();
+ */
+ Program p = new Program();
+ p.Test();
+
+ }
+
+ private int _counter;
+ private EventParser _parser;
+ Random _rand = new Random((int)DateTime.Now.Ticks);
+
+ public void Test()
+ {
+ _parser = new EventParser();
+ string text = File.ReadAllText("C:\\mymsgs.txt");
+ Thread[] threads = new Thread[5];
+ for (int i = 0; i < 5; ++i)
+ threads[i] = new Thread(FeedStream);
+
+ while (StreamFeeder(ref text)) ;
+ //Parse(text);
+/*
+ Parse(File.ReadAllText("C:\\events1.txt"));
+ Parse(File.ReadAllText("C:\\events2.txt"));
+ Parse(File.ReadAllText("C:\\events3.txt"));
+*/
+ }
+
+ public void FeedStream()
+ {
+
+ }
+ public bool StreamFeeder(ref string text)
+ {
+ int length;
+ if (text.Length < 5)
+ length = text.Length;
+ else
+ length = _rand.Next(text.Length / 2);
+
+ string myText = text.Substring(0, length);
+ Parse(myText);
+ text = text.Remove(0, length);
+ return text.Length > 0;
+ }
+
+ public void Parse(string text)
+ {
+ _parser.Append(text);
+ PlainEventMsg msg = _parser.ParseOne();
+ while (msg != null)
+ {
+ ++_counter;
+
+ NameValueCollection pars = msg.ParseBody(true);
+ Console.WriteLine(pars["event-name"]);
+
+ msg = _parser.ParseOne();
+ }
+
+
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties/AssemblyInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties/AssemblyInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties/AssemblyInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties/AssemblyInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Properties/AssemblyInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("FreeSwitch.EventSocket.Test")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("FreeSwitch.EventSocket.Test")]
+[assembly: AssemblyCopyright("Copyright © 2007")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b496f9be-f1be-457d-b8c8-fae97c43df8e")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.sln
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.sln (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.sln) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.sln (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.sln 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSwitch.EventSocket", "FreeSwitchEventSocket\FreeSwitch.EventSocket.csproj", "{3F8895F6-F710-4323-B96A-4EFB6BC97E08}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSwitch.EventSocket.Test", "FreeSwitch.EventSocket.Test\FreeSwitch.EventSocket.Test.csproj", "{3679225D-79A3-4B6C-BCA1-E2DC265E423A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventWatcher", "EventWatcher\EventWatcher.csproj", "{E65ABA5F-A578-4E3C-989D-0FE4E459C03D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IvrSocket", "IvrSocket\IvrSocket.csproj", "{22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3F8895F6-F710-4323-B96A-4EFB6BC97E08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F8895F6-F710-4323-B96A-4EFB6BC97E08}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F8895F6-F710-4323-B96A-4EFB6BC97E08}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F8895F6-F710-4323-B96A-4EFB6BC97E08}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3679225D-79A3-4B6C-BCA1-E2DC265E423A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3679225D-79A3-4B6C-BCA1-E2DC265E423A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3679225D-79A3-4B6C-BCA1-E2DC265E423A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3679225D-79A3-4B6C-BCA1-E2DC265E423A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E65ABA5F-A578-4E3C-989D-0FE4E459C03D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E65ABA5F-A578-4E3C-989D-0FE4E459C03D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E65ABA5F-A578-4E3C-989D-0FE4E459C03D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E65ABA5F-A578-4E3C-989D-0FE4E459C03D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket)
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,69 @@
+namespace FreeSwitch.EventSocket
+{
+ public class ChannelEvent : EventBase
+ {
+ private ChannelInfo _channelInfo;
+ private string _uniqueId = string.Empty;
+ private string _answerState;
+ private string _callDirection;
+
+ public override bool IsChannelEvent
+ {
+ get { return true; }
+ }
+
+ /// <summary>
+ /// Information about the used channel and it's state.
+ /// </summary>
+ public ChannelInfo ChannelInfo
+ {
+ get { return _channelInfo; }
+ set { _channelInfo = value; }
+ }
+
+ public string UniqueId
+ {
+ get { return _uniqueId; }
+ set { _uniqueId = value; }
+ }
+
+ public string AnswerState
+ {
+ get { return _answerState; }
+ set { _answerState = value; }
+ }
+
+ public string CallDirection
+ {
+ get { return _callDirection; }
+ set { _callDirection = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == "unique-id")
+ _uniqueId = value;
+ else if (name == "answer-state")
+ _answerState = value;
+ else if (name == "call-direction")
+ _callDirection = value;
+ else if (name.Length > 8 && name.Substring(0, 8) == "channel-")
+ {
+ if (_channelInfo == null)
+ _channelInfo = new ChannelInfo();
+ return _channelInfo.Parse(name, value);
+ }
+ else
+ return base.ParseCommand(name, value);
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return
+ "ChannelEvent(" + _uniqueId + " [" + _callDirection + "] " + _answerState +
+ ", channelInfo{" + _channelInfo + "})";
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelAnswer : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelAnswer." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelApplication : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelApplication." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelBridge : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelBridge." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelCreate : ChannelEvent
+ {
+ public override string ToString()
+ {
+ return "ChannelCreate." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelDestroy : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelDestroy." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,37 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelExecute : EventChannelState
+ {
+ private string _appName;
+ private string _arguments;
+
+ public string AppName
+ {
+ get { return _appName; }
+ set { _appName = value; }
+ }
+
+ public string Arguments
+ {
+ get { return _arguments; }
+ set { _arguments = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == "application")
+ AppName = value;
+ else if (name == "application-data")
+ Arguments = value;
+ else
+ return base.ParseCommand(name, value);
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "EventChannelExecute(" + _appName + ", '" + _arguments + "')." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelExecuteComplete : EventChannelState
+ {
+ private string _appName;
+ private string _arguments;
+
+ public string AppName
+ {
+ get { return _appName; }
+ set { _appName = value; }
+ }
+
+ public string Arguments
+ {
+ get { return _arguments; }
+ set { _arguments = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == "application")
+ AppName = value;
+ else if (name == "application-data")
+ Arguments = value;
+ else
+ return base.ParseCommand(name, value);
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "ExecuteComplete(" + _appName + ", '" + _arguments + "')." + base.ToString();
+ }
+ }
+}
+
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,104 @@
+using System;
+
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelHangup : EventChannelState
+ {
+ private HangupCause _hangupCause;
+
+
+ public HangupCause Cause
+ {
+ get { return _hangupCause; }
+ set { _hangupCause = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == "hangupcause" || name == "hangup-cause")
+ {
+ string cause = StringHelper.UpperCaseToCamelCase(value);
+ try
+ {
+ _hangupCause = (HangupCause)Enum.Parse(typeof(HangupCause), cause, true);
+ }
+ catch(ArgumentException)
+ {
+ _hangupCause = HangupCause.Unknown;
+ }
+ }
+ else
+ return base.ParseCommand(name, value);
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "ChannelHangup(" + _hangupCause + ")." + base.ToString();
+ }
+ }
+
+ public enum HangupCause
+ {
+ Success,
+ NoRouteTransitNet,
+ NoRouteDestination,
+ ChannelUnacceptable,
+ CallAwardedDelivered,
+ NormalClearing,
+ UserBusy,
+ NoUserResponse,
+ NoAnswer,
+ SubscriberAbsent,
+ CallRejected,
+ NumberChanged,
+ RedirectionToNewDestination,
+ ExchangeRoutingError,
+ DestinationOutOfOrder,
+ InvalidNumberFormat,
+ FacilityRejected,
+ ResponseToStatusEnquiry,
+ NormalUnspecified,
+ NormalCircuitCongestion,
+ NetworkOutOfOrder,
+ NormalTemporaryFailure,
+ SwitchCongestion,
+ AccessInfoDiscarded,
+ RequestedChanUnavail,
+ PreEmpted,
+ FacilityNotSubscribed,
+ OutgoingCallBarred,
+ IncomingCallBarred,
+ BearercapabilityNotauth,
+ BearercapabilityNotavail,
+ ServiceUnavailable,
+ ChanNotImplemented,
+ FacilityNotImplemented,
+ ServiceNotImplemented,
+ InvalidCallReference,
+ IncompatibleDestination,
+ InvalidMsgUnspecified,
+ MandatoryIeMissing,
+ MessageTypeNonexist,
+ WrongMessage,
+ IeNonexist,
+ InvalidIeContents,
+ WrongCallState,
+ RecoveryOnTimerExpire,
+ MandatoryIeLengthError,
+ ProtocolError,
+ Interworking,
+ OriginatorCancel,
+ Crash,
+ SystemShutdown,
+ LoseRace,
+ ManagerRequest,
+ BlindTransfer,
+ AttendedTransfer,
+ AllottedTimeout,
+ UnAllocated,
+ Unknown
+ }
+
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelOriginate : ChannelEvent
+ {
+ public override string ToString()
+ {
+ return "ChannelOriginate." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelOutgoing : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelOutgoing." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelPark : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelPark." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelProgress : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelProgress" + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,98 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelState : ChannelEvent
+ {
+ private const string Yes = "yes";
+ private const string CallerTag = "caller-";
+ private const string OriginatorTag = "originator-";
+ private const string OriginateeTag = "originatee-";
+ private const string OtherLegTag = "other-leg-";
+ private const string ScreenBitTag = "screen-bit";
+ private PartyInfo _caller = PartyInfo.Empty;
+ private PartyInfo _originator = PartyInfo.Empty;
+ private PartyInfo _otherLeg = PartyInfo.Empty;
+ private bool _screenBit = false;
+
+ /// <summary>
+ /// Information about the called party.
+ /// This property is null for certain channel states,
+ /// depending on if freeswitch sends it or not.
+ /// </summary>
+ public PartyInfo Caller
+ {
+ get { return _caller; }
+ set { _caller = value; }
+ }
+
+ /// <summary>
+ /// Information about the destination (place that the caller want to reach).
+ /// This property is null for certain channel states,
+ /// depending on if freeswitch sends it or not.
+ /// </summary>
+ public PartyInfo Originator
+ {
+ get { return _originator; }
+ set { _originator = value; }
+ }
+
+ public bool ScreenBit
+ {
+ get { return _screenBit; }
+ set { _screenBit = value; }
+ }
+
+ /// <summary>
+ /// Other leg of call.
+ /// </summary>
+ public PartyInfo OtherLeg
+ {
+ get { return _otherLeg; }
+ set { _otherLeg = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == ScreenBitTag)
+ {
+ ScreenBit = value == Yes;
+ return true;
+ }
+ else if (name.Length > 11 && name.Substring(0, 11) == OriginatorTag
+ || name.Length > 11 && name.Substring(0, 11) == OriginateeTag)
+ {
+ if (_originator == PartyInfo.Empty)
+ _originator = new PartyInfo();
+
+ return _originator.Parse(name.Substring(11), value);
+ }
+ else if (name.Length > 7 && name.Substring(0, 7) == CallerTag)
+ {
+ if (_caller == PartyInfo.Empty)
+ _caller = new PartyInfo();
+
+ return _caller.Parse(name.Substring(7), value);
+ }
+ else if (name.Length > 10 && name.Substring(0, 10) == OtherLegTag)
+ {
+ if (_otherLeg == PartyInfo.Empty)
+ _otherLeg = new PartyInfo();
+
+ return _otherLeg.Parse(name.Substring(10), value);
+ }
+ else
+ return base.ParseCommand(name, value);
+ }
+
+ public override string ToString()
+ {
+ string temp = "ChannelState(";
+ if (Caller != PartyInfo.Empty)
+ temp += " Caller{" + Caller + "}";
+ if (Originator != PartyInfo.Empty)
+ temp += " Originator{" + Originator + "}";
+ if (OtherLeg != PartyInfo.Empty)
+ temp += " OtherLeg{" + OtherLeg + "}";
+ return temp + ")." + base.ToString();
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelUnbridge : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelUnbridge." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventChannelUnpark : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "ChannelUnpark." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventCodec : EventChannelState
+ {
+ public override string ToString()
+ {
+ return "Codec." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,40 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventDtmf : ChannelEvent
+ {
+ private char _digit;
+ private int _duration;
+
+ public char Digit
+ {
+ get { return _digit; }
+ set { _digit = value; }
+ }
+
+ public int Duration
+ {
+ get { return _duration; }
+ set { _duration = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch(name)
+ {
+ case "dtmf-digit":
+ _digit = value[0];
+ break;
+ case "dtmf-duration":
+ int.TryParse(value, out _duration);
+ break;
+ }
+
+ return base.ParseCommand(name, value);
+ }
+
+ public override string ToString()
+ {
+ return "Dtmf(" + _digit + ")." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+namespace FreeSwitch.EventSocket
+{
+ /// <summary>
+ /// Reports when DTMF digits have been pressed
+ /// </summary>
+ public class EventDtmfStatus : ChannelEvent
+ {
+ private int _count;
+
+ /// <summary>
+ /// Number of digits in the buffer.
+ /// </summary>
+ public int Count
+ {
+ get { return _count; }
+ }
+
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "dtmf-count":
+ int.TryParse(value, out _count);
+ break;
+ }
+
+ return base.ParseCommand(name, value);
+ }
+
+ public override string ToString()
+ {
+ return "DtmfStatus." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket.ChannelEvents
+{
+ public class EventSessionCrash : ChannelEvent
+ {
+ public override string ToString()
+ {
+ return "SessionCrash." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,234 @@
+namespace FreeSwitch.EventSocket
+{
+ #region enum ChannelState
+ public enum ChannelState
+ {
+ New, // Channel is newly created
+ Init, // Channel has been initilized
+ Routing, // Channel is looking for a dialplan
+ SoftExecute, // Channel is in a passive transmit state
+ Execute, // Channel is executing it's dialplan
+ ExchangeMedia, // Channel is exchanging media
+ Park,
+ ConsumeMedia, // Channel is consuming media
+ Hibernate, // Channel is in a sleep state
+ Reset,
+ Hangup, // Channel is flagged for hangup and ready to end
+ Done, // Channel is ready to be destroyed and out of the state machine
+ Unknown
+ }
+ #endregion
+
+ public class ChannelInfo
+ {
+ private ChannelState _state;
+ private int _stateNumber;
+ private string _profile = string.Empty;
+ private string _address = string.Empty;
+ private string _hostName = string.Empty;
+ private string _protocol = string.Empty;
+ private string _readCodecName;
+ private int _readCodecRate;
+ private string _writeCodecName;
+ private int _writeCodecRate;
+
+ /// <summary>
+ /// Coded used to read information from the channel.
+ /// Example: L16
+ /// </summary>
+ public string ReadCodecName
+ {
+ get { return _readCodecName; }
+ set { _readCodecName = value; }
+ }
+
+ /// <summary>
+ /// Bitrate of the read coded that is used.
+ /// Example: 8000
+ /// </summary>
+ public int ReadCodecRate
+ {
+ get { return _readCodecRate; }
+ set { _readCodecRate = value; }
+ }
+
+ /// <summary>
+ /// Codec used for writing to the channel.
+ /// Example: L16
+ /// </summary>
+ public string WriteCodecName
+ {
+ get { return _writeCodecName; }
+ set { _writeCodecName = value; }
+ }
+
+ /// <summary>
+ /// Bitrate of the codec.
+ /// Example: 8000
+ /// </summary>
+ public int WriteCodecRate
+ {
+ get { return _writeCodecRate; }
+ set { _writeCodecRate = value; }
+ }
+
+ /// <summary>
+ /// State that the channel is in. Check ChannelState enum for more information.
+ /// </summary>
+ public ChannelState State
+ {
+ get { return _state; }
+ set { _state = value; }
+ }
+
+ /// <summary>
+ /// Number of the state (from the enum in FreeSwitch)
+ /// </summary>
+ public int StateNumber
+ {
+ get { return _stateNumber; }
+ set { _stateNumber = value; }
+ }
+
+ /// <summary>
+ /// Name of the channel.
+ /// </summary>
+ /// <example>sofia/mydomain.com/1234@conference.freeswitch.org</example>
+ /// <seealso cref="ChannelInfo.Protocol"/>
+ /// <seealso cref="ProfileName"/>
+ /// <seealso cref="Address"/>
+ /// <seealso cref="HostName"/>
+ public string Name
+ {
+ get { return _protocol + "/" + _profile + "/" + _address + "@" + _hostName; }
+ set
+ {
+ string[] bits = value.Split('/');
+ if (bits.Length == 3)
+ {
+ _protocol = bits[0];
+ _profile = bits[1];
+ string[] userParts = bits[2].Split('@');
+ if (userParts.Length == 2)
+ {
+ _address = userParts[0];
+ HostName = userParts[1];
+ }
+ else
+ _address = bits[2];
+ }
+
+ }
+ }
+
+ /// <summary>
+ /// ProfileName for the diaplan/sip.
+ /// </summary>
+ public string ProfileName
+ {
+ get { return _profile; }
+ set { _profile = value; }
+ }
+
+ /// <summary>
+ /// Extension/Username for the channel
+ /// </summary>
+ public string Address
+ {
+ get { return _address; }
+ set { _address = value; }
+ }
+
+ /// <summary>
+ /// Where the extension/user is calling from.
+ /// </summary>
+ public string HostName
+ {
+ get { return _hostName; }
+ set
+ {
+ if (value == null)
+ {
+ _hostName = string.Empty;
+ return;
+ }
+
+ int pos = value.IndexOf(':');
+ if (pos == -1)
+ _hostName = value;
+ else
+ _hostName = value.Substring(0, pos);
+ }
+ }
+
+ /// <summary>
+ /// Protocol used for communication.
+ /// "sofia" = sip.
+ /// </summary>
+ public string Protocol
+ {
+ get { return _protocol; }
+ }
+
+ public bool Parse(string name, string value)
+ {
+ switch (name)
+ {
+ case "channel-state":
+ _state = StateFromString(value);
+ break;
+ case "channel-state-number":
+ int.TryParse(value, out _stateNumber);
+ break;
+ case "channel-name":
+ Name = value;
+ break;
+ case "channel-read-codec-name":
+ _readCodecName = value;
+ break;
+ case "channel-read-codec-rate":
+ int.TryParse(value, out _readCodecRate);
+ break;
+ case "channel-write-codec-name":
+ _writeCodecName = value;
+ break;
+ case "channel-write-codec-rate":
+ int.TryParse(value, out _writeCodecRate);
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ public ChannelState StateFromString(string state)
+ {
+ switch (state)
+ {
+ case "CS_NEW": return ChannelState.New;
+ case "CS_INIT": return ChannelState.Init;
+ case "CS_ROUTING": return ChannelState.Routing;
+ case "CS_SOFT_EXECUTE": return ChannelState.SoftExecute;
+ case "CS_EXECUTE": return ChannelState.Execute;
+ case "CS_EXCHANGE_MEDIA": return ChannelState.ExchangeMedia;
+ case "CS_PARK": return ChannelState.Park;
+ case "CS_CONSUME_MEDIA": return ChannelState.ConsumeMedia;
+ case "CS_HIBERNATE": return ChannelState.Hibernate;
+ case "CS_HANGUP": return ChannelState.Hangup;
+ case "CS_DONE": return ChannelState.Done;
+ case "CS_RESET": return ChannelState.Reset;
+ default: return ChannelState.Unknown;
+ }
+ }
+
+ public string StateToString(ChannelState state)
+ {
+ return "Unknown";
+ }
+
+ public override string ToString()
+ {
+ return _address + "@" + _hostName + ": " + _state;
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AnyCommand.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AnyCommand.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AnyCommand.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AnyCommand.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AnyCommand.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class AnyCommand : Api
+ {
+ private readonly string _name;
+ private readonly string _value;
+
+ public AnyCommand(string name, string arguments)
+ {
+ _name = name;
+ _value = arguments;
+ }
+
+ public override string Command
+ {
+ get { return _name; }
+ }
+
+ public override string Arguments
+ {
+ get { return _value; }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse.Length > 0 && (dataToParse[0] == '+') || dataToParse == "OK")
+ return new CommandReply(true);
+ else
+ {
+ CommandReply reply = new CommandReply(false);
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Api.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Api.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Api.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Api.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Api.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public abstract class Api : CmdBase
+ {
+ public override string ToString()
+ {
+ return string.Format("api {0} {1}", Command, Arguments);
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AuthCommand.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AuthCommand.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AuthCommand.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AuthCommand.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/AuthCommand.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,34 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class AuthCommand : CmdBase
+ {
+ private readonly string _password;
+
+ public AuthCommand(string password)
+ {
+ _password = password;
+ }
+
+ public override string Command
+ {
+ get { return "auth"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _password; }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse.Contains("+OK"))
+ return new CommandReply(true);
+ else
+ {
+ CommandReply reply = new CommandReply(false);
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CmdBase.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CmdBase.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CmdBase.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CmdBase.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CmdBase.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,64 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ #region Delegates
+
+ public delegate void ReplyHandler(CmdBase command, CommandReply reply);
+
+ #endregion
+
+ public abstract class CmdBase
+ {
+ /// <summary>
+ /// Node that the reply handler is removed after it have been invoked.
+ /// This is to make sure that the command can be garbage collected when it's done.
+ /// </summary>
+ public event ReplyHandler ReplyReceived;
+
+ private object _contextData;
+
+ public abstract string Command
+ {
+ get;
+ }
+
+ public abstract string Arguments
+ {
+ get;
+ }
+
+ /// <summary>
+ /// You can attach something that you need to
+ /// identify the command.
+ /// </summary>
+ public object ContextData
+ {
+ get { return _contextData; }
+ set { _contextData = value; }
+ }
+
+ public virtual void HandleReply(CommandReply reply)
+ {
+ // a command is only invoked once.
+ if (ReplyReceived != null)
+ {
+ ReplyReceived(this, reply);
+ ReplyReceived = null;
+ }
+ }
+
+ public virtual CommandReply CreateReply(string dataToParse)
+ {
+ if (string.IsNullOrEmpty(dataToParse.Trim()))
+ return new CommandReply(false);
+
+ CommandReply reply = new CommandReply(dataToParse.Trim()[0] == '+');
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0} {1}", Command, Arguments);
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CommandReply.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CommandReply.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CommandReply.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CommandReply.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/CommandReply.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,35 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ /// <summary>
+ /// Baseclass for replies that commands get.
+ /// </summary>
+ public class CommandReply
+ {
+ private bool _success;
+ private string _ErrorMessage;
+
+ public CommandReply(bool success)
+ {
+ _success = success;
+ }
+
+ public bool Success
+ {
+ get { return _success; }
+ }
+
+ public string ErrorMessage
+ {
+ get { return _ErrorMessage; }
+ set { _ErrorMessage = value; }
+ }
+
+ public override string ToString()
+ {
+ if (_success)
+ return "Success";
+ else
+ return "Failed: " + _ErrorMessage;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,37 @@
+using System;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class DeflectCmd : SendMsg
+ {
+ private readonly string _uri;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="uuid">session id</param>
+ /// <param name="sipUri">complete sip uri, with or whithout "sip:"</param>
+ public DeflectCmd(string uuid, string sipUri)
+ : base(uuid, "execute")
+ {
+ if (string.IsNullOrEmpty(sipUri))
+ throw new ArgumentNullException("sipUri");
+
+ _uri = sipUri;
+ }
+
+ public DeflectCmd(string uuid) : base(uuid)
+ {
+ }
+
+ public override string Command
+ {
+ get { return "deflect"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _uri; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ExecuteJavascript.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ExecuteJavascript.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ExecuteJavascript.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ExecuteJavascript.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ExecuteJavascript.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,63 @@
+using System.Collections.Generic;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class ExecuteJavascript : Api
+ {
+ private readonly string _scriptName;
+ private readonly IList<string> _arguments = new List<string>();
+
+ public ExecuteJavascript()
+ {
+
+ }
+
+ public ExecuteJavascript(string scriptName)
+ {
+ _scriptName = scriptName;
+ }
+
+ /// <summary>
+ /// Arguments to javascript
+ /// </summary>
+ /// <seealso cref="Arguments"/>
+ public IList<string> Args
+ {
+ get { return _arguments; }
+ }
+
+ public override string Command
+ {
+ get { return "jsrun"; }
+ }
+
+ /// <summary>
+ /// Args to the CmdBase api
+ /// </summary>
+ /// <seealso cref="Args"/>
+ public override string Arguments
+ {
+ get { return _scriptName + " " + JoinArguments(); }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse == "OK")
+ return new CommandReply(true);
+ else
+ {
+ CommandReply reply = new CommandReply(false);
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+ }
+
+ private string JoinArguments()
+ {
+ string args = string.Empty;
+ foreach (string arg in Args)
+ args += arg + " ";
+ return args;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/GetVariable.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/GetVariable.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/GetVariable.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/GetVariable.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/GetVariable.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class GetVariable : Api
+ {
+ private readonly string _channelId;
+ private readonly string _name;
+
+ public GetVariable()
+ {
+
+ }
+
+ public GetVariable(string uuid, string name)
+ {
+ _channelId = uuid;
+ _name = name;
+ }
+
+ public override string Command
+ {
+ get { return "uuid_getvar"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _channelId + " " + _name; }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse.Substring(0, 2) == "OK")
+ {
+ return new GetVariableReply(true, dataToParse.Substring(3));
+ }
+ else
+ {
+ GetVariableReply reply = new GetVariableReply(false, string.Empty);
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+ }
+ }
+
+
+ public class GetVariableReply : CommandReply
+ {
+ private string _value;
+
+ public GetVariableReply(bool success, string value)
+ : base(success)
+ {
+ _value = value;
+ }
+
+ public string SessionId
+ {
+ get { return _value; }
+ }
+
+ public string Value
+ {
+ get { return _value; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/HoldCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,24 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class HoldCmd : Api
+ {
+ private readonly string _sessionId;
+ private readonly bool _activate;
+
+ public HoldCmd(string sessionId, bool activate)
+ {
+ _sessionId = sessionId;
+ _activate = activate;
+ }
+
+ public override string Command
+ {
+ get { return "uuid_hold"; }
+ }
+
+ public override string Arguments
+ {
+ get { return (_activate ? string.Empty : "off ") + _sessionId; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,123 @@
+using System.Collections.Generic;
+using FreeSwitch.EventSocket.General;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class OriginateReply : CommandReply
+ {
+ private readonly string _sessionId;
+
+ public OriginateReply(bool success, string sessionId) : base(success)
+ {
+ _sessionId = sessionId;
+ }
+
+ public string SessionId
+ {
+ get { return _sessionId; }
+ }
+ }
+
+ public class Originate : Api
+ {
+ private SofiaSipAddress _caller;
+ private Address _destination;
+ private readonly IList<CallVariable> _variables = new List<CallVariable>();
+ private string _callerIdName;
+ private string _callerIdNumber;
+ private bool _varsAdded;
+ private bool _autoAnswer;
+
+ public Originate()
+ {}
+
+ public Originate(SofiaSipAddress caller, Address destination)
+ {
+ _caller = caller;
+ _destination = destination;
+ }
+
+ public SofiaSipAddress Caller
+ {
+ get { return _caller; }
+ set { _caller = value; }
+ }
+
+ public Address Destination
+ {
+ get { return _destination; }
+ set { _destination = value; }
+ }
+
+ public IList<CallVariable> Variables
+ {
+ get { return _variables; }
+ }
+
+ public string CallerIdNumber
+ {
+ get { return _callerIdNumber; }
+ set { _callerIdNumber = value; }
+ }
+
+ public string CallerIdName
+ {
+ get { return _callerIdName; }
+ set { _callerIdName = value; }
+ }
+
+ public override string Command
+ {
+ get { return "originate"; }
+ }
+
+ public override string Arguments
+ {
+ get
+ {
+ if (!_varsAdded)
+ {
+ string name = CallerIdName ?? _caller.Extension;
+ _variables.Add(new CallVariable("origination_caller_id_name", "'" + name + "'"));
+ if (!string.IsNullOrEmpty(_callerIdNumber))
+ _variables.Add(new CallVariable("origination_caller_id_number", _callerIdNumber));
+ _varsAdded = true;
+
+ if (_autoAnswer)
+ {
+ /*_variables.Add(new CallVariable("sip_invite_params", "intercom=true"));*/
+ _variables.Add(new CallVariable("sip_h_Call-Info", "answer-after=0"));
+ _variables.Add(new CallVariable("sip_auto_answer", "true"));
+ }
+ }
+
+ string variables = string.Empty;
+ foreach (CallVariable var in _variables)
+ variables += var + ",";
+
+ if (variables.Length > 0)
+ variables = "{" + variables.Remove(variables.Length - 1, 1) + "}";
+
+ return variables + Caller + " " + Destination;
+ }
+ }
+
+ public bool AutoAnswer
+ {
+ get { return _autoAnswer; }
+ set { _autoAnswer = value; }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ string[] nameValue = dataToParse.Split(' ');
+ if (nameValue[0].Length > 0 && nameValue[0][0] == '+')
+ return new OriginateReply(true, nameValue[1]);
+
+ OriginateReply reply = new OriginateReply(false, string.Empty);
+ reply.ErrorMessage = nameValue.Length > 1 ? nameValue[1] : dataToParse;
+ return reply;
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ParkCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ParkCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ParkCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ParkCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/ParkCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class ParkCmd : Api
+ {
+ private readonly string _uuid;
+
+ public ParkCmd(string uuid)
+ {
+ _uuid = uuid;
+ }
+
+ public override string Command
+ {
+ get { return "uuid_park"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _uuid; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Playback.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Playback.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Playback.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Playback.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Playback.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,46 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ /// <summary>
+ /// Play a file
+ /// </summary>
+ public class PlaybackCmd : SendMsg
+ {
+ private readonly string _fileName;
+ private readonly string _dtmfAbort = string.Empty;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="uuid">channel identifier</param>
+ /// <param name="fileName">Path and filename to sound file</param>
+ /// <remarks>Path should be relative to FS path.</remarks>
+ /// <example>
+ /// mgr.SendApi(new PlaybackCmd(evt.UniqueId, "sounds\\sv\\welcome.wav", PlaybackCmd.All));
+ /// </example>
+ public PlaybackCmd(string uuid, string fileName) : base(uuid)
+ {
+ _fileName = fileName;
+ }
+
+ public PlaybackCmd(string uuid, string fileName, string dtmfAbort) : base(uuid)
+ {
+ _fileName = fileName;
+ _dtmfAbort = dtmfAbort;
+ }
+
+ public override string Command
+ {
+ get { return "playback"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _fileName; }
+ }
+
+ public string DtmfAbort
+ {
+ get { return _dtmfAbort; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/RecordCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/RecordCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/RecordCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/RecordCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/RecordCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,72 @@
+using System;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class RecordCmd : Api
+ {
+ //<uuid> [start|stop] <path> [<limit>]
+ private readonly string _uuid;
+ private readonly bool _start;
+ private readonly string _path;
+ private readonly int _limit;
+
+ /// <param name="uuid">channel id</param>
+ /// <param name="path">FS relative path to sound file</param>
+ public RecordCmd(string uuid, string path)
+ {
+ if (string.IsNullOrEmpty(uuid))
+ throw new ArgumentException("uuid");
+ if (string.IsNullOrEmpty(path))
+ throw new ArgumentException("path");
+
+ _uuid = uuid;
+ _path = path;
+ }
+
+ /// <param name="uuid">channel id</param>
+ /// <param name="path">FS relative path to sound file</param>
+ /// <param name="limit">number of seconds that maximum can be recorded.</param>
+ public RecordCmd(string uuid, string path, int limit)
+ {
+ if (string.IsNullOrEmpty(uuid))
+ throw new ArgumentException("uuid");
+ if (string.IsNullOrEmpty(path))
+ throw new ArgumentException("path");
+
+ _uuid = uuid;
+ _path = path;
+ _limit = limit;
+ }
+
+ /// <param name="uuid">channel id</param>
+ /// <param name="path">FS relative path to sound file</param>
+ /// <param name="stop">stop the recording if true</param>
+ public RecordCmd(string uuid, string path, bool stop) : this(uuid, path)
+ {
+ _start = !stop;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="uuid">channel id</param>
+ /// <param name="path">FS relative path to sound file</param>
+ /// <param name="stop">stop the recording if true</param>
+ /// <param name="limit">number of seconds that maximum can be recorded.</param>
+ public RecordCmd(string uuid, string path, bool stop, int limit)
+ : this(uuid, path, limit)
+ {
+ _start = !stop;
+ }
+
+ public override string Command
+ {
+ get { return "uuid_record"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _uuid + (_start ? "start" : "stop") + " " + _path + " " + _limit; }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendEventCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendEventCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendEventCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendEventCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendEventCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class SendEventCmd : CmdBase
+ {
+ private EventBase _event;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="evt">Note that all events have NOT being developed to be sent, only to be received.</param>
+ public SendEventCmd(EventBase evt)
+ {
+ _event = evt;
+ }
+
+
+ public override string Command
+ {
+ get { return "sendevent " + _event.Name + "\n"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _event.ToString(); }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,35 @@
+using System;
+
+namespace FreeSwitch.EventSocket.Commands
+{
+ public abstract class SendMsg : CmdBase
+ {
+ private readonly string _uuid;
+ private readonly string _callCommand = "execute";
+
+ public SendMsg(string uuid)
+ {
+ if (string.IsNullOrEmpty(uuid))
+ throw new ArgumentNullException("uuid");
+ _uuid = uuid;
+ }
+
+ public SendMsg(string uuid, string callCommand)
+ {
+ if (string.IsNullOrEmpty(uuid))
+ throw new ArgumentNullException("uuid");
+ if (string.IsNullOrEmpty(callCommand))
+ throw new ArgumentNullException("callCommand");
+
+ _callCommand = callCommand;
+ _uuid = uuid;
+ }
+
+ public override string ToString()
+ {
+ return
+ string.Format("SendMsg {0}\ncall-command: {1}\nexecute-app-name: {2}\nexecute-app-arg: {3}\n", _uuid,
+ _callCommand, Command, Arguments);
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SetVariable.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SetVariable.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SetVariable.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SetVariable.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SetVariable.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,54 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class SetVariable : Api
+ {
+ private readonly string _channelId;
+ private readonly string _name;
+ private readonly string _value;
+
+ public SetVariable()
+ {
+
+ }
+
+ public SetVariable(string uuid, string name, string value)
+ {
+ _channelId = uuid;
+ _name = name;
+ _value = value;
+ }
+
+ public override string Command
+ {
+ get { return "uuid_setvar"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _channelId + " " + Name + " " + Value; }
+ }
+
+ public string Name
+ {
+ get { return _name; }
+ }
+
+ public string Value
+ {
+ get { return _value; }
+ }
+
+ public override CommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse == "OK")
+ return new CommandReply(true);
+ else
+ {
+ CommandReply reply = new CommandReply(false);
+ reply.ErrorMessage = dataToParse;
+ return reply;
+ }
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SleepCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SleepCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SleepCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SleepCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SleepCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class SleepCmd : SendMsg
+ {
+ private readonly int _ms;
+
+ public SleepCmd(string uuid, int ms) : base(uuid)
+ {
+ _ms = ms;
+ }
+
+ public override string Command
+ {
+ get { return "sleep"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _ms.ToString(); }
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/TransferCmd.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/TransferCmd.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/TransferCmd.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/TransferCmd.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/TransferCmd.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+namespace FreeSwitch.EventSocket.Commands
+{
+ public class TransferCmd : PbxCommand
+ {
+ private readonly string _sessionId;
+ private readonly string _destination;
+
+ /// <summary>
+ /// Transfer a call to somewhere.
+ /// </summary>
+ /// <param name="sessionId"></param>
+ /// <param name="destination"></param>
+ public TransferCmd(string sessionId, string destination)
+ {
+ _sessionId = sessionId;
+ _destination = destination;
+ }
+
+ public override PbxCommandReply CreateReply(string dataToParse)
+ {
+ if (dataToParse == "OK")
+ return new PbxCommandReply(true);
+ else
+ {
+ PbxCommandReply reply = new PbxCommandReply(false);
+ reply.ErrCode = dataToParse;
+ return reply;
+ }
+ }
+
+ public override string ToString()
+ {
+ return "transfer " + _sessionId + " " + _destination;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,154 @@
+using System;
+using System.Collections.Specialized;
+using System.IO;
+using FreeSwitch.EventSocket.Commands;
+
+namespace FreeSwitch.EventSocket
+{
+ /// <summary>
+ /// Delegate used to receive a parsed event.
+ /// </summary>
+ /// <param name="receivedEvent">the event.</param>
+ public delegate void EventHandler(EventBase receivedEvent);
+
+ /// <summary>
+ /// Delegate used to receive unparsed event messages
+ /// </summary>
+ /// <param name="text">text received from FreeSWITCH.</param>
+ public delegate void EventsWriter(string text);
+
+ /// <summary>
+ /// Takes care of the event socket and parses the incoming events.
+ /// </summary>
+ public class EventManager
+ {
+ private readonly EventSocket _socket;
+ /// <summary>
+ /// An event have been received from freeswitch.
+ /// </summary>
+ public event EventHandler EventReceived = delegate{};
+ private readonly EventsWriter _writer;
+ private readonly object _logLocker = new object();
+ private readonly LogWriterHandler _logWriter;
+
+ /// <summary>
+ /// FreeSWITCH password, default is "ClueCon".
+ /// </summary>
+ public string Password
+ {
+ set { _socket.Password = value; }
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="EventManager"/> class.
+ /// </summary>
+ /// <param name="logWriter">Can be used for logging.</param>
+ public EventManager(LogWriterHandler logWriter)
+ {
+ _logWriter = logWriter ?? NullWriter.Write;
+ _socket = new EventSocket(_logWriter);
+ _writer = VoidWriter;
+ }
+
+ private static void VoidWriter(string text)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="EventManager"/> class.
+ /// </summary>
+ /// <param name="logWriter">Used to receive loggings.</param>
+ /// <param name="writer">Used to receive unparsed event messages.</param>
+ public EventManager(LogWriterHandler logWriter, EventsWriter writer)
+ {
+ _logWriter = logWriter ?? NullWriter.Write;
+ _socket = new EventSocket(_logWriter);
+ _writer = writer;
+ }
+
+ /// <summary>
+ /// Starts event manger and connect to freeswitch.
+ /// </summary>
+ /// <param name="hostname">hostname/ipaddress colon port</param>
+ public void Start(string hostname)
+ {
+ _socket.MessageReceived += OnMessage;
+ _socket.DataReceived += OnData;
+ _socket.Connect(hostname);
+ }
+
+ private void OnData(string data)
+ {
+ lock (_logLocker)
+ _writer(data);
+ }
+
+ /// <summary>
+ /// Send a command to the server.
+ /// </summary>
+ /// <param name="cmd"></param>
+ /// <exception cref="IOException">If socket is not connected</exception>
+ /// <exception cref="InvalidOperationException"></exception>
+ /// <exception cref="ObjectDisposedException"></exception>
+ public void Send(CmdBase cmd)
+ {
+ _socket.Send(cmd);
+ }
+
+ /// <summary>
+ /// Sends the SendMsg command to FreeSWITCH
+ /// </summary>
+ /// <param name="cmd">The CMD.</param>
+ public void Send(SendMsg cmd)
+ {
+ _socket.Send(cmd);
+ }
+
+ protected void OnMessage(PlainEventMsg msg)
+ {
+ NameValueCollection parameters = msg.ParseBody(true);
+ string eventName = parameters["event-name"];
+ if (eventName == null)
+ return;
+
+ eventName = string.Compare(parameters["event-name"], "custom", true) == 0
+ ? parameters["event-subclass"]
+ : parameters["event-name"];
+
+ //Quickhack for Sofia::Register (convert to sofia_register)
+ eventName = eventName.Replace("::", "_");
+ eventName = StringHelper.UpperCaseToCamelCase(eventName);
+
+ // Try to load the event (check if we've created an event class for the registered event)
+ EventBase eb = EventBase.CreateEvent(eventName);
+
+ // Yep, we got an event class. Let it parse the event information
+ if (eb != null)
+ {
+ eb.SetParameters(parameters);
+ eb.Parse(parameters);
+ EventReceived(eb);
+ }
+ else
+ _logWriter(LogPrio.Warning, "Failed to load '" + eventName + "'.");
+ }
+
+ /// <summary>
+ /// Subscribes the specified events.
+ /// </summary>
+ /// <param name="events">The events.</param>
+ public void Subscribe(Events events)
+ {
+ _socket.Subscribe(events);
+ }
+
+ /// <summary>
+ /// Subscribes the specified events.
+ /// </summary>
+ /// <param name="events">The events.</param>
+ public void Subscribe(params Event[] events)
+ {
+ _socket.Subscribe(new Events(events));
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,185 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace FreeSwitch.EventSocket
+{
+ public class EventParser
+ {
+ private static readonly char[] BugWorkaround = {'C', 'o', 'n', 't', 'e', 'n', 't', '-'};
+ private readonly StringBuilder _text = new StringBuilder();
+ private readonly Queue<string> _piecesToAppend = new Queue<string>();
+
+ public string Text
+ {
+ get { return _text.ToString(); }
+ }
+
+ internal static void ParseHeaders(PlainEventMsg msg, string header)
+ {
+ StringParser parser = new StringParser(header);
+ string name = parser.Read(':', true);
+ while (name != string.Empty)
+ {
+ switch (name)
+ {
+ case "Content-Length":
+ msg.ContentLength = int.Parse(parser.ReadLine(true));
+ break;
+ case "Content-Type":
+ msg.ContentType = parser.ReadLine(true);
+ break;
+ case "Reply-Text":
+ msg.Body = parser.ReadLine(true);
+ break;
+ }
+
+ // empty line == end of header
+ if (parser.EOL)
+ break;
+
+ name = parser.Read(':', true);
+ }
+ }
+ /*
+ private int IsLineBreaks(int pos)
+ {
+ if (pos > 0 && Text[pos] == '\n' && Text[pos - 1] == '\n')
+ return 1;
+ if (pos > 3 && Text[pos] == '\n' && Text[pos - 1] == '\r'
+ && Text[pos - 2] == '\n' && Text[pos - 3] == '\r')
+ return 3;
+ return 0;
+ }
+ */
+ public void Clear()
+ {
+ lock (Text)
+ _text.Length = 0;
+ }
+
+ private void IgnoreLineBreaks(ref int i)
+ {
+ while (i < _text.Length && (_text[i] == '\n' || _text[i] == '\r'))
+ ++i;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <returns></returns>
+ /// <exception cref="InvalidDataException">If parsing failed due to invalid format.</exception>
+ public PlainEventMsg ParseOne()
+ {
+ // Move queue to text
+ lock (_piecesToAppend)
+ {
+ while (_piecesToAppend.Count > 0)
+ _text.Append(_piecesToAppend.Dequeue());
+ }
+
+ PlainEventMsg plainEvent;
+ lock (_text)
+ {
+ int i = 0;
+
+ // find complete header
+ bool found = false;
+ for (; i < _text.Length - 1; ++i)
+ {
+ if (_text[i] == '\n' && _text[i + 1] == '\n')
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ return null;
+
+ // extract header
+ char[] chars = new char[i];
+ _text.CopyTo(0, chars, 0, i);
+ string headers = new string(chars);
+ IgnoreLineBreaks(ref i);
+
+ plainEvent = new PlainEventMsg();
+ ParseHeaders(plainEvent, headers);
+
+ // we got a body?
+ if (plainEvent.ContentLength > 0)
+ {
+ // Start of Empty header bugfix
+ // FS seems to send a header with content-length without sending an actual body
+ // this will eat that kind of header.
+ if (_text.Length >= BugWorkaround.Length + i)
+ {
+ found = true;
+ for (int index = 0; index < BugWorkaround.Length; ++index)
+ {
+ if (_text[index + i] != BugWorkaround[index])
+ {
+ found = false;
+ break;
+ }
+ }
+ if (found)
+ {
+ _text.Remove(0, i);
+ Console.WriteLine("Removing empty content header.");
+ return null;
+ }
+ }
+ // end of bugfix.
+
+ // not enough data for body.
+ if (plainEvent.ContentLength + i > _text.Length)
+ return null;
+
+ // extract body
+ chars = new char[plainEvent.ContentLength];
+ _text.CopyTo(i, chars, 0, plainEvent.ContentLength);
+ plainEvent.Body = new string(chars);
+
+ // api/response is buggy for originate, no \n\n are appended at the end.
+ if (plainEvent.ContentType != "api/response")
+ {
+ // check for errors.
+ int pos = plainEvent.Body.IndexOf("\n\n");
+ if (pos < plainEvent.Body.Length - 2)
+ {
+ Console.WriteLine("Invalid event");
+ Console.WriteLine("Header");
+ Console.WriteLine(headers);
+ Console.WriteLine("Body");
+ Console.WriteLine(plainEvent.Body);
+ Console.WriteLine("=========================== EVERYTHING unparsed ==============================");
+ Console.WriteLine(_text);
+ throw new InvalidDataException("Invalid event: " + _text);
+ }
+ }
+
+ if (plainEvent.Body.Length < plainEvent.ContentLength)
+ throw new InvalidDataException("Body contents are too small!");
+
+ // Move forward to next header
+ i += plainEvent.ContentLength;
+ IgnoreLineBreaks(ref i);
+ }
+
+
+ // remove header( + body) from buffer
+ _text.Remove(0, i);
+ }
+
+ return plainEvent;
+ }
+
+
+ public void Append(string text)
+ {
+ lock (_piecesToAppend)
+ _piecesToAppend.Enqueue(text);
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,379 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading;
+using FreeSwitch.EventSocket.Commands;
+
+namespace FreeSwitch.EventSocket
+{
+ public delegate void MessageHandler(PlainEventMsg msg);
+
+ public class EventSocket
+ {
+ #region Delegates
+
+ public delegate void EventSocketHandler(EventSocket client);
+
+ public delegate void DataHandler(string data);
+
+ #endregion
+
+ private LogWriterHandler _logWriter;
+ private readonly Queue<CmdBase> _commands = new Queue<CmdBase>();
+ private bool _autoConnect = true;
+ private Events _events;
+ private string _hostName;
+ private readonly EventParser _parser = new EventParser();
+ public event DataHandler DataReceived;
+ private string _password = "ClueCon";
+ private int _port = 8021;
+ private readonly object _lockobj = new object();
+ private readonly byte[] _readBuffer = new byte[8192];
+ private Socket _socket;
+ private NetworkStream _stream;
+ private Timer _timer;
+ private bool _authed;
+ const int RetryTimeout = 5000;
+ private bool _parsing;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="EventSocket"/> class.
+ /// </summary>
+ /// <param name="logWriter">The log writer.</param>
+ public EventSocket(LogWriterHandler logWriter)
+ {
+ LogWriter = logWriter ?? NullWriter.Write;
+ CreateSocket();
+ }
+
+ private void CreateSocket()
+ {
+ _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ _socket.NoDelay = true;
+ _socket.ReceiveBufferSize = 65535;
+ }
+
+ /// <summary>
+ /// Used to authenticate towards FreeSWITCH.
+ /// </summary>
+ /// <remarks>
+ /// Default is "ClueCon"
+ /// </remarks>
+ public string Password
+ {
+ get { return _password; }
+ set { _password = value; }
+ }
+
+ /// <summary>
+ /// Connect automatically again if socket is disconnected.
+ /// </summary>
+ public bool AutoConnect
+ {
+ get { return _autoConnect; }
+ set { _autoConnect = value; }
+ }
+
+ public LogWriterHandler LogWriter
+ {
+ get { return _logWriter; }
+ set { _logWriter = value ?? NullWriter.Write; }
+ }
+
+ /// <summary>
+ /// A event have been received
+ /// </summary>
+ public event MessageHandler MessageReceived = delegate{};
+
+ /// <summary>
+ /// Socket got disconnected (due to remote peer)
+ /// </summary>
+ public event EventSocketHandler Disconnected = delegate{};
+
+ /// <summary>
+ /// Socket is now connected
+ /// </summary>
+ public event EventSocketHandler Connected = delegate{};
+
+ /// <summary>
+ /// Connect to FreeSWITCH
+ /// </summary>
+ /// <param name="server">hostname/ipaddress colon port</param>
+ /// <example>
+ /// <code>eventSocket.Connect("localhost:1234");</code>
+ /// </example>
+ public void Connect(string server)
+ {
+ int pos = server.IndexOf(':');
+ if (pos == -1)
+ _hostName = server;
+ else
+ {
+ _port = int.Parse(server.Substring(pos + 1));
+ _hostName = server.Substring(0, pos);
+ }
+
+ Connect();
+ }
+
+ /// <summary>
+ /// Connect to the previously specified host.
+ /// </summary>
+ public void Connect()
+ {
+ if (_hostName == null)
+ throw new InvalidOperationException("Must call the other Connect method first to set hostname/port.");
+
+ try
+ {
+ TryConnect();
+ LogWriter(LogPrio.Debug, "Connected to freeswitch.");
+ }
+ catch (SocketException err)
+ {
+ LogWriter(LogPrio.Debug, "Failed to connect to freeswitch, reason: " + err.Message);
+ HandleDisconnect();
+ }
+ }
+
+ private void TryConnect()
+ {
+ lock (_lockobj)
+ {
+ _socket.Connect(_hostName, _port);
+ if (_stream == null)
+ _stream = new NetworkStream(_socket, false);
+
+ Connected(this);
+ BeginRead();
+
+ if (_timer == null) return;
+ Timer tmr = _timer;
+ _timer = null;
+ tmr.Change(Timeout.Infinite, Timeout.Infinite);
+ tmr.Dispose();
+ }
+ }
+
+ private void BeginRead()
+ {
+ _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, OnReadCompleted, null);
+ }
+
+ private void OnReadCompleted(IAsyncResult ar)
+ {
+ string inbuffer;
+ try
+ {
+ if (_stream == null)
+ return; // closed socket.
+
+ int bytesRead = _stream.EndRead(ar);
+ if (bytesRead == 0)
+ {
+ LogWriter(LogPrio.Error, "Got disconnected (0 bytes read).");
+ HandleDisconnect();
+ return;
+ }
+ inbuffer = Encoding.ASCII.GetString(_readBuffer, 0, bytesRead);
+ _parser.Append(inbuffer);
+ BeginRead();
+ }
+ catch (IOException err)
+ {
+ LogWriter(LogPrio.Debug, "IO exception during read: " + err.Message);
+ // Remote end disconnected.
+ HandleDisconnect();
+ return;
+ }
+
+ if (!string.IsNullOrEmpty(inbuffer))
+ DataReceived(inbuffer);
+
+ try
+ {
+ ParseMessages();
+ }
+ catch (InvalidDataException err)
+ {
+ LogWriter(LogPrio.Warning,
+ "Failed to parse event message." + Environment.NewLine + "Exception: " + err +
+ Environment.NewLine + _parser.Text);
+ HandleDisconnect();
+ }
+ catch (ArgumentException err)
+ {
+ LogWriter(LogPrio.Warning,
+ "Failed to parse event message." + Environment.NewLine + "Exception: " + err +
+ Environment.NewLine + _parser.Text);
+ HandleDisconnect();
+ }
+ }
+
+ /// <summary>
+ /// Subscribe on the specified events.
+ /// </summary>
+ /// <param name="events">The events.</param>
+ public void Subscribe(Events events)
+ {
+ _events = events;
+ if (_socket.Connected && _authed)
+ RequestEvents();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="s"></param>
+ /// <exception cref="InvalidOperationException"></exception>
+ /// <exception cref="ObjectDisposedException"></exception>
+ private void Write(string s)
+ {
+ if (_socket == null)
+ return;
+ if (!_socket.Connected)
+ {
+ try
+ {
+ TryConnect();
+ LogWriter(LogPrio.Info, "We've connected again");
+ }
+ catch (SocketException)
+ {
+ return;
+ }
+ }
+
+ byte[] bytes = Encoding.ASCII.GetBytes(s);
+ _stream.Write(bytes, 0, bytes.Length);
+ }
+
+ static readonly object locker = new object();
+ private void ParseMessages()
+ {
+
+ lock (locker)
+ {
+ if (_parsing)
+ return;
+ _parsing = true;
+ }
+
+ try
+ {
+ PlainEventMsg msg = _parser.ParseOne();
+ while (msg != null)
+ {
+ LogWriter(LogPrio.Trace, "MessageType: " + msg.ContentType);
+ switch (msg.ContentType)
+ {
+ case "auth/request":
+ {
+ AuthCommand cmd = new AuthCommand(_password);
+ cmd.ReplyReceived += OnAuthed;
+ _commands.Enqueue(cmd);
+ Write(cmd + "\n\n");
+ }
+ break;
+ case "api/response":
+ case "command/reply":
+ if (_commands.Count > 0)
+ {
+ CmdBase cmd = _commands.Dequeue();
+ cmd.HandleReply(cmd.CreateReply(msg.Body.Trim()));
+ }
+ else
+ LogWriter(LogPrio.Debug, "Got command reply or api response, but no actual command/api: " + msg.Body);
+ break;
+ default:
+ MessageReceived(msg);
+ break;
+ }
+ msg = _parser.ParseOne();
+ }
+ }
+ finally
+ {
+ lock (locker)
+ _parsing = false;
+ }
+ }
+
+ private void OnAuthed(CmdBase command, CommandReply reply)
+ {
+ LogWriter(LogPrio.Trace, "We have not authenticated.");
+ _authed = true;
+ RequestEvents();
+ }
+
+ private void HandleDisconnect()
+ {
+ _parser.Clear();
+ _authed = false;
+ _socket.Close();
+ CreateSocket();
+ if (_stream != null)
+ {
+ _stream.Dispose();
+ _stream = null;
+ }
+
+ Disconnected(this);
+ if (!AutoConnect || _timer != null) return;
+ LogWriter(LogPrio.Info, "Launching autoconnect timer.");
+ _timer = new Timer(TryConnect, this, RetryTimeout, RetryTimeout);
+ }
+
+ private void RequestEvents()
+ {
+ if (_events.Count <= 0 && _authed)
+ return;
+
+ Write("event plain " + GetEventString() + "\n\n");
+ }
+
+ private string GetEventString()
+ {
+ string events = string.Empty;
+ for (int i = 0; i < _events.Count; ++i)
+ events += StringHelper.CamelCaseToUpperCase(_events[i].ToString()) + " ";
+ return events;
+ }
+
+ /// <summary>
+ /// Send a command to FreeSwitch.
+ /// Do you want a response? Then use the delegate in the Command class.
+ /// </summary>
+ /// <param name="command">Command to send.</param>
+ /// <exception cref="IOException">If socket is not connected.</exception>
+ /// <exception cref="InvalidOperationException"></exception>
+ /// <exception cref="ObjectDisposedException"></exception>
+ public void Send(CmdBase command)
+ {
+ if (!_socket.Connected)
+ {
+ LogWriter(LogPrio.Debug, "Tried to send command when we are not connected: " + command);
+ throw new IOException("Socket is not connected.");
+ }
+
+ _commands.Enqueue(command);
+
+ // All commands need replies.
+ Write(command + "\n\n");
+ }
+
+ private void TryConnect(object state)
+ {
+ EventSocket client = (EventSocket) state;
+ try
+ {
+ client.TryConnect();
+ LogWriter(LogPrio.Info, "Connected again.");
+ }
+ catch (SocketException)
+ {}
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.pfx
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.pfx (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.pfx)
(Binary files differ)
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventApiCommand.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventApiCommand.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventApiCommand.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventApiCommand.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventApiCommand.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket
+{
+ class EventApiCommand : EventBase
+ {
+ private string m_command;
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "api-command":
+ m_command = value;
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+
+ return true;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,164 @@
+using System;
+using System.Collections.Specialized;
+
+namespace FreeSwitch.EventSocket
+{
+ public class EventBase
+ {
+ private string m_callingFile;
+ private string m_callingFunction;
+ private int m_callingLineNumber;
+ private string m_coreId;
+ private DateTime m_dateGMT;
+ private DateTime m_dateLocal;
+ private string m_name;
+ private readonly NameValueCollection _parameters = new NameValueCollection();
+ private NameValueCollection _allParameters;
+
+ #region Properties
+
+ public string Name
+ {
+ get
+ {
+ lock (this)
+ {
+ if (string.IsNullOrEmpty(m_name))
+ {
+ string name = GetType().Name.Substring(5); //remove (Event)
+ m_name = string.Empty;
+ m_name += char.ToUpper(name[0]);
+ for (int i = 1; i < name.Length; ++i)
+ {
+ if (char.IsUpper(name[i]))
+ m_name += '_';
+ else
+ m_name += char.ToUpper(name[i]);
+ }
+ }
+ }
+
+ return m_name;
+ }
+ set { m_name = value; }
+ }
+
+ public string CoreId
+ {
+ get { return m_coreId; }
+ set { m_coreId = value; }
+ }
+
+ public DateTime DateLocal
+ {
+ get { return m_dateLocal; }
+ set { m_dateLocal = value; }
+ }
+
+ public DateTime DateGMT
+ {
+ get { return m_dateGMT; }
+ set { m_dateGMT = value; }
+ }
+
+ public string CallingFile
+ {
+ get { return m_callingFile; }
+ set { m_callingFile = value; }
+ }
+
+ public string CallingFunction
+ {
+ get { return m_callingFunction; }
+ set { m_callingFunction = value; }
+ }
+
+ public int CallingLineNumber
+ {
+ get { return m_callingLineNumber; }
+ set { m_callingLineNumber = value; }
+ }
+
+ #endregion
+
+ public virtual bool IsChannelEvent
+ {
+ get { return false; }
+ }
+
+ public NameValueCollection Parameters
+ {
+ get { return _parameters; }
+ }
+
+ public NameValueCollection AllParameters
+ {
+ get { return _allParameters; }
+ }
+
+ internal void SetParameters(NameValueCollection allparams)
+ {
+ _allParameters = allparams;
+ }
+
+ public void Parse(NameValueCollection variables)
+ {
+ for (int i = 0; i < variables.Count; ++i)
+ ParseCommand(variables.GetKey(i), variables.Get(i));
+ }
+
+ public static EventBase CreateEvent(string eventName)
+ {
+ try
+ {
+ string eventNamea = "Event" + eventName;
+ Type t = Type.GetType("FreeSwitch.EventSocket.Event" + eventName);
+ if (t == null)
+ return null;
+ return (EventBase) Activator.CreateInstance(t);
+ }
+ catch (TypeLoadException)
+ {
+ return null;
+ }
+ }
+
+ public virtual bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "event-name":
+ m_name = value;
+ break;
+ case "core-uuid":
+ m_coreId = value;
+ break;
+ case "event-date-local":
+ m_dateLocal = DateTime.Parse(value);
+ break;
+ case "event-date-gmt":
+ m_dateGMT = DateTime.Parse(value);
+ break;
+ case "event-calling-file":
+ m_callingFile = value;
+ break;
+ case "event-calling-function":
+ m_callingFunction = value;
+ break;
+ case "event-calling-line-number":
+ int.TryParse(value, out m_callingLineNumber);
+ break;
+ default:
+ Parameters.Add(name, value);
+ //Console.WriteLine(m_name + ", Unhandled parameter: [" + name + "] " + value);
+ return false;
+ }
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "Base(" + m_name + ")";
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventHeartbeat.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventHeartbeat.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventHeartbeat.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventHeartbeat.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventHeartbeat.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,57 @@
+namespace FreeSwitch.EventSocket
+{
+ class EventHeartbeat : EventBase
+ {
+ private string _info;
+ private string _upTime;
+ private int _sessionCount;
+
+ public string Info
+ {
+ get { return _info; }
+ set { _info = value; }
+ }
+
+ public string UpTime
+ {
+ get { return _upTime; }
+ set { _upTime = value; }
+ }
+
+ public int SessionCount
+ {
+ get { return _sessionCount; }
+ set { _sessionCount = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "event-info":
+ Info = value;
+ break;
+ case "up-time":
+ UpTime = value;
+ break;
+ case "session-count":
+ int.TryParse(value, out _sessionCount);
+ break;
+
+ default:
+ return base.ParseCommand(name, value);
+ }
+
+ return true;
+
+ }
+ }
+
+/*
+ Event-Info: System%20Ready
+Up-Time: 0%20years,%200%20days,%201%20hour,%2048%20minutes,%207%20seconds,%20265
+%20milliseconds,%20625%20microseconds%0A
+Session-Count: 0
+Event-Name: HEARTBEAT
+ */
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageQuery.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageQuery.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageQuery.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageQuery.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageQuery.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket
+{
+ public class EventMessageQuery : EventBase
+ {
+ private string _account;
+
+ public string Account
+ {
+ get { return _account; }
+ set { _account = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ if (name == "message-account")
+ Account = value;
+ else
+ return base.ParseCommand(name, value);
+
+ return true;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageWaiting.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageWaiting.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageWaiting.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageWaiting.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventMessageWaiting.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,145 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventMessageWaiting : EventBase
+ {
+ private string _account;
+ private int _newMessages;
+ private int _newUrgentMessages;
+ private int _totalMessages;
+ private int _totalUrgentMessages;
+
+ public EventMessageWaiting()
+ {
+
+ }
+
+ public EventMessageWaiting(string account, int newMessages, int totalMessages)
+ {
+ _account = account;
+ _newMessages = newMessages;
+ _totalMessages = totalMessages;
+ }
+
+ /// <summary>
+ /// Messages are for this account
+ /// </summary>
+ public string Account
+ {
+ get { return _account; }
+ set { _account = value; }
+ }
+
+ /// <summary>
+ /// Total count of messages
+ /// </summary>
+ public bool MessagesWaiting
+ {
+ get { return _newMessages != 0 || _newUrgentMessages != 0; }
+ }
+
+ /// <summary>
+ /// Number of new messages
+ /// </summary>
+ public int NewMessages
+ {
+ get { return _newMessages; }
+ set { _newMessages = value; }
+ }
+
+ /// <summary>
+ /// Number of new urgent messages
+ /// </summary>
+ public int NewUrgentMessages
+ {
+ get { return _newUrgentMessages; }
+ set { _newUrgentMessages = value; }
+ }
+
+ /// <summary>
+ /// Total number of new/saved/old messages
+ /// </summary>
+ public int TotalMessages
+ {
+ get { return _totalMessages; }
+ set { _totalMessages = value; }
+ }
+
+ /// <summary>
+ /// Total number of new urgent messages
+ /// </summary>
+ public int TotalUrgentMessages
+ {
+ get { return _totalUrgentMessages; }
+ set { _totalUrgentMessages = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "mwi-messages-waiting":
+ // are calculated by using voice messages
+ break;
+ case "mwi-message-account":
+ _account = value;
+ break;
+ case "mwi-voice-message":
+ return ParseVoiceMessages(value);
+ default:
+ return base.ParseCommand(name, value);
+ }
+
+ return true;
+ }
+
+ private bool ParseVoiceMessages(string value)
+ {
+ /*
+ switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", "%d/%d (%d/%d)",
+ total_new_messages, total_saved_messages, total_new_urgent_messages, total_saved_urgent_messages);
+ * */
+ int pos = value.IndexOf('/');
+ if (pos == -1)
+ return false;
+ if (!int.TryParse(value.Substring(0, pos), out _newMessages))
+ return false;
+
+ int oldPos = pos + 1;
+ pos = value.IndexOf(' ', pos);
+ if (pos == -1)
+ return false;
+ if (!int.TryParse(value.Substring(oldPos, pos - oldPos), out _totalMessages))
+ return false;
+
+ oldPos = pos + 2;
+ pos = value.IndexOf('/', pos);
+ if (pos == -1)
+ return false;
+ if (!int.TryParse(value.Substring(oldPos, pos - oldPos), out _newUrgentMessages))
+ return false;
+
+ oldPos = pos + 1;
+ pos = value.IndexOf(')', pos);
+ if (pos == -1)
+ return false;
+ if (!int.TryParse(value.Substring(oldPos, pos - oldPos), out _totalUrgentMessages))
+ return false;
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ string str = base.ToString();
+ str += "WMI-Messages-Waiting: " + (MessagesWaiting ? "yes" : "no") + "\n";
+ str += "WMI-Message-Account: " + _account + "\n";
+ if (_newUrgentMessages != 0 || _newMessages != 0)
+ str += string.Format("WMI-Voice-Message: {0}/{1} ({2}/{3})\n",
+ _newMessages,
+ _totalMessages,
+ _newMessages,
+ _totalUrgentMessages);
+ return str;
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventReSchedule.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventReSchedule.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventReSchedule.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventReSchedule.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventReSchedule.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket
+{
+ class EventReSchedule : EventBase
+ {
+ private int m_taskId;
+ private string m_description;
+ private string m_group;
+ private string m_runtime;
+
+ public int TaskId
+ {
+ get { return m_taskId; }
+ set { m_taskId = value; }
+ }
+
+ public string Description
+ {
+ get { return m_description; }
+ set { m_description = value; }
+ }
+
+ public string Group
+ {
+ get { return m_group; }
+ set { m_group = value; }
+ }
+
+ public string Runtime
+ {
+ get { return m_runtime; }
+ set { m_runtime = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "task-id":
+ int.TryParse(value, out m_taskId);
+ break;
+ case "task-desc":
+ m_description = value;
+ break;
+ case "task-group":
+ m_group = value;
+ break;
+ case "task-runtime":
+ m_runtime = value;
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+
+ return true;
+
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,107 @@
+using System.Collections.Generic;
+
+namespace FreeSwitch.EventSocket
+{
+ #region Event enum
+ public enum Event
+ {
+ Custom,
+ ChannelCreate,
+ ChannelDestroy,
+ ChannelState,
+ ChannelAnswer,
+ ChannelApplication,
+ ChannelHangup,
+ ChannelExecute,
+ ChannelExecuteComplete,
+ ChannelBridge,
+ ChannelUnbridge,
+ ChannelProgress,
+ ChannelOriginate,
+ ChannelOutgoing,
+ ChannelPark,
+ ChannelUnpark,
+ Api,
+ Log,
+ InboundChan,
+ OutboundChan,
+ Startup,
+ Shutdown,
+ Publish,
+ Unpublish,
+ Talk,
+ Notalk,
+ SessionCrash,
+ ModuleLoad,
+ Dtmf,
+ Message,
+ PresenceIn,
+ PresenceOut,
+ PresenceProbe,
+ SofiaRegister,
+ SofiaExpires,
+ Roster,
+ Codec,
+ BackgroundJob,
+ DetectedSpeech,
+ PrivateCommand,
+ Heartbeat,
+ All
+ }
+ #endregion
+
+ #region Events class
+ public class Events
+ {
+ private IList<Event> m_events = new List<Event>();
+
+ public Events() { }
+ public Events(params Event[] parameters)
+ {
+ foreach (Event e in parameters)
+ {
+ Add(e);
+ }
+ }
+
+ public void Add(Event e)
+ {
+ m_events.Add(e);
+ }
+
+ public Event this[int index]
+ {
+ get { return m_events[index]; }
+ }
+
+ public void Clear()
+ {
+ m_events.Clear();
+ }
+
+ public int Count
+ {
+ get { return m_events.Count; }
+ }
+
+ public static Events GetChannelEvents()
+ {
+ Events e = new Events();
+ e.Add(Event.ChannelAnswer);
+ e.Add(Event.ChannelBridge);
+ e.Add(Event.ChannelCreate);
+ e.Add(Event.ChannelDestroy);
+ e.Add(Event.ChannelExecute);
+ e.Add(Event.ChannelHangup);
+ e.Add(Event.ChannelOutgoing);
+ e.Add(Event.ChannelPark);
+ e.Add(Event.ChannelProgress);
+ e.Add(Event.ChannelState);
+ e.Add(Event.ChannelUnbridge);
+ e.Add(Event.ChannelUnpark);
+ return e;
+ }
+ }
+ #endregion
+
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,129 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{3F8895F6-F710-4323-B96A-4EFB6BC97E08}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>FreeSwitch.EventSocket</RootNamespace>
+ <AssemblyName>FreeSwitch.EventSocket</AssemblyName>
+ <StartupObject>
+ </StartupObject>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>EventSocket.pfx</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ChannelEvents\EventChannelApplication.cs" />
+ <Compile Include="ChannelEvents\EventChannelExecuteComplete.cs" />
+ <Compile Include="ChannelEvents\EventChannelOriginate.cs" />
+ <Compile Include="ChannelEvents\EventChannelBridge.cs" />
+ <Compile Include="ChannelEvents\ChannelEvent.cs" />
+ <Compile Include="ChannelEvents\EventChannelAnswer.cs" />
+ <Compile Include="ChannelEvents\EventChannelPark.cs" />
+ <Compile Include="ChannelEvents\EventChannelProgress.cs" />
+ <Compile Include="ChannelEvents\EventChannelUnbridge.cs" />
+ <Compile Include="ChannelEvents\EventChannelUnpark.cs" />
+ <Compile Include="ChannelEvents\EventCodec.cs" />
+ <Compile Include="ChannelEvents\EventSessionCrash.cs" />
+ <Compile Include="ChannelInfo.cs" />
+ <Compile Include="Commands\AnyCommand.cs">
+ </Compile>
+ <Compile Include="Commands\Api.cs" />
+ <Compile Include="Commands\AuthCommand.cs" />
+ <Compile Include="Commands\CmdBase.cs" />
+ <Compile Include="Commands\CommandReply.cs" />
+ <Compile Include="Commands\DeflectCmd.cs" />
+ <Compile Include="Commands\ExecuteJavascript.cs" />
+ <Compile Include="Commands\GetVariable.cs" />
+ <Compile Include="Commands\HoldCmd.cs" />
+ <Compile Include="Commands\Originate.cs" />
+ <Compile Include="Commands\ParkCmd.cs" />
+ <Compile Include="Commands\Playback.cs" />
+ <Compile Include="Commands\RecordCmd.cs" />
+ <Compile Include="Commands\SendEventCmd.cs" />
+ <Compile Include="Commands\SendMsg.cs" />
+ <Compile Include="Commands\SetVariable.cs" />
+ <Compile Include="Commands\SleepCmd.cs" />
+ <Compile Include="EventManager.cs" />
+ <Compile Include="ChannelEvents\EventDtmfStatus.cs" />
+ <Compile Include="General\CallVariable.cs" />
+ <Compile Include="Ivr\DtmfEventArgs.cs" />
+ <Compile Include="Ivr\IvrInterface.cs" />
+ <Compile Include="Ivr\IvrQueue.cs" />
+ <Compile Include="Ivr\PrivateWaitDtmf.cs" />
+ <Compile Include="LogWriterHandler.cs" />
+ <Compile Include="PlainEventMsg.cs" />
+ <Compile Include="EventParser.cs" />
+ <Compile Include="Events.cs" />
+ <Compile Include="Events\EventApiCommand.cs" />
+ <Compile Include="Events\EventBase.cs" />
+ <Compile Include="ChannelEvents\EventChannelCreate.cs" />
+ <Compile Include="ChannelEvents\EventChannelDestroy.cs" />
+ <Compile Include="ChannelEvents\EventChannelExecute.cs" />
+ <Compile Include="ChannelEvents\EventChannelHangup.cs" />
+ <Compile Include="ChannelEvents\EventChannelOutgoing.cs" />
+ <Compile Include="ChannelEvents\EventChannelState.cs" />
+ <Compile Include="EventSocket.cs" />
+ <Compile Include="Events\EventHeartbeat.cs" />
+ <Compile Include="Events\EventReSchedule.cs" />
+ <Compile Include="General\Address.cs" />
+ <Compile Include="General\SipAddress.cs" />
+ <Compile Include="General\SofiaSipAddress.cs" />
+ <Compile Include="PartyInfo.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Events\EventMessageQuery.cs" />
+ <Compile Include="ChannelEvents\EventDtmf.cs" />
+ <Compile Include="SipEvents\EventPresenceIn.cs" />
+ <Compile Include="SipEvents\EventPresenceOut.cs" />
+ <Compile Include="SipEvents\EventPresenceProbe.cs" />
+ <Compile Include="SipEvents\EventRoster.cs" />
+ <Compile Include="Events\EventMessageWaiting.cs" />
+ <Compile Include="SipEvents\EventSofiaUnregister.cs" />
+ <Compile Include="SipEvents\SipEvent.cs" />
+ <Compile Include="SipEvents\EventPresence.cs" />
+ <Compile Include="SipEvents\EventSofiaExpire.cs" />
+ <Compile Include="SipEvents\EventSofiaRegister.cs" />
+ <Compile Include="StringHelper.cs" />
+ <Compile Include="StringParser.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="EventSocket.pfx" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+ <PropertyGroup>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/Address.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/Address.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/Address.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/Address.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/Address.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.General
+{
+ public class Address
+ {
+ private string _extension;
+
+ public Address()
+ {
+
+ }
+
+ public Address(string extension)
+ {
+ _extension = extension;
+ }
+
+ public string Extension
+ {
+ get { return _extension; }
+ set { _extension = value; }
+ }
+
+ public override string ToString()
+ {
+ return Extension;
+ }
+ }
+
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/CallVariable.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,41 @@
+namespace FreeSwitch.EventSocket.General
+{
+ /// <summary>
+ /// Variable that applies to both legs in a call.
+ /// </summary>
+ /// <remarks>
+ /// Variables can be access from FreeSWITCH with the name
+ /// "variable_[name]"
+ /// </remarks>
+ public class CallVariable
+ {
+ private readonly string _name;
+ private readonly string _value;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CallVariable"/> class.
+ /// </summary>
+ /// <param name="name">Name of variable.</param>
+ /// <param name="value">Value.</param>
+ public CallVariable(string name, string value)
+ {
+ _name = name;
+ _value = value;
+ }
+
+ public string Name
+ {
+ get { return _name; }
+ }
+
+ public string Value
+ {
+ get { return _value; }
+ }
+
+ public override string ToString()
+ {
+ return _name + "=" + _value;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/ChannelVariable.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/ChannelVariable.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/ChannelVariable.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/ChannelVariable.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/ChannelVariable.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+namespace FreeSwitch.EventSocket.General
+{
+ /// <summary>
+ /// Channel variables are used in freeswitch to store information
+ /// that can be used by javascript programs.
+ /// </summary>
+ public class ChannelVariable
+ {
+ private readonly string _name;
+ private readonly string _value;
+
+ public ChannelVariable(string name, string value)
+ {
+ _name = name;
+ _value = value;
+ }
+
+ public string Name
+ {
+ get { return _name; }
+ }
+
+ public string Value
+ {
+ get { return _value; }
+ }
+
+ public override string ToString()
+ {
+ return _name + "=" + _value;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SipAddress.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SipAddress.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SipAddress.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SipAddress.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SipAddress.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.General
+{
+ public class SipAddress : Address
+ {
+ private string _domain;
+
+ public SipAddress(string domain, string extension)
+ : base(extension)
+ {
+ _domain = domain;
+ }
+
+ public string Domain
+ {
+ get { return _domain; }
+ set { _domain = value; }
+ }
+
+ public override string ToString()
+ {
+ return Extension + "@" + Domain;
+ }
+
+ public static SipAddress Parse(string fullAddress)
+ {
+ string[] parts = fullAddress.Split('@');
+ if (parts.Length == 2)
+ {
+ return new SipAddress(parts[1], parts[0]);
+ }
+ return null;
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/General/SofiaSipAddress.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,46 @@
+namespace FreeSwitch.EventSocket.General
+{
+ /// <summary>
+ /// Destination as a FreeSWITCH Sofia sip address.
+ /// </summary>
+ public class SofiaSipAddress : Address
+ {
+ private readonly string _profileName;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SofiaSipAddress"/> class.
+ /// </summary>
+ /// <param name="profileName">Profile (context) name.</param>
+ /// <param name="userName">User name (and if needed, IP address / domain name).</param>
+ public SofiaSipAddress(string profileName, string userName)
+ {
+ Extension = userName;
+ _profileName = profileName;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SofiaSipAddress"/> class.
+ /// </summary>
+ /// <param name="address">Another address.</param>
+ public SofiaSipAddress(SipAddress address)
+ {
+ _profileName = address.Domain;
+ Extension = address.Extension;
+ }
+
+ public override string ToString()
+ {
+ return "sofia/" + _profileName + "/" + Extension;
+ }
+
+ public static SofiaSipAddress Parse(string fullAddress)
+ {
+ string[] parts = fullAddress.Split('@');
+ if (parts.Length == 2)
+ return new SofiaSipAddress(parts[1], parts[0]);
+
+ parts = fullAddress.Split('/');
+ return parts.Length == 3 ? new SofiaSipAddress(parts[1], parts[2]) : null;
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/DtmfEventArgs.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/DtmfEventArgs.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/DtmfEventArgs.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/DtmfEventArgs.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/DtmfEventArgs.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,44 @@
+using System;
+
+namespace FreeSwitch.EventSocket.Ivr
+{
+
+ public class DtmfEventArgs : EventArgs
+ {
+ private string _dtmf;
+ private string _dtmfCopy;
+
+ public DtmfEventArgs(string dtmf)
+ {
+ _dtmf = dtmf;
+ _dtmfCopy = (string)_dtmf.Clone();
+ }
+
+ /// <summary>
+ /// You cannot remove digits from the buffer (since it's a copy of the real buffer).
+ /// </summary>
+ /// <seealso cref="RemoveDigits"/>
+ public string Dtmf
+ {
+ get { return _dtmfCopy; }
+ }
+
+ /// <summary>
+ /// Remove digits from the real buffer.
+ /// </summary>
+ /// <param name="count">number of digits to remove.</param>
+ public void RemoveDigits(int count)
+ {
+ lock (_dtmf)
+ {
+ if (count > _dtmf.Length)
+ _dtmf = string.Empty;
+ else
+ _dtmf = _dtmf.Remove(0, count);
+ _dtmfCopy = (string)_dtmf.Clone();
+ }
+ }
+ }
+
+ public delegate void DtmfHandler(object source, DtmfEventArgs args);
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrInterface.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrInterface.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrInterface.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrInterface.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrInterface.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,299 @@
+using System;
+using System.Threading;
+using FreeSwitch.EventSocket.Commands;
+
+namespace FreeSwitch.EventSocket.Ivr
+{
+ public class IvrInterface
+ {
+ public const string AllDigits = "*#0123456789";
+ private readonly string _uuid;
+ private string _baseSoundPath = "sounds\\";
+ private string _dtmf = string.Empty;
+ private EventManager _mgr;
+ public event DtmfHandler DtmfReceived;
+ private int _dtmfWaitCount = 0;
+ private bool _abortSpeechOnDtmf;
+ private bool _answered;
+ private IvrInterfaceHandler _handler = null;
+ private string _lastAbortDigits = "*";
+ private int _defaultTimeout = 10000;
+ private readonly ManualResetEvent _dtmfTimeout = new ManualResetEvent(false);
+ private IvrQueue _queue;
+
+
+ public IvrInterface(EventManager mgr, string uuid)
+ {
+ if (mgr == null)
+ throw new ArgumentNullException("mgr");
+ if (string.IsNullOrEmpty(uuid))
+ throw new ArgumentNullException("uuid");
+
+ _queue = new IvrQueue(mgr);
+ _mgr = mgr;
+ mgr.EventReceived += OnEvent;
+ _uuid = uuid;
+
+ mgr.Send(new ParkCmd(uuid));
+ }
+
+ public IAsyncResult BeginInvoke(IvrInterfaceHandler handler, AsyncCallback callback, object state)
+ {
+ _handler = handler;
+ return handler.BeginInvoke(this, callback, state);
+ }
+
+ public void EndInvoke(IAsyncResult result)
+ {
+ if (_handler != null)
+ _handler.EndInvoke(result);
+ }
+
+ /// <summary>
+ /// dont play phrases as long as we have DTMF in the buffer.
+ /// </summary>
+ public bool AbortSpeechOnDtmf
+ {
+ get { return _abortSpeechOnDtmf; }
+ set { _abortSpeechOnDtmf = value; }
+ }
+
+ /// <summary>
+ /// True if IVR call have been answered.
+ /// </summary>
+ public bool Answered
+ {
+ get { return _answered; }
+ }
+
+ /// <summary>
+ /// Number of seconds to wait on DTMF
+ /// </summary>
+ public int DefaultTimeout
+ {
+ get { return _defaultTimeout; }
+ set { _defaultTimeout = value; }
+ }
+
+ /// <summary>
+ /// Relative path under FreeSWITCH to where the sound files resides
+ /// </summary>
+ /// <remarks>default is "sounds\"</remarks>
+ public string BaseSoundPath
+ {
+ get { return _baseSoundPath; }
+ set { _baseSoundPath = value; }
+ }
+
+ private void OnEvent(EventBase receivedEvent)
+ {
+ if (!receivedEvent.IsChannelEvent)
+ return;
+
+ ChannelEvent channelEvent = (ChannelEvent) receivedEvent;
+ if (channelEvent.UniqueId != _uuid)
+ return;
+
+ if (receivedEvent is EventChannelAnswer)
+ {
+ _answered = true;
+ }
+ else if (receivedEvent is EventDtmf)
+ {
+ EventDtmf evt = (EventDtmf) receivedEvent;
+ Console.WriteLine("DTMF Event: " + evt.Digit);
+ if (_queue.GotDtmf(evt.Digit))
+ {
+ lock (_dtmf)
+ _dtmf += evt.Digit;
+
+ if (_dtmfWaitCount != 0 && _dtmf.Length >= _dtmfWaitCount)
+ {
+ Console.WriteLine("Got all DTMF: " + _dtmfWaitCount + "/" + _dtmf.Length);
+ _dtmfTimeout.Set();
+ }
+
+ if (DtmfReceived != null)
+ DtmfReceived(this, new DtmfEventArgs(_dtmf));
+ }
+ }
+ else if (receivedEvent is EventChannelDestroy || receivedEvent is EventChannelHangup)
+ {
+ if (_mgr != null)
+ {
+ _mgr.EventReceived -= OnEvent;
+ _mgr = null;
+ }
+ }
+ else if (receivedEvent is EventChannelExecute)
+ {
+ EventChannelExecute exec = (EventChannelExecute)receivedEvent;
+ _queue.Execute(exec);
+ }
+ else if (receivedEvent is EventChannelExecuteComplete)
+ {
+ EventChannelExecuteComplete exec = (EventChannelExecuteComplete)receivedEvent;
+ _queue.ExecuteComplete(exec);
+ }
+ }
+
+ /// <summary>
+ /// Wait on dtmf.
+ /// </summary>
+ /// <param name="count">Number of digits to get</param>
+ /// <param name="timeout">number of seconds to wait on all digits.</param>
+ /// <remarks>You can also used the Dtmf event if you want to use asynchrounous programming.</remarks>
+ /// <seealso cref="DtmfReceived"/>
+ public string GetDtmf(int count, int timeout)
+ {
+ if (_mgr == null)
+ return string.Empty;
+
+ lock (_dtmf)
+ {
+ if (_dtmfWaitCount > 0)
+ throw new InvalidOperationException("Already waiting on an event.");
+ _dtmfWaitCount = 1;
+ _dtmfTimeout.Reset();
+ }
+
+ if (_dtmf.Length < count)
+ {
+ if (_queue.CommandRunning)
+ _queue.Add(new PrivateWaitDtmf(OnDtmfTimeout, timeout));
+
+ _dtmfWaitCount = count - _dtmf.Length;
+ if (!_dtmfTimeout.WaitOne(timeout, true))
+ {
+ Console.WriteLine("Didn't get any DTMF: " + _dtmf);
+ _dtmf = string.Empty;
+ _dtmfWaitCount = 0;
+ return string.Empty;
+ }
+ }
+
+ lock (_dtmf)
+ {
+ if (_dtmf.Length >= count)
+ {
+ string dtmf = _dtmf.Substring(0, count);
+ if (_dtmf.Length == count)
+ _dtmf = string.Empty;
+ else
+ _dtmf = _dtmf.Remove(count);
+ _dtmfWaitCount = 0;
+ return dtmf;
+ }
+ }
+
+ _dtmfWaitCount = 0;
+ return string.Empty;
+ }
+
+ private void OnDtmfTimeout(PrivateWaitDtmf dtmf)
+ {
+ dtmf.Dispose();
+ _dtmfTimeout.Set();
+ }
+
+ /// <summary>
+ /// Wait on dtmf.
+ /// </summary>
+ /// <param name="count">Number of digits to get</param>
+ /// <remarks>You can also used the Dtmf event if you want to use asynchrounous programming.</remarks>
+ /// <seealso cref="DtmfReceived"/>
+ /// <seealso cref="DefaultTimeout"/>
+ public string GetDtmf(int count)
+ {
+ return GetDtmf(count, _defaultTimeout);
+ }
+
+ /// <summary>
+ /// Play a sound file
+ /// </summary>
+ /// <param name="path">Path to sound file.</param>
+ /// <seealso cref="AllDigits"/>
+ /// <remarks>Prepends <see cref="BaseSoundPath"/> to path.</remarks>
+ public void Play(string path)
+ {
+ Play(path, AllDigits);
+ }
+
+ /// <summary>
+ /// Play a sound file
+ /// </summary>
+ /// <param name="path">Path to sound file.</param>
+ /// <param name="digitsToAbortOn">DTMF digits that can abort speech.</param>
+ /// <remarks>Prepends <see cref="BaseSoundPath"/> to path.</remarks>
+ public void Play(string path, string digitsToAbortOn)
+ {
+ if (_mgr == null)
+ return;
+
+ if (_abortSpeechOnDtmf && _dtmf != string.Empty)
+ return;
+
+ if (digitsToAbortOn != _lastAbortDigits)
+ {
+ _mgr.Send(new SetVariable(_uuid, "playback_terminators", digitsToAbortOn));
+ _lastAbortDigits = digitsToAbortOn;
+ }
+
+ _queue.Add(new PlaybackCmd(_uuid, GetSoundPath(path, false), digitsToAbortOn));
+ }
+
+
+
+ /// <summary>
+ /// Record a sound file
+ /// </summary>
+ /// <param name="path">Where to store the sound</param>
+ /// <param name="limit">Maximum number of seconds that can be recorded.</param>
+ /// <param name="stop">stop an ongoing recording</param>
+ public void Record(string path, int limit, bool stop)
+ {
+ if (_mgr == null)
+ return;
+
+ _queue.Add(new RecordCmd(_uuid, GetSoundPath(path, true), stop, limit));
+ }
+
+ /// <summary>
+ /// Record a sound file
+ /// </summary>
+ /// <param name="path">Where to store the sound</param>
+ /// <param name="limit">Maximum number of seconds that can be recorded.</param>
+ public void Record(string path, int limit)
+ {
+ Record(path, limit, false);
+ }
+
+ /// <summary>
+ /// This method can be used to build paths for different languages and such.
+ /// </summary>
+ /// <param name="fileName">soundfile</param>
+ /// <param name="isRecording">path is to a file being recorded</param>
+ /// <returns>Path to sound file</returns>
+ protected virtual string GetSoundPath(string fileName, bool isRecording)
+ {
+ return BaseSoundPath + fileName;
+ }
+
+ /// <summary>
+ /// Tell script to sleep for a while.
+ /// </summary>
+ /// <param name="ms">number of milliseconds</param>
+ public void Sleep(int ms)
+ {
+ if (_mgr == null)
+ return;
+
+ _queue.Add(new SleepCmd(_uuid, ms));
+ }
+
+
+ }
+
+
+ public delegate void IvrInterfaceHandler(IvrInterface app);
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrQueue.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrQueue.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrQueue.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrQueue.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/IvrQueue.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,159 @@
+using System;
+using System.Collections.Generic;
+using FreeSwitch.EventSocket.Commands;
+
+namespace FreeSwitch.EventSocket.Ivr
+{
+ internal class IvrQueue
+ {
+ private readonly Queue<CmdBase> _items = new Queue<CmdBase>();
+ private readonly EventManager _mgr;
+ private CmdBase _currentCommand;
+
+ public IvrQueue(EventManager mgr)
+ {
+ if (mgr == null)
+ throw new ArgumentNullException("mgr");
+
+ _mgr = mgr;
+ }
+
+ public bool CommandRunning
+ {
+ get { return _currentCommand != null; }
+ }
+
+ public void Add(CmdBase cmd)
+ {
+ lock (_items)
+ _items.Enqueue(cmd);
+ }
+
+ public void Execute(EventChannelExecute evt)
+ {
+ }
+
+ public void ExecuteComplete(EventChannelExecuteComplete evt)
+ {
+ Console.WriteLine(evt.AppName + "(" + evt.Arguments + ") is done.");
+
+ if (_currentCommand != null && evt.AppName != _currentCommand.Command)
+ {
+ Console.WriteLine("Executed something that is not ours: " + _currentCommand.Command);
+ return;
+ }
+
+ // run next command
+ lock (_items)
+ {
+ _currentCommand = null;
+
+ if (_items.Count > 0)
+ {
+ // check if next cmd is waiting on dtmf, then trigger it to start.
+ if (_items.Peek().Command == "privdtmf")
+ ((PrivateWaitDtmf) _items.Peek()).Trigger();
+
+ SendNextCommand();
+ }
+ }
+ }
+
+ /// <summary>
+ /// a DTMF was pressed. Validate it towards the queue
+ /// </summary>
+ /// <param name="digit"></param>
+ /// <returns>true if it can be processed, false if not.</returns>
+ public bool GotDtmf(char digit)
+ {
+ bool isValid = true;
+
+ lock (_items)
+ {
+ // dequeue all play commands if correct digit is pressed.
+ while (_items.Count > 0)
+ {
+ if (_items.Peek().GetType() == typeof (SetVariable))
+ {
+ Console.WriteLine("Is SetVariable");
+ SetVariable var = (SetVariable) _items.Peek();
+ string digits = string.Empty;
+ digits += digit;
+ if (var.Name == "playback_terminators" )
+ {
+ if (var.Value.Contains(digits))
+ {
+ _items.Dequeue();
+ if (_items.Count > 0 && _items.Peek().GetType() == typeof(PlaybackCmd))
+ _items.Dequeue();
+ }
+ else
+ isValid = false; //digit was not one of the terminators. skip it.
+ }
+ }
+ else if (_items.Peek().GetType() == typeof(PlaybackCmd))
+ {
+ Console.WriteLine("Is PlaybackCmd");
+ PlaybackCmd cmd = (PlaybackCmd)_items.Peek();
+ string digits = string.Empty;
+ digits += digit;
+ if (cmd.DtmfAbort.Contains(digits))
+ _items.Dequeue();
+ else
+ {
+ isValid = false; //digit was not one of the terminators, skip it.
+ break;
+ }
+ }
+ else
+ break;
+ }
+
+ // and dequeue the dtmf command.
+ if (_items.Count > 0 && _items.Peek().GetType() == typeof(PrivateWaitDtmf))
+ ((PrivateWaitDtmf) _items.Dequeue()).Dispose();
+ }
+
+ return isValid;
+ }
+
+ private static void OnCommandReply(CmdBase command, CommandReply reply)
+ {
+ command.ReplyReceived -= OnCommandReply;
+ if (!reply.Success)
+ {
+ Console.WriteLine("Command failed: " + reply.ErrorMessage);
+ }
+ }
+
+ public CmdBase Peek()
+ {
+ lock (_items)
+ {
+ return _items.Peek();
+ }
+ }
+
+ public CmdBase Pop()
+ {
+ lock (_items)
+ {
+ return _items.Dequeue();
+ }
+ }
+
+ private void SendNextCommand()
+ {
+ lock (_items)
+ {
+ if (_currentCommand != null)
+ throw new InvalidOperationException("A command is already running.");
+
+ _currentCommand = _items.Dequeue();
+ }
+
+ _currentCommand.ReplyReceived += OnCommandReply;
+ _mgr.Send(_currentCommand);
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/PrivateWaitDtmf.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/PrivateWaitDtmf.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/PrivateWaitDtmf.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/PrivateWaitDtmf.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Ivr/PrivateWaitDtmf.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,70 @@
+using System;
+using System.Threading;
+using FreeSwitch.EventSocket.Commands;
+
+namespace FreeSwitch.EventSocket.Ivr
+{
+ internal delegate void DtmfTimeoutHandler(PrivateWaitDtmf dtmf);
+
+ internal class PrivateWaitDtmf : CmdBase, IDisposable
+ {
+ private Timer _timer;
+ private readonly int _waitTime;
+ private readonly DtmfTimeoutHandler _handler;
+
+ /// <summary>
+ /// DTMF timeouts should be counted AFTER a phrase has been said.
+ /// this small command allows us to start the timer when so.
+ /// </summary>
+ /// <param name="handler">Method that will be signalled when the DTMF command goes on timeout.</param>
+ /// <param name="time">Number of seconds to wait on input.</param>
+ public PrivateWaitDtmf(DtmfTimeoutHandler handler, int time)
+ {
+ if (handler == null)
+ throw new ArgumentNullException("handler");
+ if (time == 0)
+ throw new ArgumentException("time cannot be 0.", "time");
+ if (time < 100)
+ time *= 1000;
+ _waitTime = time;
+ _handler = handler;
+ }
+
+ public override string Command
+ {
+ get { return "privdtmf"; }
+ }
+
+ public override string Arguments
+ {
+ get { return _waitTime.ToString(); }
+ }
+
+ public void Trigger()
+ {
+ _timer = new Timer(OnTimeout, null, _waitTime, Timeout.Infinite);
+ }
+
+ private void OnTimeout(object state)
+ {
+ _timer.Dispose();
+ _timer = null;
+ _handler(this);
+ }
+
+ #region IDisposable Members
+
+ ///<summary>
+ ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ ///</summary>
+ ///<filterpriority>2</filterpriority>
+ public void Dispose()
+ {
+ if (_timer != null)
+ _timer.Dispose();
+ _timer = null;
+ }
+
+ #endregion
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/LogWriterHandler.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/LogWriterHandler.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/LogWriterHandler.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/LogWriterHandler.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/LogWriterHandler.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,59 @@
+namespace FreeSwitch.EventSocket
+{
+ /// <summary>
+ /// Determines how important the log message is.
+ /// </summary>
+ public enum LogPrio
+ {
+ /// <summary>
+ /// Not important at all, used to follow the flow of the program
+ /// </summary>
+ Trace,
+
+ /// <summary>
+ /// Messages useful when debugging
+ /// </summary>
+ Debug,
+
+ /// <summary>
+ /// States etc have changed.
+ /// </summary>
+ Info,
+
+ /// <summary>
+ /// Something did not go as we expected, but we can handle it.
+ /// </summary>
+ Warning,
+
+ /// <summary>
+ /// Something went wrong, we can't really handle it, but the program can continue to live
+ /// </summary>
+ Error,
+
+ /// <summary>
+ /// Some went really wrong, and the program should really be shut down.
+ /// </summary>
+ Fatal
+ }
+
+ /// <summary>
+ /// Used to retreive logging messages from the event socket framework.
+ /// </summary>
+ /// <param name="prio">importance of the log message</param>
+ /// <param name="message">the message</param>
+ public delegate void LogWriterHandler(LogPrio prio, string message);
+
+ /// <summary>
+ /// Used as default logwriter
+ /// </summary>
+ internal class NullWriter
+ {
+ /// <summary>
+ /// Used to log to void.
+ /// </summary>
+ /// <param name="prio"></param>
+ /// <param name="message"></param>
+ public static void Write(LogPrio prio, string message)
+ {}
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,153 @@
+namespace FreeSwitch.EventSocket
+{
+ public class PartyInfo
+ {
+ public static PartyInfo Empty = new PartyInfo();
+ private string _userName = string.Empty;
+ private string m_dialplan = string.Empty;
+ private string m_callerIdName = string.Empty;
+ private string m_callerIdNumber = string.Empty;
+ private string m_destinationNumber = string.Empty;
+ private string m_uniqueId = string.Empty;
+ private string m_source = string.Empty;
+ private string m_context = string.Empty;
+ private string _channelName = string.Empty;
+ private bool m_screenBit;
+ private bool m_privacyHideName;
+ private bool m_privacyHideNumber;
+
+ public PartyInfo()
+ {
+ _userName = string.Empty;
+ m_dialplan = string.Empty;
+ m_callerIdName = string.Empty;
+ }
+
+ public string Dialplan
+ {
+ get { return m_dialplan; }
+ set { m_dialplan = value; }
+ }
+
+ public string CallerIdName
+ {
+ get { return m_callerIdName; }
+ set { m_callerIdName = value; }
+ }
+
+ public string CallerIdNumber
+ {
+ get { return m_callerIdNumber; }
+ set { m_callerIdNumber = value; }
+ }
+
+ public string DestinationNumber
+ {
+ get { return m_destinationNumber; }
+ set { m_destinationNumber = value; }
+ }
+
+ public string UniqueId
+ {
+ get { return m_uniqueId; }
+ set { m_uniqueId = value; }
+ }
+
+ public string Source
+ {
+ get { return m_source; }
+ set { m_source = value; }
+ }
+
+ public string Context
+ {
+ get { return m_context; }
+ set { m_context = value; }
+ }
+
+ public string ChannelName
+ {
+ get { return _channelName; }
+ set { _channelName = value; }
+ }
+
+ public bool ScreenBit
+ {
+ get { return m_screenBit; }
+ set { m_screenBit = value; }
+ }
+
+ public bool PrivacyHideName
+ {
+ get { return m_privacyHideName; }
+ set { m_privacyHideName = value; }
+ }
+
+ public bool PrivacyHideNumber
+ {
+ get { return m_privacyHideNumber; }
+ set { m_privacyHideNumber = value; }
+ }
+
+ public string UserName
+ {
+ get { return _userName; }
+ set { _userName = value; }
+ }
+
+ public bool Parse(string name, string value)
+ {
+ switch (name)
+ {
+ case "username":
+ _userName = value;
+ break;
+ case "dialplan":
+ Dialplan = value;
+ break;
+ case "caller-id-name":
+ CallerIdName = value;
+ break;
+ case "caller-id-number":
+ CallerIdNumber = value;
+ break;
+ case "destination-number":
+ DestinationNumber = value;
+ break;
+ case "unique-id":
+ UniqueId = value;
+ break;
+ case "source":
+ Source = value;
+ break;
+ case "context":
+ Context = value;
+ break;
+ case "channel-name":
+ ChannelName = value;
+ break;
+ case "screen-bit":
+ ScreenBit = value == "yes";
+ break;
+ case "privacy-hide-name":
+ PrivacyHideName = value == "yes";
+ break;
+ case "privacy-hide-number":
+ PrivacyHideNumber = value == "yes";
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+
+ }
+
+ public override string ToString()
+ {
+ return _channelName + "(" + CallerIdName + "/" + CallerIdNumber + ") id: "+UniqueId+", destination: " + DestinationNumber;
+
+ }
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Specialized;
+
+namespace FreeSwitch.EventSocket
+{
+ public class PlainEventMsg
+ {
+ private string _contentType = string.Empty;
+ private int _contentLength = -1;
+ private string _body = string.Empty;
+
+ public string ContentType
+ {
+ get { return _contentType; }
+ set { _contentType = value; }
+ }
+
+ public int ContentLength
+ {
+ get { return _contentLength; }
+ set { _contentLength = value; }
+ }
+
+ public string Body
+ {
+ get { return _body; }
+ set { _body = value; }
+ }
+
+ public bool ValidateHeader()
+ {
+ if (_contentType == string.Empty)
+ return false;
+ if (_contentType == "command/reply")
+ return _body != string.Empty;
+
+ return true;
+ }
+
+ public bool Validate()
+ {
+ if (!ValidateHeader())
+ return false;
+
+ if (_contentLength > 0)
+ return _contentLength == _body.Length || _contentLength == _body.Length + 2; // include first and last line breaks that we skip in parsing
+
+ return true;
+ }
+
+
+ public NameValueCollection ParseBody(bool urlDecodeValues)
+ {
+ NameValueCollection items = new NameValueCollection();
+ StringParser parser = new StringParser(_body);
+ string name = parser.Read(':', true);
+ while (!parser.EOF && name != string.Empty)
+ {
+ string value = parser.ReadLine(true);
+ if (items[name] == null)
+ {
+ try
+ {
+ items.Add(name.ToLower(), Uri.UnescapeDataString(value));
+ }
+ catch (UriFormatException)
+ {
+ // add the value unformatted
+ items.Add(name.ToLower(), value);
+ }
+ }
+
+ name = parser.Read(':', true);
+ }
+
+ return items;
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Program.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Program.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Program.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Program.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Program.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using FreeSwitch.EventSocket;
+
+namespace FreeSwitch.EventSocket
+{
+ class Program
+ {
+ /// <summary>
+ /// This method is called by the event delegate.
+ /// </summary>
+ /// <param name="eb">Reference to an event, each event has their own class.</param>
+ void HandleEvent(EventBase eb)
+ {
+ //Console.WriteLine(eb.DateLocal + " Got Event: " + eb.Name);
+
+
+ if (eb is EventChannelHangup)
+ Console.WriteLine(eb.DateLocal + " Hangup reason: " + ((EventChannelHangup)eb).Cause.ToString());
+ }
+
+ static void Main(string[] args)
+ {
+ Program p = new Program();
+
+ /// Create a new FreeSwitch event socket.
+ EventManager eventManager = new EventManager(null);
+
+ // Hook all events to the same delegate. Can also provide one delegate per event.
+ eventManager.EventReceived += p.HandleEvent;
+ eventManager.Subscribe(new Events(Event.All));
+
+ // Connect to localhost
+ eventManager.Start("localhost");
+
+
+ System.Threading.Thread.Sleep(1000000);
+
+ //a.
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties/AssemblyInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties/AssemblyInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties/AssemblyInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties/AssemblyInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Properties/AssemblyInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("FreeSwitch.EventSocket")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("FreeSwitch.EventSocket")]
+[assembly: AssemblyCopyright("Copyright © 2007")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("db16a54e-3305-4b56-92a1-70cc95179bc6")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,109 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventPresence : SipEvent
+ {
+ private PartyInfo _caller;
+ private string _rpid = string.Empty;
+ private string _status = string.Empty;
+ //private string _callId; // not "presencein/register", "presenceout/register"
+ //private string _contact; // not "presencein/register", "presenceout/register"
+ //private string _expires; //not "presencein/register", "presenceout/register"
+ private string _eventType = string.Empty;
+ private string _login = string.Empty;
+ private EventChannelState _channelState = new EventChannelState();
+
+ public string Login
+ {
+ get { return _login; }
+ set { _login = value; }
+ }
+
+ /// <summary>
+ /// "Click to call", "Registered", "unavailable", "Active (%d waiting)", "Idle"
+ /// </summary>
+ public string Status
+ {
+ get { return _status; }
+ set { _status = value; }
+ }
+
+ public string Rpid
+ {
+ get { return _rpid; }
+ set { _rpid = value; }
+ }
+
+ /// <summary>
+ /// Caller is only specified on state CS_ROUTING
+ /// and not on CS_HANGUP
+ /// </summary>
+ public PartyInfo Caller
+ {
+ get { return _caller; }
+ set { _caller = value; }
+ }
+
+ /// <summary>
+ /// presence,
+ /// </summary>
+ public string PresenceEventType
+ {
+ get { return _eventType; }
+ set { _eventType = value; }
+ }
+
+ /// <summary>
+ /// We *may* have channel state info
+ /// </summary>
+ public EventChannelState ChannelState
+ {
+ get { return _channelState; }
+ set { _channelState = value; }
+ }
+
+
+ /*
+ proto: sip
+ login: sip%3Amod_sofia%40192.168.0.58%3A5070
+ rpid: unknown
+ from: gauffin%40gauffin.com
+ status: Registered
+ * */
+ public override bool ParseCommand(string name, string value)
+ {
+ bool res = _channelState.ParseCommand(name, value);
+ switch (name)
+ {
+ case "status":
+ _status = value;
+ break;
+ case "rpid":
+ _rpid = value;
+ break;
+ case "login":
+ _login = value;
+ break;
+ case "event_type":
+ _eventType = value;
+ break;
+
+ default:
+
+ if (name.Length > 7 && name.Substring(0, 7) == "caller-")
+ {
+ if (Caller == null)
+ Caller = new PartyInfo();
+ return Caller.Parse(name.Substring(7), value);
+ }
+
+ return base.ParseCommand(name, value) || res;
+ }
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "Presence(" + _login + ", " + _status + ")." + _channelState + "." + base.ToString();
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventPresenceIn : EventPresence
+ {
+ public override string ToString()
+ {
+ return "In." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,12 @@
+namespace FreeSwitch.EventSocket
+{
+ public class EventPresenceOut : EventPresence
+ {
+ public override string ToString()
+ {
+ return "Out." + base.ToString();
+ }
+
+
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FreeSwitch.EventSocket.SipEvents
+{
+ class EventPresenceProbe : EventPresence
+ {
+ public override string ToString()
+ {
+ return "PresenceProbe." + base.ToString();
+ }
+
+ }
+
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+namespace FreeSwitch.EventSocket
+{
+ class EventRoster : SipEvent
+ {
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,83 @@
+using System;
+
+namespace FreeSwitch.EventSocket
+{
+ public class EventSofiaExpire : EventPresence
+ {
+ private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);
+ private string _profileName;
+ private string _userName;
+ private string _domain;
+ private string _userAgent;
+ private DateTime _expires;
+
+ public string ProfileName
+ {
+ get { return _profileName; }
+ set { _profileName = value; }
+ }
+
+ public string UserName
+ {
+ get { return _userName; }
+ set { _userName = value; }
+ }
+
+ public string Domain
+ {
+ get { return _domain; }
+ set { _domain = value; }
+ }
+
+ public string UserAgent
+ {
+ get { return _userAgent; }
+ set { _userAgent = value; }
+ }
+
+ public DateTime Expires
+ {
+ get { return _expires; }
+ set { _expires = value; }
+ }
+
+ /*
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", argv[6]);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user", "%s", argv[1]);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "host", "%s", argv[2]);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user-agent", "%s", argv[5]);
+ * */
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "profile-name":
+ _profileName = value;
+ break;
+ case "user":
+ _userName = value;
+ break;
+ case "host":
+ _domain = value;
+ break;
+ case "expires":
+ int seconds;
+ if (int.TryParse(value, out seconds))
+ _expires = UnixEpoch.AddSeconds(seconds);
+ break;
+ case "user-agent":
+ _userAgent = value;
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+ return true;
+
+ }
+
+ public override string ToString()
+ {
+ return "SofiaExpire(" + _userName + "@" + _domain + ")." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,99 @@
+namespace FreeSwitch.EventSocket
+{
+ /*
+ * profile-name: gauffin.com
+from-user: jonas
+from-host: gauffin.com
+contact: %22Jonas%20Gauffin%22%20%3Csip%3Ajonas%40192.168.1.101%3A5060%3E
+*/
+
+ /// <summary>
+ /// Sofia_reg.c way down in sofia_reg_handle_register
+ /// </summary>
+ public class EventSofiaRegister : EventBase
+ {
+ private string _domain;
+ private string _profileName;
+ private string _user;
+ private string _contact;
+ private string _callId;
+ private int _expires;
+
+ public string ProfileName
+ {
+ get { return _profileName; }
+ set { _profileName = value; }
+ }
+
+ public string UserName
+ {
+ get { return _user; }
+ set { _user = value; }
+ }
+
+ public string Domain
+ {
+ get { return _domain; }
+ set { _domain = value; }
+ }
+
+ public string Contact
+ {
+ get { return _contact; }
+ set { _contact = value; }
+ }
+
+ public string CallId
+ {
+ get { return _callId; }
+ set { _callId = value; }
+ }
+
+ public int Expires
+ {
+ get { return _expires; }
+ set { _expires = value; }
+ }
+
+ /*
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", profile->name);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-user", "%s", to_user);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-host", "%s", to_host);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "rpid", "%s", rpid);
+ */
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "profile-name":
+ _profileName = value;
+ break;
+ case "from-user":
+ _user = value;
+ break;
+ case "from-host":
+ _domain = value;
+ break;
+ case "contact":
+ _contact = value;
+ break;
+ case "call-id":
+ _callId = value;
+ break;
+ case "expires":
+ int.TryParse(value, out _expires);
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "SofiaRegister(" + _user + "@" + _domain + ", " + _expires + ")." + base.ToString();
+ }
+ }
+
+
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaUnregister.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,87 @@
+namespace FreeSwitch.EventSocket.SipEvents
+{
+ public class EventSofiaUnregister : EventBase
+{
+ private string _domain;
+ private string _profileName;
+ private string _user;
+ private string _contact;
+ private string _callId;
+ private int _expires;
+
+ public string ProfileName
+ {
+ get { return _profileName; }
+ set { _profileName = value; }
+ }
+
+ public string UserName
+ {
+ get { return _user; }
+ set { _user = value; }
+ }
+
+ public string Domain
+ {
+ get { return _domain; }
+ set { _domain = value; }
+ }
+
+ public string Contact
+ {
+ get { return _contact; }
+ set { _contact = value; }
+ }
+
+ public string CallId
+ {
+ get { return _callId; }
+ set { _callId = value; }
+ }
+
+ public int Expires
+ {
+ get { return _expires; }
+ set { _expires = value; }
+ }
+
+ /*
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", profile->name);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-user", "%s", to_user);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-host", "%s", to_host);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "rpid", "%s", rpid);
+ */
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "profile-name":
+ _profileName = value;
+ break;
+ case "from-user":
+ _user = value;
+ break;
+ case "from-host":
+ _domain = value;
+ break;
+ case "contact":
+ _contact = value;
+ break;
+ case "call-id":
+ _callId = value;
+ break;
+ case "expires":
+ int.TryParse(value, out _expires);
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "SofiaUnregister(" + _user + "@" + _domain + ", " + _expires + ")." + base.ToString();
+ }
+ }
+}
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,44 @@
+namespace FreeSwitch.EventSocket
+{
+ public class SipEvent : EventBase
+ {
+ private string _from;
+ private string _protocol;
+
+ public string Protocol
+ {
+ get { return _protocol; }
+ set { _protocol = value; }
+ }
+
+ /// <summary>
+ /// username@domain
+ /// </summary>
+ public string From
+ {
+ get { return _from; }
+ set { _from = value; }
+ }
+
+ public override bool ParseCommand(string name, string value)
+ {
+ switch (name)
+ {
+ case "from":
+ _from = value;
+ break;
+ case "proto":
+ _protocol = value;
+ break;
+ default:
+ return base.ParseCommand(name, value);
+ }
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return "Sip(" + _from + ")." + base.ToString();
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringHelper.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringHelper.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringHelper.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringHelper.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringHelper.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,55 @@
+namespace FreeSwitch.EventSocket
+{
+ public static class StringHelper
+ {
+ /// <summary>
+ /// This method converts a enum value to the correct format
+ /// that FreeSwitch uses (WORD1_WORD2) instead of the CamelCase that
+ /// we use in .net.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public static string UpperCaseToCamelCase(string name)
+ {
+ bool isFirst = true;
+ string result = string.Empty;
+ foreach (char ch in name)
+ {
+ if (isFirst)
+ {
+ result += char.ToUpper(ch);
+ isFirst = false;
+ }
+ else
+ {
+ if (ch == '_')
+ isFirst = true;
+ else
+ result += char.ToLower(ch);
+ }
+ }
+ return result;
+ }
+
+ public static string CamelCaseToUpperCase(string name)
+ {
+ string result = string.Empty;
+ bool isFirst = true;
+ foreach (char ch in name)
+ {
+ if (char.IsUpper(ch))
+ {
+ if (!isFirst)
+ result += '_';
+ else
+ isFirst = false;
+ result += char.ToUpper(ch);
+ }
+ else
+ result += char.ToUpper(ch);
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,272 @@
+using System.Collections.Generic;
+
+namespace FreeSwitch.EventSocket
+{
+ internal class StringParser
+ {
+ private readonly Stack<int> _savedPositions = new Stack<int>();
+ private int _pos;
+ private string _text;
+
+ public StringParser(string text)
+ {
+ _pos = 0;
+ _text = text;
+ }
+
+ public bool EOF
+ {
+ get { return IsEOF(_pos); }
+ }
+
+ /// <summary>
+ /// true if we are currently on a emty line
+ /// </summary>
+ public bool EOL
+ {
+ get
+ {
+ if (EOF)
+ return false;
+ else if (_text[_pos] == '\n')
+ return true;
+ else if (_pos < _text.Length - 2)
+ return _text[_pos] == '\r' && _text[_pos + 1] == '\n';
+ else
+ return false;
+ }
+ }
+
+ public void SavePos()
+ {
+ _savedPositions.Push(_pos);
+ }
+
+ public void RestorePos()
+ {
+ if (_savedPositions.Count > 0)
+ _pos = _savedPositions.Pop();
+ }
+
+ public void ClearSavedPositions()
+ {
+ _savedPositions.Clear();
+ }
+
+ private bool IsEOF(int pos)
+ {
+ return pos >= _text.Length;
+ }
+
+ public bool IsEmptyLine(bool skipWhitespaces)
+ {
+ if (EOF)
+ return false;
+ else if (_pos < _text.Length - 1)
+ return _text[_pos] == '\n';
+ else if (_pos < _text.Length - 2)
+ return _text[_pos] == '\r' && _text[_pos + 1] == '\n';
+
+ return false;
+ }
+
+ public string PeekWord(bool skipWS, bool stopAtEOL)
+ {
+ int startpos = _pos;
+ if (skipWS)
+ SkipWS();
+ int pos = FindWS(stopAtEOL);
+ _pos = startpos;
+
+ if (pos != -1)
+ return _text.Substring(_pos, pos - _pos);
+ else
+ return string.Empty;
+ }
+
+ public string GetWord(bool skipWS, bool stopAtEOL)
+ {
+ int startpos = _pos;
+ if (skipWS)
+ SkipWS();
+ int pos = FindWS(stopAtEOL);
+
+ _pos = pos;
+
+ if (pos != -1)
+ return _text.Substring(startpos, pos - startpos);
+ else
+ return string.Empty;
+ }
+
+ public string ReadLine()
+ {
+ return ReadLine(false);
+ }
+
+ public string ReadLine(bool trimWhiteSpaces)
+ {
+ if (EOF)
+ return string.Empty;
+
+ if (trimWhiteSpaces)
+ SkipWS();
+
+ // loop until we get new line chars
+ int startpos = _pos;
+ while (!EOF && !IsEOL())
+ ++_pos;
+
+ // Save _pos, trim whitespaces, restore _pos
+ int pos = _pos;
+ if (trimWhiteSpaces)
+ TrimEnd();
+ int endpos = _pos;
+ _pos = pos;
+
+ // Move to after new line chars
+ if (!EOF && _text[_pos] == '\r')
+ ++_pos;
+ if (!EOF && _text[_pos] == '\n')
+ ++_pos;
+
+ // .. and the result is line without whitespaces at the end and without new line chars.
+ return _text.Substring(startpos, endpos - startpos);
+ }
+
+ public string ReadToEmptyLine()
+ {
+ int chars = 4;
+ int pos = _text.IndexOf("\n\n", _pos);
+ if (pos == -1)
+ {
+ chars = 2;
+ pos = _text.IndexOf("\n\n", _pos);
+ }
+ if (pos == -1)
+ return string.Empty;
+
+ int startpos = _pos;
+ _pos = pos + chars;
+ return _text.Substring(startpos, pos - startpos);
+ }
+
+ public string Read(int chars)
+ {
+ if (_text.Length - _pos < chars)
+ return string.Empty;
+
+ string result = _text.Substring(_pos, chars);
+ _pos += chars;
+ return result;
+ }
+
+ public string ReadToEnd()
+ {
+ string result = _text.Substring(_pos, _text.Length - _pos);
+ _pos = _text.Length;
+ return result;
+ }
+
+ public string Read(char delimiter, bool skipWS)
+ {
+ if (skipWS)
+ SkipWS();
+
+ // find delimiter
+ int startpos = _pos;
+ while (!EOF && _text[_pos] != delimiter)
+ ++_pos;
+
+ // did not find it, reset pos
+ if (EOF)
+ {
+ _pos = startpos;
+ return string.Empty;
+ }
+ else
+ {
+ ++_pos; // skip delimiter
+ int endpos = TrimEnd(); // skip
+ return _text.Substring(startpos, endpos - startpos);
+ }
+ }
+
+ private int TrimEnd()
+ {
+ if (EOF)
+ return _pos;
+
+ int pos = _pos;
+ while (IsWS(_text[pos]))
+ --pos;
+ return pos;
+ }
+
+ private int FindWS(bool stopAtEOL)
+ {
+ if (!stopAtEOL)
+ return FindWS();
+
+ int pos = _pos;
+ while (!IsEOF(pos) && !IsEOL(_text[pos]) && !IsWS(_text[pos]))
+ ++pos;
+
+ return IsEOF(pos) ? -1 : pos;
+ }
+
+ private bool IsEOL()
+ {
+ if (EOF)
+ return true;
+ if (_text[_pos] == '\r')
+ return true;
+ else if (_text[_pos] == '\n')
+ return true;
+ else
+ return false;
+ }
+
+ private bool IsEOL(char ch)
+ {
+ return ch == '\r' || ch == '\n';
+ }
+
+ private bool IsWS(char ch)
+ {
+ return ch == '\t' || ch == ' ';
+ }
+
+ private int FindWS()
+ {
+ int pos = _pos;
+ while (!IsEOF(pos) && !IsWS(_text[pos]))
+ ++pos;
+
+ return IsEOF(pos) ? -1 : pos;
+ }
+
+ public void SkipWS()
+ {
+ while (!EOF && IsWS(_text[_pos]))
+ ++_pos;
+ }
+
+ public void RemoveUsedContent()
+ {
+ _text = _text.Remove(0, _pos);
+ _pos = 0;
+ }
+
+ public void Append(string value)
+ {
+ _text += value;
+ }
+
+ public void Clear()
+ {
+ _text = string.Empty;
+ _pos = 0;
+ }
+ }
+}
\ No newline at end of file
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/IvrSocket.csproj
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/IvrSocket.csproj (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket/IvrSocket.csproj) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/IvrSocket.csproj (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/IvrSocket.csproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,54 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{22F26D13-0A0E-4345-9FEC-CE13FC8F37FD}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>IvrSocket</RootNamespace>
+ <AssemblyName>IvrSocket</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Voicemail.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\FreeSwitchEventSocket\FreeSwitch.EventSocket.csproj">
+ <Project>{3F8895F6-F710-4323-B96A-4EFB6BC97E08}</Project>
+ <Name>FreeSwitch.EventSocket</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Program.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Program.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket/Program.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Program.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Program.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+using System;
+using System.Threading;
+using FreeSwitch.EventSocket;
+using FreeSwitch.EventSocket.Commands;
+
+namespace IvrSocket
+{
+ class Program
+ {
+ private static EventManager mgr;
+ static void Main(string[] args)
+ {
+ mgr = new EventManager(null);
+ mgr.EventReceived += IvrManager;
+ mgr.Subscribe(Event.All);
+ mgr.Start("localhost");
+ Thread.Sleep(1000);
+ //mgr.Send(new SendEventCmd(new EventMessageWaiting("jonas@192.168.0.58", 1, 2)));
+ Console.ReadLine();
+ }
+
+ private static void IvrManager(EventBase receivedEvent)
+ {
+ if (receivedEvent is EventChannelAnswer)
+ {
+ EventChannelAnswer answer = (EventChannelAnswer)receivedEvent;
+ if (answer.Parameters["variable_ivr_name"] == "voicemail")
+ new Voicemail(mgr, answer.UniqueId);
+ }
+ else if (receivedEvent is EventChannelHangup)
+ {
+ Console.WriteLine("Bye bye baby!");
+ }
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Properties (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket/Properties)
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Properties/AssemblyInfo.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Properties/AssemblyInfo.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket/Properties/AssemblyInfo.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Properties/AssemblyInfo.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Properties/AssemblyInfo.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("IvrSocket")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("IvrSocket")]
+[assembly: AssemblyCopyright("Copyright © 2008")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3e447189-bfd8-4412-93bb-da3543dd2ca6")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Deleted: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Voicemail.cs
Copied: freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Voicemail.cs (from rev 14471, freeswitch/trunk/contrib/verifier/EventSocket/trunk/IvrSocket/Voicemail.cs) (0 => 14472)
--- freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Voicemail.cs (rev 0)
+++ freeswitch/branches/seven/contrib/verifier/EventSocket/trunk/IvrSocket/Voicemail.cs 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+using System;
+using System.Threading;
+using FreeSwitch.EventSocket;
+using FreeSwitch.EventSocket.Ivr;
+
+namespace IvrSocket
+{
+ /// <summary>
+ /// Very simple voicemail app =)
+ /// </summary>
+ class Voicemail
+ {
+ private readonly IvrInterface _ivr;
+
+ public Voicemail(EventManager mgr, string uuid)
+ {
+ _ivr = new IvrInterface(mgr, uuid);
+ _ivr.BeginInvoke(OnIvr, null, null);
+ }
+
+ private void OnIvr(IvrInterface app)
+ {
+ _ivr.Play("sv\\system\\record_after_beep.wav", IvrInterface.AllDigits);
+ _ivr.Play("sv\\system\\record_after_beep.wav", IvrInterface.AllDigits);
+ _ivr.Play("sv\\system\\record_after_beep.wav", "2");
+ string dtmf = _ivr.GetDtmf(4);
+ Console.WriteLine("Got DTMF: " + dtmf);
+ //_ivr.Sleep(5000);
+ //_ivr.Record("voicemails\\" + Guid.NewGuid() + ".wav", 60);
+ }
+ }
+}
Copied: freeswitch/branches/seven/contrib/vile (from rev 14471, freeswitch/trunk/contrib/vile)
Deleted: freeswitch/branches/seven/contrib/vile/fnd762863yG.html
Copied: freeswitch/branches/seven/contrib/vile/fnd762863yG.html (from rev 14471, freeswitch/trunk/contrib/vile/fnd762863yG.html) (0 => 14472)
--- freeswitch/branches/seven/contrib/vile/fnd762863yG.html (rev 0)
+++ freeswitch/branches/seven/contrib/vile/fnd762863yG.html 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+123
Deleted: freeswitch/branches/seven/contrib/vile/fsconsole.c
Copied: freeswitch/branches/seven/contrib/vile/fsconsole.c (from rev 14471, freeswitch/trunk/contrib/vile/fsconsole.c) (0 => 14472)
--- freeswitch/branches/seven/contrib/vile/fsconsole.c (rev 0)
+++ freeswitch/branches/seven/contrib/vile/fsconsole.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,496 @@
+/*
+ * FreeSWITCH Console
+ */
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef WIN32
+#include <winsock2.h>
+#else
+#define closesocket close
+#endif
+
+#ifdef _MSC_VER
+#include <io.h>
+#define write _write
+#else
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/errno.h>
+#include <unistd.h>
+#endif
+
+
+#define buflen 4096
+#define NUL '\0'
+
+char *app = "fsconsole";
+
+/* Defaults according to current (12-06-06) freeswitch.xml */
+char *hostname = "localhost";
+char *secret = "ClueCon";
+u_short port = 8021;
+
+/* Debug Level */
+int debug = 0;
+
+char *intro = "Welcome to the FreeSWITCH Console.\n";
+
+char buffer[buflen], *command;
+#ifdef WIN32
+SOCKET sd;
+#else
+int sd;
+#endif
+int flag, prompt, display;
+
+char *trim(char *str);
+void print_tokens(char *line);
+
+
+#ifdef WIN32
+typedef SOCKET socket_t;
+#else
+typedef int socket_t;
+#endif
+
+typedef enum {
+ STATUS_SUCCESS
+} status_t;
+
+static int socket_set_nonblock(socket_t sd)
+{
+#ifdef WIN32
+ u_long argp = 1;
+ if (ioctlsocket(sd, FIONBIO, &argp) == SOCKET_ERROR) {
+ return ((WSAGetLastError() == 0) ? STATUS_SUCCESS : WSAGetLastError());
+ }
+#else
+ flag = fcntl(sd, F_GETFL, 0);
+ flag |= O_NONBLOCK;
+ if (fcntl(sd, F_SETFL, flag) == -1) {
+ return errno;
+ }
+#endif
+ return STATUS_SUCCESS;
+}
+
+unsigned long getaddr(char *host_name)
+{
+ struct hostent *host;
+ unsigned long addr = 0;
+ struct in_addr address;
+
+ if (isalpha(host_name[0])) { /* host address is a name */
+ host = gethostbyname(host_name);
+ if(!host) {
+ return 0;
+ } else {
+ address = *(struct in_addr*)host->h_addr_list[0];
+ addr = address.s_addr;
+ }
+ }
+ else {
+ addr = inet_addr(host_name);
+ }
+
+ return addr;
+}
+
+int main(int argc, char *argv[])
+{
+
+ int len;
+ char contents[4096];
+
+ char whitespace[] = "\r";
+ char *token, *token_split, *subtoken_split;
+ char token_key[32], token_val[32], token_contents[4096], subtoken_contents[4096];
+ char subtoken_key[32], subtoken_val[32];
+
+ struct sockaddr_in sin = {0};
+
+ char cmd[256];
+
+ if (argv[1] && !strcmp(argv[1], "--help")) {
+ fprintf(stderr,"usage %s hostname port secret\n", argv[0]);
+ exit(0);
+ }
+
+ /* Hostname, Port and Secret defined on command line */
+ if (argc > 1) {
+ hostname = argv[1];
+ } else if (argc > 2) {
+ port = (u_short)atoi(argv[2]);
+ } else if (argc > 3) {
+ secret = argv[3];
+ }
+
+ /* Init socket descriptor */
+ sd = socket(AF_INET, SOCK_STREAM, 0);
+
+ /* Put Data intoN sockaddr_in struct */
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons(port);
+ sin.sin_addr.s_addr = getaddr(hostname);
+
+ /* Connect Socket */
+ if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
+ {
+ perror("connecting");
+ exit(1);
+ }
+
+ /* Set Socket Descriptor to Non-Blocking */
+ socket_set_nonblock(sd);
+
+ /* Set the prompt to non-blocking */
+ socket_set_nonblock(0);
+
+ /* Print the Introduction */
+ printf(intro);
+
+ /* First Prompt = No, would show before authentication.... */
+ prompt = 0;
+
+ /* While Program is Running... */
+ for(;;)
+ {
+ /* If Authenticated -- print the current version */
+ if (command)
+ {
+ if(!strcmp(command,"authenticated"))
+ {
+ /* Print the version */
+ printf("\nRunning Version:\n");
+ sprintf(buffer, "api version\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+
+ /* Authentication Complete -- set current command to blank */
+ command = "";
+ }
+ }
+
+ /* Prompt */
+ if (prompt)
+ {
+ printf("\n%s@%s> ", app, hostname);
+ prompt = 0;
+ }
+
+ memset(contents, 0, sizeof(buffer));
+ memset(buffer, 0, sizeof(buffer));
+ memset(cmd, 0, sizeof(cmd));
+
+ len = atoi(buffer);
+ if (len <= 0) len += buflen;
+ len = recv(sd, buffer, len, 0);
+
+ if (len > 0)
+ {
+ if (debug > 1)
+ printf("Received a response: len %d.\n", len);
+
+ if (debug > 2)
+ display = 1;
+
+ memset(contents, 0, sizeof(contents));
+ strncpy(contents, buffer, len);
+
+ /* Print Incoming input to screen if debug enabled or display is set */
+ if (debug > 0 || display == 1)
+ {
+ write(1,contents,len);
+
+ /* If not debugging, Prevent Display of Response */
+ if (debug < 2)
+ display = 0;
+
+ /* Response received -- Set the prompt */
+ prompt = 1;
+
+
+ }
+
+ /* print_tokens(contents); */
+ for (token=strtok(contents,whitespace); token !=NULL; token=strtok(NULL,whitespace))
+ {
+
+ /* Multiline requires \r, set back to \r
+ to properly execute the display of responses! UNF */
+ strcpy(whitespace, "\r");
+
+ sprintf(token_contents, "%s", token);
+
+ token_split = strtok(token_contents, ":");
+ sprintf(token_key, "%s", token_split);
+ token_split = strtok(NULL, "\n");
+ sprintf(token_val, "%s", token_split);
+ token_split = strtok(NULL, "\n");
+
+ token = strtok(NULL, "\n\n");
+
+ trim(token_val);
+
+ if (debug > 2)
+ printf("\nkey: '%s', val: '%s'\n", token_key, token_val);
+
+ if (strcmp(token_key, "Content-Type") == 0)
+ {
+ display = 1;
+
+ if (strcmp(token_val, "auth/request") == 0)
+ {
+
+ printf("\nAuthenticating...\n");
+
+ command = "auth";
+ sprintf(buffer, "auth %s\n\n", secret);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+
+ /* If not debugging, Prevent Display of Response */
+ if (debug < 2)
+ display = 0;
+
+ } else if (strcmp(token_val, "command/reply") == 0) {
+
+ /* Parse the reply */
+ sprintf(subtoken_contents, "%s", token_split);
+
+ subtoken_split = strtok(subtoken_contents, ":");
+ sprintf(subtoken_key, "%s", subtoken_split);
+ subtoken_split = strtok(NULL, "\n");
+ sprintf(subtoken_val, "%s", subtoken_split);
+ subtoken_split = strtok(NULL, "\n");
+
+ trim(subtoken_val);
+
+ if (debug > 2)
+ printf("subkey: '%s', subval: '%s'\n", subtoken_key, subtoken_val);
+
+ if (strcmp(subtoken_key, "Reply-Text") == 0)
+ {
+ if (strcmp(subtoken_val, "+OK accepted") == 0)
+ {
+ if (strcmp(command, "auth") == 0)
+ {
+ printf("Authentication Successful\n");
+ command = "authenticated";
+
+ /* Auth Command received -- Prompt and Display handled elsewhere */
+ prompt = 0;
+ display = 0;
+
+ /* Authentication required a \r, set back to \n
+ to properly execute the display of responses! */
+ strcpy(whitespace, "\n");
+
+ }
+ } else if (strncmp(subtoken_val, "-", 1) == 0) {
+ /* Received an error, print */
+
+ printf("\n%s\n", subtoken_val);
+ /* Since we received a response, set the prompt */
+ prompt = 1;
+
+ } else if (strncmp(subtoken_val, "+", 1) == 0) {
+ /* Received an uncoded OK, print */
+
+ printf("\n%s\n", subtoken_val);
+ /* Since we received a response, set the prompt */
+ prompt = 1;
+
+ }
+
+ /* || "ts" is a hack -- why? */
+ } else if (strcmp(subtoken_key, "") == 0 || strcmp(subtoken_key, "ts") == 0) {
+ printf("\n%s\n", subtoken_val);
+ /* Since we received a response, set the prompt */
+ prompt = 1;
+ }
+
+ } else if (strcmp(token_val, "api/response") == 0) {
+
+ /* Since we received an api response, display results */
+ if (command && strcmp(command,"authenticated"))
+ {
+ display = 1;
+ }
+
+ }
+ }
+
+ }
+
+ }
+
+ /* Get the command */
+ fgets(cmd, 254, stdin);
+
+ /* Received a Command */
+ if (strlen(cmd))
+ {
+
+ /* Received an Enter Only - Reset Prompt*/
+ if (strcmp(cmd, "\n") == 0) {
+ prompt = 1;
+ }
+
+ /* Drop the \n */
+ cmd[strlen(cmd) - 1] = 0;
+
+ /* If not debugging, Prevent Display of Response */
+ if (debug < 2)
+ display = 0;
+
+ if (strcmp(cmd, "exit") == 0 || strcmp(cmd, "quit") == 0) {
+ printf("Exiting.. goodbye.\n");
+ break;
+ } else if (strncmp(cmd, "event", 5) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strcmp(cmd, "noevents") == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "log", 3) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strcmp(cmd, "nolog") == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "api", 3) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "bgapi", 5) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "sendevent", 9) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "sendmsg", 7) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ sprintf(buffer, "%s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else if (strncmp(cmd, "help", 4) == 0 || strncmp(cmd, "?", 1) == 0) {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+ printf("\n- Console -\n");
+ printf("Valid Commands:\n\n");
+ printf("event [xml|plain] <list of events to log or all for all> - enable or disable events by class or all\n");
+ printf("noevents - disable all events that were previously enabled w/ event\n");
+ printf("nixevent <some_event> - command to allow 'events all' followed by 'nixevent <some_event>' to do all but <some_event>\n");
+ printf("log <level> - enable log output. Levels same as the console.conf values\n");
+ printf("nolog - disable log output previously enabled by the log command\n");
+ printf("api <command> <arg> - send an api command (blocking mode)\n");
+ printf("bgapi <command> <arg> - send an api command (non-blocking mode) this will let you execute a job in the background\n");
+ printf("sendevent <event-name> - send an event into the event system (multi line input for headers)\n");
+ printf("exit - close the fsconsole\n");
+
+ printf("\n- API - ");
+
+ /* Print the additional api commands available from console... */
+ sprintf(buffer, "api help\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+ } else {
+ if (debug > 2)
+ printf("Received Command: %s\n", cmd);
+
+
+ sprintf(buffer, "api %s\n\n", cmd);
+ write((int)sd, buffer, (unsigned int)strlen(buffer));
+
+ printf("\n");
+
+ }
+
+ }
+
+ /* 100% CPU fix */
+ usleep(1);
+
+ }
+
+ closesocket(sd);
+}
+
+char *trim(char *str)
+{
+ char *ibuf = str, *obuf = str;
+ int i = 0, cnt = 0;
+
+ /*
+ ** Trap NULL
+ */
+
+ if (str)
+ {
+ /* Remove leading spaces */
+ for (ibuf = str; *ibuf && isspace(*ibuf); ++ibuf)
+ ;
+ if (str != ibuf)
+ memmove(str, ibuf, ibuf - str);
+
+ /* Collapse embedded spaces */
+
+ while (*ibuf)
+ {
+ if (isspace(*ibuf) && cnt) {
+ ibuf++;
+ } else {
+
+ if (!isspace(*ibuf)) {
+ cnt = 0;
+ } else {
+ *ibuf = ' ';
+ cnt = 1;
+ }
+
+ obuf[i++] = *ibuf++;
+ }
+ }
+
+ obuf[i] = NUL;
+
+ /* Remove trailing spaces */
+ while (--i >= 0)
+ {
+ if (!isspace(obuf[i]))
+ break;
+ }
+
+ obuf[++i] = NUL;
+ }
+
+ return str;
+
+}
+
+
Copied: freeswitch/branches/seven/contrib/wasim (from rev 14471, freeswitch/trunk/contrib/wasim)
Deleted: freeswitch/branches/seven/contrib/wasim/cFS.pl
Copied: freeswitch/branches/seven/contrib/wasim/cFS.pl (from rev 14471, freeswitch/trunk/contrib/wasim/cFS.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/wasim/cFS.pl (rev 0)
+++ freeswitch/branches/seven/contrib/wasim/cFS.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+
+# Convergence FreeSwitch Tools Version 7.0 : AGI
+# (c) MMII Convergence. All rights reserved.
+# <info@convergence.pk> http://www.convergence.pk
+
+# This program is free software, distributed under the terms of
+# the GNU General Public License.http://www.gnu.org/licenses.html
+
+#$0 -t day -s 30 -e 20 -p 92 will get stats on daily basis for the last 30 to 20 hours for number beginning with 92
+# make sure end_timestamp is indexed in the db
+
+#use warnings;
+use strict;
+use DBI();
+use Getopt::Long;
+
+GetOptions (
+ 't|time:s' => \(my $t = 'hour'),
+ 's|start:i' => \(my $i = '24'),
+ 'e|end:i' => \(my $j = '0'),
+ 'p|prefix:s' => \(my $prefix = 'WHERE 1')
+);
+
+my $prefix = "WHERE destination_number like '$prefix%' " if ($prefix ne 'WHERE 1');
+
+my $dbh = DBI->connect("DBI:mysql:database=freeswitch;host=x.x.x.x","USER","PASS") or &die_call;
+
+my ($tcalls,$tans,$tmins,$tamins,$tacd,$tasr,$tbpct,$tbmins,$tpdd);
+while ($i > $j) {
+ &get_stats($i);
+ $i--;
+}
+$tasr = eval { ( sprintf("%.2f", $tans / $tcalls * 100)) };
+$tacd = eval { ( sprintf("%.2f", $tamins / $tans)) };
+$tbpct = eval { ( sprintf("%.2f", $tamins / $tmins * 100)) };
+$tpdd = eval { ( sprintf("%.2f", (($tbmins - $tamins) * 60) / $tans)) };
+
+print "\t\t\t ------ \t -----\t ------\t ------ \t ---- \t -----\t ------\n" if $tans;
+print "\t\t\ttotal: $tcalls\tanswer: $tans\tasr: $tasr%\tminute: $tamins\tacd: $tacd\tpdd: $tpdd\tbill%: $tbpct%\n" if $tans;
+
+exit;
+
+sub get_stats {
+ my ($calls,$ans,$mins,$amins,$acd,$asr,$bpct,$pdd,$bmins);
+ my $time = shift;
+ my $ntime = $time-1;
+ my $stm = "select count(*) as calls, sum(duration)/60 as mins from cdr $prefix and end_timestamp between
+ date_sub(now(), interval $time $t) and date_sub(now(), interval $ntime $t)";
+ my $res = &do_db($stm);
+ $calls = $res->{'calls'};
+ $tcalls = $tcalls + $calls;
+ $mins = sprintf("%.0f", $res->{'mins'});
+ $tmins = $tmins + $mins;
+
+ $stm = "select count(*) as ans, sum(billsec)/60 as amins, sum(duration)/60 as bmins,date_sub(now(),
+ interval $ntime $t) as start from cdr $prefix AND HANGUP_CAUSE='NORMAL_CLEARING'
+ and end_timestamp between date_sub(now(), interval $time $t) and date_sub(now(), interval $ntime $t)";
+ $res = &do_db($stm);
+ my $when = $res->{'start'};
+ $ans = $res->{'ans'};
+ $tans = $tans + $ans;
+ $amins = sprintf("%.0f", $res->{'amins'});
+ $tamins = $tamins + $amins;
+ $bmins = sprintf("%.0f", $res->{'bmins'});
+ $tbmins = $tbmins + $bmins;
+
+ $asr = eval { ( sprintf("%.2f", $ans / $calls * 100)) };
+ $acd = eval { ( sprintf("%.2f", $amins / $ans)) };
+ $bpct = eval { ( sprintf("%.2f", $amins / $mins * 100)) };
+ $pdd = eval { ( sprintf("%.2f", (($bmins - $amins) * 60) / $ans)) };
+
+ print "$time $when\tcalls: $calls\tanswer: $ans\tasr: $asr%\tminute: $amins\tacd: $acd\tpdd: $pdd\tbill%: $bpct%\n" if $ans;
+}
+
+sub do_db {
+ my $sql = shift;
+# print "$sql\n";
+ my $get = $dbh->prepare($sql) or die "Couldn't prepare statement: " . $dbh->errstr;
+ $get->execute();
+ my $res = $get->fetchrow_hashref();
+ $get->finish();
+ return $res;
+}
Deleted: freeswitch/branches/seven/contrib/wasim/cdrload.pl
Copied: freeswitch/branches/seven/contrib/wasim/cdrload.pl (from rev 14471, freeswitch/trunk/contrib/wasim/cdrload.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/wasim/cdrload.pl (rev 0)
+++ freeswitch/branches/seven/contrib/wasim/cdrload.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+#!/usr/bin/perl -w
+
+# Convergence FreeSwitch Tools Version 7.0 : AGI
+# (c) MMII Convergence. All rights reserved.
+# <info@convergence.pk> http://www.convergence.pk
+
+# This program is free software, distributed under the terms of
+# the GNU General Public License.http://www.gnu.org/licenses.html
+
+use strict;
+use DBI();
+
+my @cc = ("killall", "-HUP", "freeswitch");
+system(@cc) == 0
+ or die "$0: system @cc failed: $?";
+
+my $dbh = DBI->connect("DBI:mysql:database=DB;host=HOST","USER","PASSWORD")
+ or die "$0: Couldn't connect to database: " . DBI->errstr;
+
+my @LS = `ls -1t /usr/local/freeswitch/log/cdr-csv/Master.csv.*`;
+foreach my $line (@LS) {
+ chop($line);
+ my $stm = "load data local infile '$line' into table TABLE fields enclosed by '\"' terminated by ','";
+ my $ul = $dbh->prepare($stm)
+ or die "$0: Couldn't prepare statement $stm: " . $dbh->errstr;;
+ $ul->execute();
+ $ul->finish;
+ system("cat $line >> /usr/local/freeswitch/log/cdr-csv/FULL_Master.csv");
+ unlink $line;
+}
+
+exit;
Deleted: freeswitch/branches/seven/contrib/wasim/fshour.pl
Copied: freeswitch/branches/seven/contrib/wasim/fshour.pl (from rev 14471, freeswitch/trunk/contrib/wasim/fshour.pl) (0 => 14472)
--- freeswitch/branches/seven/contrib/wasim/fshour.pl (rev 0)
+++ freeswitch/branches/seven/contrib/wasim/fshour.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+
+# Convergence FreeSwitch Tools Version 7.0 : AGI
+# (c) MMII Convergence. All rights reserved.
+# <info@convergence.pk> http://www.convergence.pk
+
+# This program is free software, distributed under the terms of
+# the GNU General Public License.http://www.gnu.org/licenses.html
+
+# usage: $0 interval start end prefix
+# for example: $0 day 30 20 92 will get stats on daily basis for the last 30 to 30 hours for number beginning with 92
+# make sure end_timestamp is indexed in the db
+
+#use warnings;
+my $debug=0;
+use strict;
+use DBI();
+use Getopt::Long;
+
+GetOptions (
+ 't|time:s' => \(my $t = 'hour'),
+ 's|start:i' => \(my $i = '24'),
+ 'e|end:i' => \(my $j = '0'),
+ 'p|prefix:s' => \(my $p = 'WHERE 1'),
+ 'n|notprefix:s' => \(my $n = 'AND 1'),
+ 'd|date:s' => \(my $d = 'NOW()')
+);
+
+$p = "WHERE destination_number like '$p%' " if ($p ne 'WHERE 1');
+$n = "AND destination_number not like '$n%' " if ($n ne 'AND 1');
+my $dbh = DBI->connect("DBI:mysql:database=freeswitch;host=x.x.x.x","USER","PASS") or &die_call;
+
+my ($tcalls,$tans,$tmins,$tamins,$tacd,$tasr,$tbpct,$tbmins,$tpdd);
+
+while ($i > $j) {
+ &get_stats($d,$i);
+ $i--;
+}
+$tasr = eval { ( sprintf("%.2f", $tans / $tcalls * 100)) };
+$tacd = eval { ( sprintf("%.2f", $tamins / $tans)) };
+$tbpct = eval { ( sprintf("%.2f", $tamins / $tmins * 100)) };
+$tpdd = eval { ( sprintf("%.2f", (($tbmins - $tamins) * 60) / $tans)) };
+
+print "\t\t\t ------ \t -----\t ------\t ------ \t ---- \t -----\t ------\n" if $tans;
+print "\t\t\ttotal: $tcalls\tanswer: $tans\tasr: $tasr%\tminute: $tamins\tacd: $tacd\tpdd: $tpdd\tbill%: $tbpct%\n" if $tans;
+
+exit;
+
+sub get_stats {
+ my $x = shift;
+ my $i = shift;
+ my $j = $i-1;
+ my ($calls,$ans,$mins,$amins,$acd,$asr,$bpct,$pdd,$bmins);
+ my $stm = "SELECT COUNT(*) AS calls, SUM(duration)/60 AS mins FROM cdr $p $n AND end_timestamp BETWEEN DATE_SUB($d, INTERVAL $i $t) AND DATE_SUB($d, INTERVAL $j $t)";
+ my $res = &do_db($stm);
+ $calls = $res->{'calls'};
+ $tcalls = $tcalls + $calls;
+ $mins = sprintf("%.0f", $res->{'mins'});
+ $tmins = $tmins + $mins;
+
+ $stm = "SELECT COUNT(*) AS ans, SUM(billsec)/60 AS amins, SUM(duration)/60 AS bmins, DATE_SUB($d, INTERVAL $i $t) AS start FROM cdr $p $n AND HANGUP_CAUSE='NORMAL_CLEARING' AND end_timestamp BETWEEN DATE_SUB($d, INTERVAL $i $t) AND DATE_SUB($d, INTERVAL $j $t)";
+ $res = &do_db($stm);
+ my $when = $res->{'start'};
+ $ans = $res->{'ans'};
+ $tans = $tans + $ans;
+ $amins = sprintf("%.0f", $res->{'amins'});
+ $tamins = $tamins + $amins;
+ $bmins = sprintf("%.0f", $res->{'bmins'});
+ $tbmins = $tbmins + $bmins;
+
+ $asr = eval { ( sprintf("%.2f", $ans / $calls * 100)) };
+ $acd = eval { ( sprintf("%.2f", $amins / $ans)) };
+ $bpct = eval { ( sprintf("%.2f", $amins / $mins * 100)) };
+ $pdd = eval { ( sprintf("%.2f", (($bmins - $amins) * 60) / $ans)) };
+
+ print "$i $when\tcalls: $calls\tanswer: $ans\tasr: $asr%\tminute: $amins\tacd: $acd\tpdd: $pdd\tbill%: $bpct%\n" if $ans;
+}
+
+sub do_db {
+ my $sql = shift;
+ print "$sql\n" if $debug;
+ my $get = $dbh->prepare($sql) or die "Couldn't prepare statement: " . $dbh->errstr;
+ $get->execute();
+ my $res = $get->fetchrow_hashref();
+ $get->finish();
+ return $res;
+}
Modified: freeswitch/branches/seven/debian/changelog (14471 => 14472)
--- freeswitch/branches/seven/debian/changelog 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/changelog 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,136 @@
+freeswitch (1.0.3-1) unstable; urgency=low
+
+ * build: add targets cd-sounds[-install] and cd-moh[-install] for 48k sounds (r:11151)
+ * build: autoconf detect odbc library (FSBUILD-8)
+ * build: fix sound install on windows build (r:11635,11638)
+ * build: fix configure --sysconfdir (FSBUILD-84)
+ * build: fix uclibc build (MODLANG-99)
+ * build: fix adduser in debian (FSBUILD-122, FSBUILD-102)
+ * core: fix buffering issues (r:11101,11145,11152-11157,11162,11191,11200)
+ * core: fix c leg no hangup when converting attended to blind transfer before b leg answers (MODENDP-165/r:11061)
+ * core: fix codec and media handling issues (r:11104)
+ * core: fix double close of file handles and add recording of native files (r:11108-11113,11482,11483)
+ * core: fix file resampling issue (r:11090)
+ * core: fix incorrect call progress timestamps in timetable (r:11186-11187/FSCORE-268)
+ * core: fix media handling issues (r:11079-11082)
+ * core: fix multiple 2833 dtmf handling issues (r:11149,11261,11262,11266,11293,11294,11338/FSCORE-266,FSCORE-273)
+ * core: send more event types verbos bridge,unbridge,park,unpark (r:11097-11098)
+ * core: Prevent media setup on failed originates (r:11462/FSCORE-279)
+ * core: fix recorded soundfiles had random data at end of file (r:11491/MODAPP-205)
+ * core: fix user for windows service (r:11538/FSCORE-277)
+ * core: modify variable expansion code to expand in more places and to fix potential security issue from injecting variables (r:11569,11570)
+ * core: look for soundfiles in more locations based on rate (r:11601/MODFORM-23)
+ * core: state machine veto behavior changed (r:11610)
+ * core: add enable_file_write_buffering variable (r:11677)
+ * core: fix garbled audio on media bug during bridge using stateful codecs (FSCORE-288)
+ * core: fix tone detect running multiple bugs when detecting multiple tones
+ * core: add {instant_ringback=true} to make ringback not wait for indication to generate ringback
+ * core: fix segfault from race condition on multiple reloadxml calls (MOODAPP-211)
+ * core: modify xml locking so phrases do not lock the xml for the duration of playing them
+ * core: replace resampler with the speexdsp resampler
+ * core: fix windows calling convention on threads launched that return a value to fix shutdown segfault (FSCORE-298)
+ * core: do not auto-export origination_caller_id_* to avoid confusion (r:12052)
+ * core: API visibility support (GCC/SUNCC) (FSCORE-264)
+ * core: fix leak in exposed event class serialize method (r:12068)
+ * core: add volume as possible return value from input callback on embedded languages (r:12114)
+ * core: add resampler to seech handles (r:12141)
+ * core: add api.getTime to embedded languages (r:12149)
+ * freeswitch: allow you to specify -htdocs dir at runtime. (r:11614)
+ * fs_cli: add "debug" command to change the esl debug level at runtime (r:11057)
+ * iksemel: update to 1.3 (r:11645)
+ * libesl: fix disconnect failure (r:11078,11083)
+ * libesl: fix solaris build (r:11067,11068)
+ * libesl: add c++ wrapper and swigged wrappers for multiple scripting languages
+ * libg722_1: fix dct4.h code generator to include the "f" (r:11188-11189,11367)
+ * libilbc: update to new library from Steve Underwood
+ * mod_amrwb: add amr wideband passthrough codec (r:11971)
+ * mod_cepstral: fix failure return code handling (MODASRTTS-9)
+ * mod_conference: add 'conference xml_list' and 'conference [conf_name] xml_list' (r:11062-11063)
+ * mod_conference: make conference verbose-events param to control if events have all the channel data or not (r:11073-11077)
+ * mod_conference: add MINTWO flag to end conference when down to 1 participant (r:11523)
+ * mod_conference: refactor conference record function (r:11626)
+ * mod_conference: add conference list summary command (MODAPP-197)
+ * mod_conference: fix Deadlock or coredump on conference commands play, transfer (MODAPP-209)
+ * mod_dahdi_codec: added (MODCODEC-7)
+ * mod_dialplan_xml: make previous auto hunt feature optional and off by defaule use auto_hunt=true session or global variable to enable (r:12144)
+ * mod_dptools: Add failure_causes channel variable (r:12058)
+ * mod_easyroute: add configuration file example for custom-query (r:11055)
+ * mod_easyroute: add custom-query configuration option (r:11054)
+ * mod_easyroute: fix build error when not configured for odbc (r:11478)
+ * mod_easyroute: fix memory leak (r:11611)
+ * mod_erlang_event: add ability to spawn a process (module/function) outbound on a specified node. (r:11460,11477)
+ * mod_erlang_event: Fix some issues with standing up a new outbound listener and cleaning up after a failed session (r:11479)
+ * mod_erlang_event: Fix setting up a listener for an outbound session if one doesn't already exist (r:11488)
+ * mod_erlang_event: add "erlang" fscli command (r:11488)
+ * mod_erlang_event: Monitor spawned outbound processes for premature exits (r:11489)
+ * mod_erlang_event: Allow the event encoding strategy to be configurable; choices are string or binary (r:11495)
+ * mod_erlang_event: Allow certain tuple elements to be binaries or strings, to reduce conversion requirements on the erlang side (r:11496)
+ * mod_erlang_event: Support sending a message to a registered process to request a pid (when spawning won't cut it) (r:11499)
+ * mod_erlang_event: Ensure events received while a pid session is being created aren't discarded but are queued instead (r:11500)
+ * mod_erlang_event: Add freeswitch.erl - An erlang module to make talking to mod_erlang_event more painless (r:11525)
+ * mod_erlang_event: use rpc:call instead of spawn and to make the registered process argument to handlecall optional (r:11542)
+ * mod_event_socket: add ability to use a comma sep list of events on event-sink create-listener (r:11056)
+ * mod_event_socket: add debug logging to event-sink (r:11060)
+ * mod_event_socket: fix race condition (r:11680,12146)
+ * mod_dptools: add all modifier to break command (r:11557,11558)
+ * mod_dptools: add sound_test application (r:11658)
+ * mod_fax: Dont hangup after sending/receiving faxes
+ * mod_fifo: pause media bugs while not in a bridge (r:11466,11490)
+ * mod_fifo: allow unpark during chime list playing (r:11555/MODAPP-206)
+ * mod_fifo: fix outbound fifos doesn't check if the consumer is in the fifo in question. (r:11561/MODAPP-207)
+ * mod_fifo: Fix segfault when no argument were supplied to fifo_member call (MODAPP-210)
+ * mod_lcr: added (r:11180,11184,11532,11609)
+ * mod_limit: fix memory corruption caused by race condition when using limit hash (r:11070-11071)
+ * mod_limit: Fix transfer bug, fix leak and make the channel hangup if the extension is \!hangup_cause (r:11604,11932)
+ * mod_limit: add write different channel variables per realm_id (r:11608)
+ * mod_limit: Make max argument optional on the limit app, set the limit_usage variable to current count after inserting call in the db (r:11955)
+ * mod_lua: Create empty argv table when no args are passed to a Lua script (r:11559)
+ * mod_lua: use dll for lua windows build (FSCORE-299)
+ * mod_openmrcp: removed (r:11176-11179)
+ * mod_opal: added
+ * mod_pocketsphinx: fix leak (r:11974)
+ * mod_portaudio: fix stuck channels on outbound calls (r:11160,11470,11471,11472,11475,11476,11485)
+ * mod_python: fix build when site dir is not /usr/lib/python2.4 (r:12070)
+ * mod_say_en: add short form date/time (MODAPP-180)
+ * mod_sofia: add auto-rtp-bugs profile option to make rtp bug compensation configurable (r :11146-11147)
+ * mod_sofia: add support in sdp for a=maxptime (r:11103)
+ * mod_sofia: fix codec change race condition (r:11143)
+ * mod_sofia: fix notify event wasn't allowing content-length 0 (r:11106/MODENDP-167)
+ * mod_sofia: fix sending extra sdp in 200 OK when using 100rel in violation of sdp o/a protocol draft-ietf-sipping-sip-offeranswer-10 (r:11088)
+ * mod_sofia: fix sip_auto_answer=true (r:11069)
+ * mod_sofia: improve outbound registration error message (r:11059)
+ * mod_sofia: reset media timeout on re-invite (r:11161)
+ * mod_sofia: fix segfault due to missing contact header in invite (r:11463/MODENDP-177)
+ * mod_sofia: allow <params> tag in gateways as well as <variables> with direction inbound/outbound (default both) and call counter (r:11468)
+ * mod_sofia: add support or SLA, works with Polycom and Snom(Sylantro mode). (r:11562/MODENDP-179)
+ * mod_sofia: tolerate missing user in the request uri (r:11636)
+ * mod_sofia: Add purpose=gateways and profile=[name] so xml_curl requests make sense (MDXMLINT-46)
+ * mod_sofia: Add disable-srv and disable-naptr params to sip profiles (default false) (MODENDP-183)
+ * mod_sofia: add outbound-proxy param (MODENDP-184)
+ * mod_sofia: fix segfault with stun-enabled=false (SFSIP-120)
+ * mod_sofia: Profile Name in Expire Event is incorrect (MODENDP-185)
+ * mod_sofia: add "scrooge" mode to "inbound-codec-negotiation" (r:11881)
+ * mod_sofia: Add context to reconfig_sofia (r:12080)
+ * mod_sofia: fix segfault when calling from a Cisco 7940 using bypass_media (FSCORE-301)
+ * mod_sofia: ilbc to default to 30 if no mode= fmtp is defined on the inbound (r:12110)
+ * mod_sofia: fix challenge-realm (r:12113)
+ * mod_sofia: Segmentation fault when running killgw command on sofia profile without specifying a gateway (MODENDP-189)
+ * mod_sofia: gateways will inherit the context from its parent unless manually provided (r:12138)
+ * mod_sndfile: Add IMA ADPCM support (MODFORM-22)
+ * mod_spidermonkey: fix loading of spidermonkey modules (r:11084-11085)
+ * mod_spidermonkey: block some unwanted behaviours in session.originate
+ * mod_spidermonkey_socket: fix gc blocking (MODLANG-97)
+ * mod_xml_rpc: fixed authentication using @domain syntax (r:11064)
+ * mod_xml_rpc: fix http content types sent in responses (r:11099,11148,11150)
+ * mod_voicemail: voicemail insert into the proper fields (MODAPP-190)
+ * mod_voipcodecs: add G.726 24k (r:12083)
+ * sofia-sip: update to current sofia-sip repository
+ * spandsp: sync to latest snapshot and fix windows build
+ * speex: updated to 1.2rc1
+ * sqlite: fix random assert on windows (FSCORE-292)
+
+ -- Mike Jerris <mike@jerris.com> Mon, 18 Feb 2009 17:39:00 -0500
+
freeswitch (1.0.2-1) unstable; urgency=low
* all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36)
Modified: freeswitch/branches/seven/debian/control (14471 => 14472)
--- freeswitch/branches/seven/debian/control 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/control 2009-08-09 18:53:22 UTC (rev 14472)
@@ -2,7 +2,7 @@
Maintainer: Michal Bielicki <michal.bielicki@voiceworks.pl>
Section: net
Priority: extra
-Build-Depends: debhelper (>= 5), fakeroot, wget, automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-openssl-dev|libcurl4-openssl-dev, libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev, libdb-dev, libgnutls-dev, libtiff4-dev
+Build-Depends: debhelper (>= 5), fakeroot, wget, automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-openssl-dev|libcurl4-openssl-dev, libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev, libdb-dev, libgnutls-dev, libtiff4-dev, python
Standards-Version: 3.7.3
Package: freeswitch
Modified: freeswitch/branches/seven/debian/copyright (14471 => 14472)
--- freeswitch/branches/seven/debian/copyright 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/copyright 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,10 +1,13 @@
This package was debianized by Michal Bielicki
<michal.bielicki@voiceworks.pl> on Now 25, 2007.
- The source was downloaded from http://www.freewitch.org.
+The current Debian maintainer is Nicholas Amorim <nicholas@montrealconsultoria.com.br>
+
+The source was downloaded from http://www.freewitch.org/
+
Upstream authors:
Anthony Minessale II <anthmct@yahoo.com>
-Portions created by the Initial Developer are Copyright (C)
+Portions created by the Initial Developer are Copyright (C) 2006-2009
the Initial Developer. All Rights Reserved.
The PRIMARY AUTHORS are (and/or have been):
Modified: freeswitch/branches/seven/debian/freeswitch-dev.install (14471 => 14472)
--- freeswitch/branches/seven/debian/freeswitch-dev.install 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/freeswitch-dev.install 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,5 +1,6 @@
opt/freeswitch/lib/*.a
opt/freeswitch/lib/*.la
+opt/freeswitch/lib/pkgconfig/spandsp.pc
opt/freeswitch/mod/*.a
opt/freeswitch/mod/*.la
-opt/freeswitch/include/*.h
+opt/freeswitch/include/*
Modified: freeswitch/branches/seven/debian/freeswitch.conffiles (14471 => 14472)
--- freeswitch/branches/seven/debian/freeswitch.conffiles 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/freeswitch.conffiles 2009-08-09 18:53:22 UTC (rev 14472)
@@ -6,15 +6,22 @@
/opt/freeswitch/conf/voicemail.tpl
/opt/freeswitch/conf/freeswitch.xml
/opt/freeswitch/conf/extensions.conf
+/opt/freeswitch/conf/zt.conf
+/opt/freeswitch/conf/tones.conf
+/opt/freeswitch/conf/pika.conf
+/opt/freeswitch/conf/notify-voicemail.tpl
+/opt/freeswitch/conf/m3ua.conf
/opt/freeswitch/conf/dialplan/public.xml
/opt/freeswitch/conf/dialplan/default.xml
/opt/freeswitch/conf/dialplan/features.xml
/opt/freeswitch/conf/dialplan/default/00_pizza_demo.xml
+/opt/freeswitch/conf/dialplan/default/01_example.com.xml
/opt/freeswitch/conf/dialplan/default/99999_enum.xml
/opt/freeswitch/conf/dialplan/public/00_inbound_did.xml
/opt/freeswitch/conf/sip_profiles/external.xml
/opt/freeswitch/conf/sip_profiles/internal/example.xml
/opt/freeswitch/conf/sip_profiles/internal.xml
+/opt/freeswitch/conf/sip_profiles/internal-ipv6.xml
/opt/freeswitch/conf/sip_profiles/external/example.xml
/opt/freeswitch/conf/directory/default/1007.xml
/opt/freeswitch/conf/directory/default/1001.xml
@@ -38,8 +45,10 @@
/opt/freeswitch/conf/directory/default/1006.xml
/opt/freeswitch/conf/directory/default/1016.xml
/opt/freeswitch/conf/directory/default/1012.xml
+/opt/freeswitch/conf/directory/default/example.com.xml
/opt/freeswitch/conf/directory/default.xml
/opt/freeswitch/conf/autoload_configs/ivr.conf.xml
+/opt/freeswitch/conf/autoload_configs/shout.conf.xml
/opt/freeswitch/conf/autoload_configs/voicemail.conf.xml
/opt/freeswitch/conf/autoload_configs/switch.conf.xml
/opt/freeswitch/conf/autoload_configs/syslog.conf.xml
@@ -69,5 +78,12 @@
/opt/freeswitch/conf/autoload_configs/console.conf.xml
/opt/freeswitch/conf/autoload_configs/timezones.conf.xml
/opt/freeswitch/conf/autoload_configs/fax.conf.xml
+/opt/freeswitch/conf/autoload_configs/acl.conf.xml
+/opt/freeswitch/conf/autoload_configs/lcr.conf.xml
+/opt/freeswitch/conf/autoload_configs/opal.conf.xml
+/opt/freeswitch/conf/autoload_configs/easyroute.conf.xml
+/opt/freeswitch/conf/autoload_configs/memcache.conf.xml
+/opt/freeswitch/conf/autoload_configs/unicall.conf.xml
+/opt/freeswitch/conf/autoload_configs/python.conf.xml
/opt/freeswitch/conf/jingle_profiles/server.xml
/opt/freeswitch/conf/jingle_profiles/client.xml
Modified: freeswitch/branches/seven/debian/freeswitch.install (14471 => 14472)
--- freeswitch/branches/seven/debian/freeswitch.install 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/freeswitch.install 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,6 +1,9 @@
opt/freeswitch/htdocs/*
opt/freeswitch/bin/freeswitch
opt/freeswitch/bin/fs_cli
+opt/freeswitch/bin/gentls_cert
+opt/freeswitch/bin/fsxs
+opt/freeswitch/bin/fs_ivrd
opt/freeswitch/bin/scripts/*
opt/freeswitch/lib/libfreeswitch*.so*
opt/freeswitch/lib/libopenzap*.so*
@@ -14,6 +17,8 @@
opt/freeswitch/mod/mod_limit.so*
opt/freeswitch/mod/mod_ilbc.so*
opt/freeswitch/mod/mod_speex.so*
+opt/freeswitch/mod/mod_siren.so*
+opt/freeswitch/mod/mod_celt.so*
opt/freeswitch/mod/mod_esf.so*
opt/freeswitch/mod/mod_logfile.so*
opt/freeswitch/mod/mod_syslog.so*
@@ -23,19 +28,20 @@
opt/freeswitch/mod/mod_enum.so*
opt/freeswitch/mod/mod_fifo.so*
opt/freeswitch/mod/mod_voipcodecs.so*
-opt/freeswutch/mod/mod_speex.so*
+opt/freeswitch/mod/mod_speex.so*
opt/freeswitch/mod/mod_dialplan*.so*
opt/freeswitch/mod/mod_dingaling.so*
opt/freeswitch/mod/mod_iax.so*
opt/freeswitch/mod/mod_portaudio.so*
opt/freeswitch/mod/mod_sofia.so*
opt/freeswitch/mod/mod_openzap.so
-opt/freeswitch/mod/ozmod_analog_em.so
-opt/freeswitch/mod/ozmod_analog.so
-opt/freeswitch/mod/ozmod_isdn.so
-opt/freeswitch/mod/ozmod_ss7_boost.so
-opt/freeswitch/mod/ozmod_wanpipe.so
-opt/freeswitch/mod/ozmod_zt.so
+opt/freeswitch/mod/ozmod_analog_em.so*
+opt/freeswitch/mod/ozmod_analog.so*
+opt/freeswitch/mod/ozmod_isdn.so*
+opt/freeswitch/mod/ozmod_skel.so*
+opt/freeswitch/mod/ozmod_ss7_boost.so*
+opt/freeswitch/mod/ozmod_wanpipe.so*
+opt/freeswitch/mod/ozmod_zt.so*
opt/freeswitch/mod/mod_event_*.so*
opt/freeswitch/mod/mod_native_file.so*
opt/freeswitch/mod/mod_sndfile.so*
@@ -50,15 +56,24 @@
opt/freeswitch/conf/web-vm.tpl
opt/freeswitch/conf/tetris.ttml
opt/freeswitch/conf/fur_elise.ttml
+opt/freeswitch/conf/openzap.conf
+opt/freeswitch/conf/wanpipe.conf
+opt/freeswitch/conf/zt.conf
+opt/freeswitch/conf/tones.conf
+opt/freeswitch/conf/pika.conf
+opt/freeswitch/conf/notify-voicemail.tpl
+opt/freeswitch/conf/m3ua.conf
opt/freeswitch/conf/dialplan/public.xml
opt/freeswitch/conf/dialplan/default.xml
opt/freeswitch/conf/dialplan/features.xml
opt/freeswitch/conf/dialplan/default/00_pizza_demo.xml
+opt/freeswitch/conf/dialplan/default/01_example.com.xml
opt/freeswitch/conf/dialplan/default/99999_enum.xml
opt/freeswitch/conf/dialplan/public/00_inbound_did.xml
opt/freeswitch/conf/sip_profiles/external.xml
opt/freeswitch/conf/sip_profiles/internal/example.xml
opt/freeswitch/conf/sip_profiles/internal.xml
+opt/freeswitch/conf/sip_profiles/internal-ipv6.xml
opt/freeswitch/conf/sip_profiles/external/example.xml
opt/freeswitch/conf/directory/default/1007.xml
opt/freeswitch/conf/directory/default/1001.xml
@@ -82,11 +97,14 @@
opt/freeswitch/conf/directory/default/1006.xml
opt/freeswitch/conf/directory/default/1016.xml
opt/freeswitch/conf/directory/default/1012.xml
+opt/freeswitch/conf/directory/default/example.com.xml
opt/freeswitch/conf/directory/default.xml
opt/freeswitch/conf/voicemail.tpl
opt/freeswitch/conf/freeswitch.xml
opt/freeswitch/conf/extensions.conf
+opt/freeswitch/conf/autoload_configs/openzap.conf.xml
opt/freeswitch/conf/autoload_configs/ivr.conf.xml
+opt/freeswitch/conf/autoload_configs/shout.conf.xml
opt/freeswitch/conf/autoload_configs/voicemail.conf.xml
opt/freeswitch/conf/autoload_configs/switch.conf.xml
opt/freeswitch/conf/autoload_configs/syslog.conf.xml
@@ -116,5 +134,13 @@
opt/freeswitch/conf/autoload_configs/console.conf.xml
opt/freeswitch/conf/autoload_configs/timezones.conf.xml
opt/freeswitch/conf/autoload_configs/fax.conf.xml
+opt/freeswitch/conf/autoload_configs/fifo.conf.xml
+opt/freeswitch/conf/autoload_configs/acl.conf.xml
+opt/freeswitch/conf/autoload_configs/lcr.conf.xml
+opt/freeswitch/conf/autoload_configs/opal.conf.xml
+opt/freeswitch/conf/autoload_configs/easyroute.conf.xml
+opt/freeswitch/conf/autoload_configs/memcache.conf.xml
+opt/freeswitch/conf/autoload_configs/unicall.conf.xml
+opt/freeswitch/conf/autoload_configs/python.conf.xml
opt/freeswitch/conf/jingle_profiles/server.xml
opt/freeswitch/conf/jingle_profiles/client.xml
Modified: freeswitch/branches/seven/debian/postinst (14471 => 14472)
--- freeswitch/branches/seven/debian/postinst 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/postinst 2009-08-09 18:53:22 UTC (rev 14472)
@@ -25,8 +25,8 @@
adduser --disabled-password --quiet --system \
--home /opt/freeswitch \
--gecos "FreeSwitch Voice Platform" --ingroup daemon \
- --add_extra_groups audio \
freeswitch
+ adduser freeswitch audio
fi
mkdir -p /opt/freeswitch
Modified: freeswitch/branches/seven/debian/rules (14471 => 14472)
--- freeswitch/branches/seven/debian/rules 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/debian/rules 2009-08-09 18:53:22 UTC (rev 14472)
@@ -15,7 +15,7 @@
applications/mod_rss applications/mod_voicemail applications/mod_fsv \
applications/mod_fax
export ASR_TTS_MODULES=
-export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex codecs/mod_voipcodecs
+export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex codecs/mod_voipcodecs codecs/mod_siren codecs/mod_celt
export DIALPLANS_MODULES=dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml
export DIRECTORIES_MODULES=
export DOTNET_MODULES=
@@ -115,31 +115,15 @@
binary-arch: build install
dh_testdir
dh_testroot
-# dh_installchangelogs
-# dh_installdocs
-# dh_installexamples
-# dh_install
-# dh_installmenu
-# dh_installdebconf
-# dh_installlogrotate
-# dh_installemacsen
-# dh_installcatalogs
-# dh_installpam
-# dh_installmime
+ dh_installdocs
+ dh_installchangelogs
dh_installinit --sourcedir=debian/tmp
-# dh_installcron
-# dh_installinfo
-# dh_undocumented
-# dh_installman
cp debian/monit/freeswitch.monitrc debian/freeswitch/etc/monit/freeswitch.monitrc
dh_install --sourcedir=debian/tmp
dh_link
dh_strip --dbg-package=freeswitch
dh_compress
dh_fixperms --exclude /opt/freeswitch/conf
-# dh_perl
-# dh_python
-# dh_makeshlibs
dh_installdeb
dh_shlibdeps --exclude=/opt/freeswitch
dh_gencontrol
Modified: freeswitch/branches/seven/docs/AUTHORS (14471 => 14472)
--- freeswitch/branches/seven/docs/AUTHORS 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/docs/AUTHORS 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,11 +1,11 @@
The Initial Developer of the Original Code is
-Anthony Minessale II <anthmct@yahoo.com>
+Anthony Minessale II <anthm@freeswitch.org>
Portions created by the Initial Developer are Copyright (C)
the Initial Developer. All Rights Reserved.
The PRIMARY AUTHORS are (and/or have been):
- Anthony Minessale II <anthmct@yahoo.com> - Primary developer of all core components
+ Anthony Minessale II <anthm@freeswitch.org> - Primary developer of all core components
and many of the included modules. Much of freeswitch is based on his work.
Michael Jerris <mike@jerris.com> - Windows porter and responsible for the
Modified: freeswitch/branches/seven/docs/ChangeLog (14471 => 14472)
--- freeswitch/branches/seven/docs/ChangeLog 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/docs/ChangeLog 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,803 @@
+freeswitch (1.0.4)
+
+ add: TextMate bundle for FreeSWITCH - thanks mrene (r:12559-12560)
+ add: ZRTP Support please download your SDK from http://www.zfone.com and use build/buildzrtp.sh to build the lib. (r:13406)
+ add: gdb helpers to .gdbinit
+ all: numerous code cleanups, removal of unused variables
+ all: update numerous Doxygen comments
+ build: fix mod_flite (FSBUILD-126/r:12153)
+ build: fix getlib.sh curl/wget detection (12175)
+ build: add msvc 2005 project files (r:12197)
+ build: rename spandsp project files windows (r:12195)
+ build: fix spandsp windows build, msvc 2005 (r:12199-12202)
+ build: merge x64 build for msvc9 (r:12207)
+ build: add libtiff auto-download to msvc build (r:12212)
+ build: update to match spandsp api (FSBUILD-129/r:12214)
+ build: inital work on x64 windows build (FSBUILD-125/r:12215)
+ build: fix spandsp msvc build issues (r:12218-12220,12223)
+ build: fix msvc configuration manager for x64 targets in both 2008 sln files (r:12227)
+ build: use compiler intrinsics for windows x64 build (FSBUILD-131/r:12245)
+ build: fix version generator on windows (FSBUILD-115/FSBUILD-69/r:12247)
+ build: fix various msvc build issues (r:12272-12276)
+ build: silence nuisance sun cc warnings (r:12462)
+ build: updated windows projects for flite (FSBUILD-128/FSBUILD-133/r:12477)
+ build: download flite from right tarball location (FSBUILD-135/r:12482)
+ build: rework Windows build for pocketsphinx 5.1 (MODASRTTS-13/r:12483,12541)
+ build: fix automake 1.7 build (r:12487)
+ build: build path cleanups (FSBUILD-130/r:12490)
+ build: fix rebuild every time on msvc 2008 non team editions (FSBUILD-132/r:12492)
+ build: add skypiax to sln file and fix some warnings (r:12502)
+ build: fixed openzap.conf issue in deb package (r:12506)
+ build: fix rlim_t build on Mac (FSCORE-325/r:12533)
+ build: Solaris doesn't define RLIMIT_NPROC (FSCORE-326/r:12534)
+ build: removal of file reference for flite (FSBUILD-139/r:12540)
+ build: integrate mod_erlang_event into the buildsystem (FSBUILD-142/r:12587)
+ build: Fix FreeBSD build (r:12678)
+ build: fix libsoundtouch build dependencies after a configure failure (MODAPP-243/r:12783)
+ build: fix odbc detection to not try to use odbc when no headers are installed (r:12788)
+ build: add build of fs_ivrd (r:12843)
+ build: sphinx downloads for windows (FSBUILD-146/r:12853)
+ build: Build fails at bootstrap with libtool 2.2.6a (FSBUILD-82/r:12899)
+ build: add python build dependency to debian package build (FSBUILD-145/r:12920)
+ build: add libtool major version detection to configure in prep for supporting both libtool 2.x and 1.5.x at the same time (r:12922,12926-27)
+ build: fix older gcc build (FSBUILD-150/r:12924)
+ build: Add a fallback check in case libtool is not yet available in the builddir (get the version from build/config/ltmain.sh instead). print an error message and exit configure if that fails too (r:12933)
+ build: Add mod_memcache (commented) to modules.conf.in (r:12955)
+ build: make libtool version detection more robust (r:12979)
+ build: we need DYNAMIC_LIB_EXTEN for mod_perl and others (r:13023)
+ build: add mod_say_ru to modules.conf.in (r:13037)
+ build: bump sounds version (r:13040)
+ build: use different version file for moh version (r:13093)
+ build: de-couple version numbers and builds of sound files and moh files (FSBUILD-153/r:13096)
+ build: use sound_version.txt and moh_version.txt to determine sound file version on windows (FSBUILD-152/r:13097)
+ build: use in tree libtiff for msvc build and fix some header generation checks (r:13150)
+ build: clean esl on make current (r:13204,13205)
+ build: fix warning-as-error that stops MSVC from building solution (FSCORE-367/r:13301)
+ build: fix MSVC build issue from r13294 (FSBUILD-159/r:13302)
+ build: remove broken code analysis test (r:13364)
+ build: cleanup msvc code analysis warnings (r:13366)
+ build: Add mod_file_string to build + misc cleaning and correction (FSBUILD-158/r:13367)
+ build: add new files to debian package build (FSBUILD-148/r:13368)
+ build: fix mod_file_string dependencies on windows (r:13370)
+ build: fix mod_pocketsphinx build error (JANITOR-1/r:13372)
+ build: fix PTHREAD_MUTEX_RECURSIVE detection on SUSE 10 (r:13386,13390)
+ build: remove regression caused by r13362 (r:13401)
+ build: add mod_nibblebill (r:13462)
+ build: fix msvc build (r:13467/FSBUILD-165)
+ build: add siren to the default build and install (r:13470)
+ build: add upnp to windows build (r:13535)
+ build: fix msvc 64 bit build regression from upnp build (r:13538/FSBUILD-167)
+ build: Check for ifaddrs.h before including it (r:13600/FSBUILD-168)
+ build: fix jobserver unavailable bug in make -j (r:13623/FSBUILD-6)
+ build: clean/uninstall disabled modules as well (r:13716/FSBUILD-85)
+ build: fix msvc pcre build for pcre 7.9 (r:13729)
+ build: trivial build fix (FSBUILD-174/r:13877)
+ build: fix automake warnings about underquoted definitions in apr macros (FSBUILD-175/r:13882)
+ build: make libtool version detection more portable (r:13926)
+ build: change ODBC handling in code to be runtime instead of build time (r:13936)
+ build: update of spec file for current trunk (FSBUILD-176/r:13988)
+ build: replace mod_radius_cdr's Makefile.am with Makefile that pulls freeradius-client source when needed (r:14053)
+ build: add experimental modules section to modules.conf.in (r:14062)
+ build: allow comments (using ##) in modules.conf (r:14093)
+ build: update to 0.6.0 celt codec (r:14206)
+ build: fix 64 bit build of radius modules (FSBUILD-179/r:14201)
+ build: use internal libtiff instead of system libtiff (r:14321)
+ build: partial libsndfile build fix (FSBUILD-180/r14330)
+ build: fix compile on Mac OS X Snow Leopard 10.6 (FSBUILD-178/r:14333)
+ config: default config, calling own extension no longer goes to voicemail (r:12596)
+ config: default config, 1000-1019 uses $${default_password} instead of hard-coded 1234 (FSCONFIG-5/r:12838)
+ config: tweak the configs to bind siptrace on and off to F10 and F11 (r:12938)
+ config: Update sample IVR to include ClueCon reg option :) (r:13043)
+ config: Add ext 9991 as ClueCon ext; use transfer instead of bridge on demo ivr opt #4 (r:13046)
+ config: remove invalid options from profiles (r:13153)
+ config: add documention for dist-dtmf member flag in conference.conf.xml
+ config: remove mailbox= attribute (r:13375)
+ config: add default local stream (r:13376)
+ config: small regex adjustment so we can dial PSTN numbers that happen to have 4000 in them (r:13409)
+ config: you can call 9999 from a zrtp endpoint and enroll this should be replaced with an IVR to explain it a bit but most of the work happens client side at this point (r:13445)
+ config: add mod_nibblebill (r:13458)
+ config: clear up docs (r:13468)
+ config: clarify zrtp docs in vars.xml and give link on where to get more info (r:13469)
+ config: tweaks to codecs in default config (r:13485)
+ config: Add example of sending SAS from b-leg to display on a-leg's phone (r:13500)
+ config: commit config options for new auto nat (r:13595)
+ config: Remove use_profile from default dialplan, move to vars.xml, default value is 'internal'
+ config: clean up configs and put wan.auto in by default commented out (r:13907)
+ config: turn on rollover by default (r:13940)
+ config: remove unused param comfort-noise-level from default conference config file (MODAPP-299/r:14350)
+ core: fix suncc visibility support in libteletone (r:12154-12157)
+ core: fix crash on FS shutdown with "..." (FSCORE-297/r:12173,12361,12402)
+ core: add separate mutex for state related methods (r:12191)
+ core: move media bug removal to hangup state (r:12225)
+ core: create indexes for ODBC (r:12235)
+ core: add direction col to sql db, add direction param to session_create, log DTMF digits to digits_dialed variable for CDR (r:12244)
+ core: avoid operations on closed file handles in embedded languages (r:12255)
+ core: fix bridging issue from r:12244 (FSCORE-308/r:12257)
+ core: fix segfault after 2000 calls, 5 days uptime (FSCORE-309/r:12267-12270)
+ core: fix crash in switch_ivr_digit_stream_parser_feed (MODAPP-221/r:12262)
+ core: fix issue in monitor_early_media_fail (r:12271)
+ core: fix leak in switch_event.c (r:12291-12292)
+ core: clean up ivr_menu, prevent recursion (r:12295)
+ core: improve memory usage (r:12317)
+ core: fix leak in switch_ivr_async.c (r:12330)
+ core: fix leak in switch_channel.c (r:12332)
+ core: uuid_displace stopped working when limit arg used (MODAPP-225/r:12368)
+ core: fix att_xfer media bug problem (FSCORE-317/r:12390)
+ core: improve stability (FSCORE-297/FSCORE-305/FSCORE-315/r:12392,12403)
+ core: add new state for CDR and leg_delay_start originate var (r:12403-12404)
+ core: Make MESSAGE work with SIP PATH Exension (FSCORE-310/r:12426)
+ core: fix uninitialized mutex in switch_core_media_bug (FSCORE-320/r:12428)
+ core: fix segfault with eavesdrop (FSCORE-319/r:12429)
+ core: add generic config parser - thanks mrene (r:12432)
+ core: add sessions since start up to heartbeat event (r:12472)
+ core: increase buffer size for regex api (MODAPP-228/r:12480)
+ core: fix FreeSWITCH start failure - "Error: stacksize 240 is too large" (FSCORE-323/r:12509)
+ core: unloading endpoint module now removes from endpoint list (MODENDP-196/r:12535)
+ core: fix deadlock in fsctl hupall (r:12544)
+ core: add origination_pricavy var to originate api (r:12546)
+ core: increase stack limit for switch_system (FSCORE-328/r:12569)
+ core: fix uuid_originate param not assigning uuid properly (FSCORE-322/r:12591)
+ core: add check for a and b leg no answer on bridge (r:12595)
+ core: fix origination_privacy var (r:12603)
+ core: fix group_confirm regression from svn r12403 (r:12616)
+ core: fix caller ID values not being set in CHANNEL_OUTGOING (FSCORE-336/r:12643)
+ core: make -vg imply -waste so valgrind runs won't re-exec (r:12670)
+ core: add apr_pool_mutex_set() to our apr to fix thread-saftey issue (r:12672)
+ core: make port allocator more random (r:12673,12675)
+ core: make switch_channel_get_variable strdup so the pointer returned is safe and clean up the state locking (r:12674)
+ core: Empty audio files should not be created when RECORD_ANSWER_REQ is set to true and a call is not bridged (r:12682)
+ core: add transfer_after_bridge var (r:12691)
+ core: other_leg_unique_id incorrectly set when briding with using ',' (FSCORE-331/r:12704)
+ core: make gaussian noise less noisy (FSCORE-340/r:12720)
+ core: add import vars to FIFO (r:12722)
+ core: fix switch_core_file_write method not writing the entire buffer to the file (FSCORE-341/r:12728)
+ core: fix hanguphook order of operations vs destroy method issue in c++ code (r:12730)
+ core: rearrange hangup callflow to do more work in the session's own thread (r:12784)
+ core: Allow variables containing variables in set and export (MODAPP-241/r:12804)
+ core: add read_terminator_used var (r:12840)
+ core: change blocking rtp to psuedo-blocking to avoid endlessly blocking reads and refactor jitter buffer (r:12846)
+ core: add rtp-autoflush profile param and rtp_autoflush var (r:12854)
+ core: fix various small leaks (FSCORE-347/r:12873)
+ core: add a couple, two tree stats (r:12913)
+ core: fix play_and_get_digits to unset the var if the regex didn't match (r:12921)
+ core: drop divide by 2 from normalize func (r12935)
+ core: add missing begin/end, allow threads to read and play_and_get_digits methods (r:12958)
+ core: fix windows calling conventions for modules with sub-modules broken in svn r12919 (r:12960)
+ core: add flag to denote if a codec is init or not (FSCORE-349/r:12961)
+ core: add more specific checks to new macro just to be safe (r:12973)
+ core: change CS_DONE to CS_DESTROY and add state handler for destroy and tear down critical parts of the channel from this method which is not called until it's impossible for anything to be referencing the channel (after final write lock and before destroying the pool) (r:12986)
+ core: fix regression from earlier commit (FSCORE-352/r:12987)
+ core: expand channel variables for sound files in IVRs (MODAPP-257/r:13005)
+ core: clone frames in loopback so we can smooth it out better, now with more memory usage (tm) maybe this will curb pepople from using it like candy (r:13011)
+ core: run expand_vars if input contains a special escaped character not just when it contains a variable to eat up back slashes (r:13015)
+ core: change names to be more explicit (r:13028)
+ core: xml_config: Fix issue where default NULL strings were ignored on reload (r:13052)
+ core: autoflush on bridge and add bridge_hangup_cause variable to indicate the hangup cause of the last bridged channel (r:13065)
+ core: add record_ms, record_samples, playback_ms and playback_samples chanvars (r:13105)
+ core: make state_handler macros not let you install the same one more than once (r:13111)
+ core: Do not use struct fd_set uninitialized (always FD_ZERO() them, before using FD_SET() on a new one, or reusing them after select()). Fixes a segfault on solaris (r:13125)
+ core: Fix missing UNPROTECT_INTERFACE in case pre_answer fails (r:13130)
+ core: add record_waste_resources channel variable to send blank audio during recording (r:13144)
+ core: add auto-sync idle timers in switch_time.c (r:13161)
+ core: Add Q850 hangup cause variable (FSCORE-356/r:13163)
+ core: keep presence up to date (r:13166)
+ core: fix failed_xml_cdr_prefix is processed before all variables for the b-leg have been generated (FSCORE-357/r:13167,13176,13264,13274,13285)
+ core: failed_xml_cdr_prefix doesn't work for list of destinations separated by pipe (FSCORE-359/r:13209)
+ core: add support for gcc 4.4.0 (FSCORE-355/r:13210)
+ core: add resume command to event socket and socket_resume variable (r:13212)
+ core: prevent buffer destroy race (r:13219)
+ core: move originate retry related vars to only be in {} not in channel variable list (r:13225)
+ core: Make { } vars take precedence over channel variables (r:13228)
+ core: fix memory issue in core file resampling code (r:13233)
+ core: fix play and get digits when using phrase macros (r:13244)
+ core: Don't set the caller name to origination_uuid's value (r:13248)
+ core: Add switch_xml_parse_str_dynamic and switch_xml_parse_str_dup (r:13255)
+ core: In IVR menu use menu-timeout instead of menu-inter-digit-timeout when no digits have been entered (r:13279)
+ core: fix segault on OpenSolaris 2009.06 snv_111a (FSCORE-365/r:13286)
+ core: allow socket app to operate without pre_answer (r:13294)
+ core: ensure vasprintf is available on linux (FSBUILD-160/r:13358,13361)
+ core: setgroup/initgroup availability on linux (FSBUILD-160/r:13359)
+ core: use uint16_t instead of u_short (FSBUILD-160/r:13360)
+ core: add configure checks for tm->tm_gmtoff and tm->tm_zone (FSBUILD-160/r:13362)
+ core: Fix IVR key response broken when multiple files are played (MODAPP-280/r:13382)
+ core: fixx off-by-one in xml preprocessor (r:13385)
+ core: fix windows pch (r:13392)
+ core: fix segfault on out of memory situation. (r:13398/FSCORE-366)
+ core: treat app::arg syntax in execute_on_answer as a broadcast request (r:13400)
+ core: use our own handler so it won't get overriden by anyone if zrtp is on (r:13411)
+ core: fix backslash getting removed from regex when using mod_xml_curl (r:13414/FSCORE-370)
+ core: fix handle leak in switch_thread_self on windows (r:13421/FSCORE-371)
+ core: allow switching from secure to clear and back (r:13422)
+ core: add more options to zrtp (r:13424)
+ core: add buffer flush (r:13425)
+ core: add some stuff for zrtp (r:13426)
+ core: can't flush because you have a chance of dumping zrtp control frames (r:13427)
+ core: add zrtp_sas1_string and zrtp_sas2_string variables (r:13429)
+ core: zrtp - this should make sure the secure mitm has a chance over latent connections (r:13436)
+ core: properly detect unterminated (r:13438)
+ core: zrtp - fix mitm to be more reliable (r:13443)
+ core: zrtp - mark verified (r:13444)
+ core: zrtp_secure_media=true will have to be set to true in order for your zrtp to work moving forward similar to how srtp_secure_media works.(r:13461)
+ core: prevent zrtp and srtp at the same time (r:13486)
+ core: add CALL_SECURE event (r:13487)
+ core: add show secure channel status in "show channels" output (r:13502/FSRTP-2)
+ core: add CHANNEL_HANGUP_COMPLETE event to take the place of CHANNEL_HANGUP, CHANNEL_HANGUP now fires as soon as the channel is hungup but you must wait for CHANNEL_HANGUP_COMPLETE for the CDR data (r:13505)
+ core: fix core dump when calling session.execute (r:13508/FSCORE-373)
+ core: add netmask detection for nat discovery work (r:13549)
+ core: fix order of ops to enable logging sooner (r:13556)
+ core: add hunt_caller_profile (r:13625,13626)
+ core: add usec delta to log (r:13647)
+ core: add padding to cycles on session_record (r:13648)
+ core: Export swtich_inet_ntop so modules can use it (r:13738)
+ core: record_sample_rate variable influences the rate record app will use (r:13767,13768,13769)
+ core: init buffer in lead out on speak (r:13787)
+ core: add local_var_clobber variable for {} to set if [] vars should clobber {} vars (default false) (r:13842)
+ core: Fix switch_odbc_handle_callback_exec_detailed to handle floating point database columns properly (FSCORE-384/r:13866)
+ core: set sound path in say app (r:13904)
+ core: add wan.auto acl (r:13905)
+ core: Fix ACL nat.auto (FSCORE-385/r:13925)
+ core: add hostname variable (FSCORE-374/r:13982)
+ core: decrement RWLOCK->rwlock->__data->__nr_readers after Redirect/Transfer (FSCORE-391/r:14030)
+ core: add features to nat-pmp (Thanks Rupa) (FSCORE-381/r:14055)
+ core: fix error message that gives wrong stack size (FSCORE-395/r:14058)
+ core: Fix IVR menu timeout issue (MODAPP-301/r:14129)
+ core: add time of day routing attrs to condition tags in xml dialplan (r:14137)
+ core: change timing for media bug recording *yet again* (r:14143)
+ core: Fix voicemail rewind key, improve file seek (MODAPP-305/FSCORE-401/r:14199)
+ core: Fix uPNP for WRT-54TG-TM (FSCORE-402/r:14241)
+ core: group_confirm_cancel_timeout=true to stop timers once a group_confirm is triggered (r:14247)
+ core: Fix record_sample_rate when using stereo (FSCORE-403/r:14283)
+ core: hit the xml registry to look up path information for the say app (r:14310)
+ core: timeout calls stuck in CS_NEW after 1 minute (r:14313)
+ core: use FREESWITCH_OPTS env var to hold a string of desired command line switches (r:14352)
+ core: Handle UPNP from pfsense sending malformed header (FSCORE-405/r:14373)
+ docs: Fix filename references in phrase_en.xml (r:12976)
+ docs: Update phrase_en.xml to include v1.0.8 sound prompts (r:13041)
+ docs: Updates to phrase_es.xml (r:13067)
+ docs: Latest revision of Spanish prompts file (r:13115)
+ docs: switch_core.h doxygen update (r:13181)
+ docs: Add ZRTP phrases to phrase_en.xml (r:13488,13489,13490)
+ docs: Add Stephane Alnet's French translations to phrase_fr.xml (r:13624)
+ docs: Add AGL3.0 for zrtp (r:13848)
+ formats: add mod_portaudio_stream to get audio from any dev (MODFORM-25/r:12178)
+ fs_cli: fix solaris build (r:12160)
+ ivr: make tts-engine and tts-voice valid attributes on the menu xml (r:12278)
+ libapr: fix solaris build (r:13671/FSBUILD-169)
+ libapr-util: add xml/expat stuff back to apr-utils (requires re-bootstrap) (r:13289,13290)
+ libdingaling: hijack gcrypt init call to fix threadsafe race in dingaling and fix buffer overrun in iksemel (r:12575)
+ libdingaling: add ldl_handle_running (r:13085)
+ libdingaling: add a function to check for connected and authorized (r:13100)
+ libdingaling: fix auto-restart on disconnect (r:13134)
+ libesl: add api, bgapi methods (r:12179)
+ libesl: add ruby example (r:12180)
+ libesl: add python example (r:12184)
+ libesl: fix missing Event-Name param (MODEVENT-39/r:12311)
+ libesl: example of using esl to get events for ASR (r:12344)
+ libesl: improved filter handling (r:12488-12489)
+ libesl: fix ESL segfault when bgapi is called twice and BACKGROUD_JOB events are subscribed (ESL-5/r:12525)
+ libesl: fix illegal free when invalid bgapi originate args (ESL-8/r:12623)
+ libesl: add disconnect method; add ivrd (r:12724)
+ libesl: add command line args to single_command.py example (ESL-9/r:12729)
+ libesl: check in ESL::IVR perl mod (r:12760)
+ libesl: fix ruby linking on debian (ESL-7/r:12805)
+ libesl: fix esl coredumps in esl_event_serialize when using sendEvent from PHP (ESL-11/r:12884)
+ libesl: add event name when sending (r:12889)
+ libesl: add ESL::IVR::setVar from intralanman (r:12917)
+ libesl: fix ESL/IVR to include the regex (r:12921)
+ libesl: fix ctrl-D in fs_cli not to exit unless cmd line is empty (ESL-13/r:12952)
+ libesl: fix undef check (r:13012)
+ libesl: kill zombies (r:13013)
+ libesl: don't double encode events when sending them (r:13078)
+ libesl: adding sendevent example for esl perl (r:13079)
+ libesl: send content len with body in esl sendevent (r:13168)
+ libesl: add arbitrary notify (r:13188)
+ libesl: fix Phantom events when doing several bgapi calls without interleaving them with recvEvent (ESL-12/r:13217)
+ libesl: add Ruby example for ESL (ESL-15/r:13235)
+ libesl: add INFO example for Perl (r:13293)
+ libesl: add socketDescriptor() method to ESL::Connection obj (r:13770)
+ libesl: add prelims for Java ESL (r:13949,13950)
+ libesl: add fs_cli command line editing (FSCORE-389/r:13964)
+ libiksemel: let return 0 be a failure on read in iks to avoid cpu race (r:13123,13124,13133)
+ libnatpmp: add (r:13510)
+ libnspr: fix bsd port packaging (r:13715/FSBUILD-170)
+ libpcre: update to pcre 7.9 (r:13706)
+ libsndfile: add executable permissions to libs/libsndfile/src/create_symbols_file.py (FSBUILD-134/r:12535)
+ libsndfile: update to 1.0.19 (r:13415/LBSNDF-7)
+ libsofiasip: su.h - define su_family via struct sockaddr (r:12260)
+ libsofiasip: sip_parser.c - fixed sip_transport_d() (r:12261)
+ libsofiasip: Fix compile time out-of-bounds error in su_uniqueid.c (SFSIP-136/r:12914)
+ libsofiasip: make info work out of dialog (r:13087)
+ libsofiasip: silence solaris warning from missing braces (SFSIP-132/r:13369)
+ libsofiasip: subscription-state subexp-params missing (r:13439/SFSIP-148)
+ libsofiasip: fix re-register after 423 w/ Min-Expires (r:13619/SFSIP-143)
+ libsofiasip: use addres, id, and version from user sdp if they exist (r:13621)
+ libsofiasip: handle mid-line comments in resolv.conf patch from Lee Verberne (SFSIP-152/r:13749)
+ libsofiasip: fix CNAME record resolve failure (SFSIP-129/r:13915)
+ libspandsp: update to snapshot 20090308 (r:12514)
+ libspandsp: update to snapshot spandsp-20090421 (r:13086)
+ libspandsp: update to snapshot spandsp-20090427 (r:13177)
+ libspandsp: update to spandsp-0.0.6pre12 (r:13311)
+ libspandsp: use __cdecl calling convention for span_rx_handler_t and span_tx_handler_t type functions (r:13509)
+ libspandsp: update to spandsp snapshot 20090714 (r:14316)
+ libspandsp: add --enable-builtin-tiff configure arg to tell spandsp to use pre-built libtiff in parallel directory (r:14318)
+ libspeex: Add visibility support for suncc on solaris (r:13117,13118)
+ libteletone: update api visibility macros for windows
+ libtiff: add libtiff, v3.8.2
+ libxmlrpc: add select to read socket in abyss so we can timeout (r:13107)
+ libxmlrpc: fix segfault (MODAPP-293/r:13906)
+ mod_cdr_csv: add option to disable creation of multiple files if account code is set (MODEVENT-44/r:13968)
+ mod_cidlookup: add new module, mod_cidlookup (r:12990)
+ mod_cidlookup: switch to using CURL instead of mod_http (r:12992)
+ mod_cidlookup: add config file (r:12994)
+ mod_cidlookup: set initial value for status (r:13029)
+ mod_clue_choo: add new module, mod_clue_choo (r:13068,13069,13070)
+ mod_commands: Add show api [name] and show application [name] (r:12296)
+ mod_commands: fix header_string "key" from being set twice from SWITCH_STANDARD_API(user_data_function) (MODAPP-242/r:12786)
+ mod_commands: add show modules functionality (MODAPP-227/r:12806)
+ mod_commands: add echo api command (echo back exact input) and add expand api command (executes another api command with variable expansion) (r:13101,13102)
+ mod_commands: add "stun" fsapi command (r:13137)
+ mod_commands: mod_commands: if no bind ip specified for stun fsapi command, use the guess ip (r:13140)
+ mod_commands: add show channels like %foo% (no % in the string implies wrapped in %, no spaces allowed in match string (r:13193)
+ mod_commands: Add max-sessions to status (MODAPP-254/r:13373)
+ mod_commands: remove double safe_free's (r:13453,13454,13455)
+ mod_commands: add nat_map API (r:13531)
+ mod_commands: add show distinct_channels (mix of show channels and show calls) (r:13944)
+ mod_commands: allow xml_locate to just take section (r:14317)
+ mod_conference: fix read terminating on single digit when called from a meta-app inside a conference (MODAPP-226/r:12466)
+ mod_conference: recording members should be invisible to commands (MODAPP-233/r:12582)
+ mod_conference: add lock caller_control (r:12787)
+ mod_conference: only first call to a conf requires a profile; fix bgdial (MODAPP-245/r:12809)
+ mod_conference: add conference_enforce_security variable to bypass or require pin or locked flag (r:12863)
+ mod_conference: clean up pin prommpting and make local override stay local (r:12864)
+ mod_conference: keep new conference locked the whole time during transfer (r:12988)
+ mod_conference: allow setting the moh_sound from a variable (r:13042)
+ mod_conference: set perpetual_sound from channel var (r:13048)
+ mod_conference: increase sanity timer for conference auto-record to 120 seconds (r:13104)
+ mod_conference: serialize (r:13116)
+ mod_conference: dist-dtmf flag in conference (r:13191)
+ mod_conference: add transfer action to caller-controls (r:13194)
+ mod_conference: fix dtmf queue issue in dist-dtmf feature (MODAPP-268/r:13206)
+ mod_conference: add execute_application to custom controls (r:13216)
+ mod_conference: disallow spaces in conference names (MODAPP-219/r:13313)
+ mod_console: Fix mod_console (missing FD_ZERO before FD_SET) (r:13126)
+ mod_conference: add conference wait-mod flags and member moderator flag to delay starting a conference until someone with a moderator flag has joined (r:13442)
+ mod_conference: add member-type header to relevant events (r:13471)
+ mod_conference: make endconf count cumulative (r:13526)
+ mod_conference: don't transfer back to the same conference (r:13638)
+ mod_conference: Add Job-UUID to conference bgdial (MODAPP-304/r:14161)
+ mod_curl: Add mod_curl (API for querying Web resources) and moved mod_http to experimental because of probable leaks (r:14092)
+ mod_curl: Add ability to make a post request from dialplan (MODAPP-307/r:14348)
+ mod_dahdi_codec: delay init of resources until the first time they are actually used to avoid unnecessary waste of resources in hardware codec (r:12962)
+ mod_dahdi_codec: set mod_dahdi_codec dahdi transcoding device sockets to non-blocking to avoid hanging when there is no data and just return 0 bytes frame (MODCODEC-8/r:13257)
+ mod_dahdi_codec: added proper waiting (up to 10ms) for the DAHDI transcoder output frame (r:13262)
+ mod_dahdi_codec: return silence frame in dahdi codec when there is no output from the decoder (r:13265)
+ mod_dahdi_codec: add 30ms G729 codec in mod_dahdi_codec (r:13404)
+ mod_dialplan_xml: add min of day to time rules (r:14378)
+ mod_dingaling: fix crash when unloading/reload mod_dingaling (LBDING-13/r:12612)
+ mod_dingaling: fix no sound if phone picked up after 5th dingaling on Gtalk client (MODENDP-198/r:12641)
+ mod_dingaling: fix core dump when calling Gtalk enabled FS using leg_timeout (MODENDP-199/r:12641)
+ mod_dingaling: dl_login command line Usage and parameter doesn't match (MODENDP-202/r:12680)
+ mod_dingaling: fix unload mod_dingaling core dump (MODENDP-204/r:12680)
+ mod_dingaling: fix small memory (r:13374)
+ mod_dingaling: fix potential core dump (MODENDP-230/r:14296)
+ mod_dptools: prevent system crash when "user" in originate dialstring (FSCORE-313/r:12395)
+ mod_dptools: added sched_heartbeat and enable_heartbeat dialplan apps (r:12491)
+ mod_dptools: fix b & c legs not bridging when attended transfer used (FSCORE-334/r:12649)
+ mod_dptools: Custom events fired from event application bypass filtering mechanism (MODAPP-249/r:12894)
+ mod_dptools: change inline limit from 4 to 128 apps (MODAPP-253/r:12957)
+ mod_dptools: improvements to presence function (r:13164)
+ mod_dptools: add group_recurse_variables and user_recurse_variables to {} vars (default is true, set to false to not pass vars down to user or group channels) (r:13241,13246)
+ mod_dptools: add param dial-timeout to directory (MODAPP-271/r:13247)
+ mod_dptools: add set current_application_response channel variable (MODAPP-273/r:13298)
+ mod_dptools: fix SEGV in strncasecmp call (MODAPP-278/r:13317)
+ mod_dptools: fix leaks (r:13446, 13447, 13448)
+ mod_dptools: add sleep_eat_digits channel variable (r:14102)
+ mod_easyroute: fix leak (r:13449)
+ mod_enum: fix enum_auto_route (MODAPP220/r:12243)
+ mod_erlang_event: Bind to 0.0.0.0 instead of 127.0.0.1 by default; like most erlang nodes do. (r:12249)
+ mod_erlang_event: Reply appropriately to net_adm:ping() (r:13066)
+ mod_erlang_event: snprintf needs a format string too, and write has the warn_unused_result attribute set, so store the return value somewhere (r:13090)
+ mod_erlang_event: fix erlang autoconf macro to deal with edge cases (MODEVENT-45/r:13288)
+ mod_erlang_event: fix FreeSWITCH crashing when sending traffic (FSCORE-379/r:13746)
+ mod_event_socket: disallow unloading mod_event_socket from event socket (r:12326,12334)
+ mod_event_socket: fix api_exec crash on OSX (MODEVENT-40,r:12349)
+ mod_event_socket: move connect command to always work on outbound socket not just the first time (r:12723)
+ mod_event_socket: add nat-map option to mod_event_socket (r:13567)
+ mod_event_socket: sendevent Fire events with correct event-name and subclass (MODEVENT-41/r:14354)
+ mod_fax: can't print base 8 number that has a 9 in it.. use stringified version instead (r:13312)
+ mod_fifo: consumer callback waiting an option in fifo.conf.xml (r:12685)
+ mod_fifo: add fire events on bridge in fifo (r:12791)
+ mod_fifo: fix fifo re-parse crash (FSCORE-343/r:12855)
+ mod_fifo: fix uuid_transfer into mod_conference audio issue (MODAPP-259/r:13030)
+ mod_fifo: add fifo_orbit_dialplan and fifo_orbit_context vars (MODAPP-189/r:13038)
+ mod_fifo: don't do wrapup when agent is in nowait mode or call has ended (r:13094)
+ mod_fifo: don't call all members on on-hook mode and round robin based on next_avail (MODAPP-272/r:13240,13242)
+ mod_fifo: abandon outbound calls when they are not needed, place queue name in the caller id (r:13240)
+ mod_fifo: add "fifo_destroy_after_use" variable to allow quick destruction of one-time use FIFO queues (MODAPP-287/r:13897)
+ mod_file_string: add new module, allows for playing ! delimited lists of sound files (r:13182)
+ mod_flite: three new voices - rms, awb (male), slt (female) (r:12166)
+ mod_flite: mod_flite_shutdown not called/used (MODASRTTS-15/r:13270)
+ mod_g723_1: add more ptimes (r:14095)
+ mod_iax: make mod_iax async (r:13021)
+ mod_iax: autoflush these channels that use queues (r:13057)
+ mod_lcr: allow channel vars in custom_sql (r:12198)
+ mod_lcr: Add ifdefs around odbc calls in shutdown function (r:13268)
+ mod_lcr: Adjust handling of strip parameters so entire number can be stripped (MODAPP-279/r:13365)
+ mod_lcr: honor effective_caller_id_number for CID override (r:13611)
+ mod_lcr: Add variable expansion in cid regexp processing (MODAPP-309/r:14287)
+ mod_lcr: add "as xml" option (r:14311)
+ mod_limit: Add events and a shutdown function (r:12497)
+ mod_limit: close odbc handle (r:12632)
+ mod_limit: Add more error checking to hash api/app (r:13007)
+ mod_limit: prevent multiple bindings of the same event_hooks to make code simpler in mod_limit (MODAPP-264/r:13113)
+ mod_limit: Move over-limit messages down to INFO (MODAPP-308/r:14275)
+ mod_local_stream: Add show_local_stream [stream name] (MODFORM-27/r:13165)
+ mod_local_stream: fail over to default if desired stream is not found (r:13184,13185,13186)
+ mod_local_stream: refactor resampling in mod_local_stream (r:13222)
+ mod_loopback: mod_lopback: other_loopback _leg_uuid variables are sometimes unset while executing the dialplan (MODENDP-210/r:12905)
+ mod_loopback: destroy codec (r:12936)
+ mod_loopback: fix loopback channels that stay alive (FSCORE-349/r:12944,12953)
+ mod_loopback: flush queued frames on audio sync event (r:13018)
+ mod_loopback: autoflush these channels that use queues (r:13057)
+ mod_loopback: pass flush indications across to the b leg (r:13146)
+ mod_loopback: make mod_loopback render silence to prevent livelock (r:13147)
+ mod_loopback: drop excess frames on loopback channel (r:13156,13157,13158)
+ mod_loopback: add loopback_bowout variable (set to false to skip auto-bowout) (r:13162)
+ mod_loopback: mod_loopback plays noise instead of silence (MODENDP-216/r:13214)
+ mod_lua: windows build changes to support externally built modules. (MODLANG-101/r:12237)
+ mod_lua: fix visibility support (FSCORE-302/r:12239-12240)
+ mod_lua: fix windows build (FSBUILD-149/r:12919)
+ mod_lua: fix memory leak (MODLANG-111/r:13298)
+ mod_lua: fix error checking to be more reasonable (MODLANG-116/r:13993)
+ mod_lua: fix memory leak in xml binding (MODLAN-113/r:14158)
+ mod_managed: fix recursive file record during file playback issue (r:13551/IRC-00)
+ mod_managed: New mod_managed with multi-appdomain (reloading) and scripting support (r:14364)
+ mod_memcache: add new module, mod_memcache; API for memcached (r:12871)
+ mod_memcache: make -ERR for API call less verbose (r:12949)
+ mod_memcache: add hook reloadxml event (r:12950)
+ mod_memcache: unbind the reloadxml event handler on shutdown (r:12954)
+ mod_memcache: Fix C99 error, move var declaration out of the "for()" statement (no -std=c99?) (r:12959)
+ mod_memcache: cleanup xml config handling (r:13050,13051)
+ mod_memcache: fix compile failure (MODAPP-292/r:13883)
+ mod_native_file: add fh->pos setting (MODFORM-34/r:14388)
+ mod_nibblebill: mod_nibblebill question: DB Error while updating cash (MODAPP-229/r:12907)
+ mod_nibblebill: Updated mod_nibblebill to work properly w/ postgres fields (r:13031)
+ mod_nibblebill: Added feature mod_nibblebill to check balance and transfer the caller to an alternate dialplan context & extension if they deplete their funds. (r:13432)
+ mod_nibblebill: cleanup, fix leak (r:13463)
+ mod_nibblebill: fix segfault (MODAPP-286/r:13662)
+ mod_nibblebill: Fixed nibblebill to bill on call start (r:13753)
+ mod_nibblebill: code before declaration (FSBUILD-172/r:13755)
+ mod_opal: Fixed transmission of Q.931 Calling-Party-Number, and DisplayName on H.323 Setup (r:12347)
+ mod_opal: allocate frame from session pool so it will not go out of scope (r:12811)
+ mod_opal: disable visibility support broken in newer gcc (MODENDP-190/r:12923)
+ mod_opal: add dtmf method to mod_opal (r:13002)
+ mod_opal: Applied patch to fix some race conditions on call termination (r:13014)
+ mod_opal: prevent endless loop (r:13034)
+ mod_opal: Fixed ability to send a string as user indications (DTMF) (r:13049)
+ mod_opal: try to flag CNG frames (MODOPAL-6/r:13098)
+ mod_opal: Fixed incorrect include path (r:13239)
+ mod_perl: Libtool build fix for mod_perl: use LIBTOOL_LIB_EXTEN to make libtool-2.2 happy and CXXLINK since we are linking a C++ lib (r:13080)
+ mod_pocketsphinx: Revamp mod_pocketsphinx to use jsgf format (r:12224)
+ mod_pocketsphinx: now you can specify the dictionary to use in the config file (r:13747)
+ mod_pocketsphinx: add language weight (r:13910)
+ mod_portaudio: fix audio issue in portaudio (r:12669)
+ mod_python: fix core dump when using startup script (MODLANG-106/r:12648)
+ mod_python: fix python failing during loading startup modules (MODLANG-105/r:12658)
+ mod_python: fix EventConsumer::pop() can deadlock mod_python (MODLANG-109/r:12849)
+ mod_python: fix seg on unload when scripts are running (MODLANG-107/r:13721)
+ mod_say_en: fix missing "at" in time readback, change from cardinal to ordinal numbers on dates, e.g. "January 20th" vs. "January 20" (MODAPP-263/r:13099)
+ mod_say_en: tweak grammar (MODAPP-310/r:14351)
+ mod_say_es: Add stub phrase_es.xml (r:13019)
+ mod_say_ru: add Russian language say module and config files (r:12966-12971)
+ mod_say_ru: change encoding on phrase_ru.xml from cp1251 to utf8 (r:12974)
+ mod_say_ru: add .wav and small fix (r:13000)
+ mod_say_ru: change char million,thousand to enum (r:13009)
+ mod_say_ru: rename currency (r:13024)
+ mod_say_ru: change dollars and cents to rubles and kopecks (r:13025)
+ mod_say_ru: add ru_ip (r:13026)
+ mod_say_ru: Update phrase_ru.xml to include v1.0.8 sound prompts (r:13044,13045)
+ mod_say_ru: add russian language support and makefile targets (r:14091)
+ mod_say_ru: add mod_say_ru to windows build (r:14246)
+ mod_shell_stream: Initial commit (r:13851)
+ mod_shout: Fix race conditions; fix stutter when first 64k is drained from shoutcast stream (r:13218)
+ mod_shout: bring media back so telecast of a no-media call will work. (MODFORM-28/r:13895)
+ mod_shout: add mp3 improvements in seeking, cleanup (MODFORM-32/r:14223)
+ mod_skel: add more example code and info (r:12459)
+ mod_skypiax: move to trunk (r:12167)
+ mod_skypiax: fix hang on invalid mod_skypiax.conf.xml (MODSKYPIAX-21/r:12320-12322,12343)
+ mod_skypiax: modified configs/startskype.sh to specify which unix user will start the Skype client instance (r:12937)
+ mod_skypiax: fixed assignment before declaration on Windows VC++ (r:12956)
+ mod_skypiax: great startup speedup in Windows (using only one Broadcast sendmessage for each interface hunting) (r:13083)
+ mod_skypiax: when repeatedly you try to connect to non-existing Skype account in a short period, the Skype client send you back the two halves of the message 'ERROR 92 CALL: Unrecognised identity' inverted in a way that breaks the flux of the API messages. Maybe an anti-spam feature? Anyway, let's try to work around it and restore sanity with a 1 second delay (r:13663)
+ mod_skypiax: the Skype client sends us BOTH inband and out_of_band DTMFs, no way to shut the inbands. Let's intercept the out_of_bands ONLY if we are not bridged (eg: IVR, so not to waste CPU in detecting inband), but not propagate the out_of_band DTMFs if we are bridged (inband ones will be propagated) (r:13664)
+ mod_skypiax: now it manages the REMOTEHOLD status, when the remote party puts the call on-hold (r:13667)
+ mod_skypiax: removed FARMING ifdefs (r:13810)
+ mod_skypiax: added XInitThreads() to configs/client.c, now is kind of a reliable tool (r:14125)
+ mod_skypiax: added directory 'alsa', contains customized snd-dummy ALSA driver (r:14335)
+ mod_skypiax: added directory 'kernel', contains .config file for compilation of kernel 2.6.24.7 (64bit) tickless and 100HZ. (r:14336)
+ mod_skypiax: added directory 'configs/multiple-instance-same-skype-username', contains configuration file and script to launch Skype clients with multiple instances of the same skype user (r:14337)
+ mod_skypiax: added configs/windows-service directory, contains batch files needed to start skype instances as service, and then start FreeSWITCH (r:14359)
+ mod_skypiax: patch from Muhammad Shahzad for adding and removing interfaces on the fly (r:14367)
+ mod_skypiax: manage the 'BUSY' call status message (r:14371)
+ mod_skypiax: manage the 'WAITING_REDIAL_COMMAND' call status message (r:14372)
+ mod_sndfile: fix off by one error (MODFORM-29/r:13890)
+ mod_sndfile: update pos on the file handle on reads (MODFORM-33/r:14377)
+ mod_sofia: allow you to set invite, to and from params independently (r:12287)
+ mod_sofia: allow add params to a contact that isn't a gateway (r:12289)
+ mod_sofia: add sip_route_uri var to set proxy route (r:12408)
+ mod_sofia: add sip_send_to Sofia dial param (MODEND-195/r:12409)
+ mod_sofia: add siptrace on/off to sofia command (r:12410,12412)
+ mod_sofia: add network_ip and network_port to registration ODBC table and registration event (MODENDP-194/r:12414)
+ mod_sofia: add configurable outgoing cid types (r:12427)
+ mod_sofia: send SIP INFO DTMF to the bridged leg in bypass media mode (FSCORE-263)
+ mod_sofia: add extension-in-contact param for rare cases when provider makes you say a certain contact user (r:12511)
+ mod_sofia: add contact-host param to gateways (r:12531)
+ mod_sofia: add sip_from_display var and fix backwards switch_strisr calls (r:12566)
+ mod_sofia: remove Redundant NTATAG_DEFAULT_PROXY (MODENDP-197/r:12583)
+ mod_sofia: reset rtp timer on unhold operation (r:12617)
+ mod_sofia: fix G.722 call with broken ptime triggers crash after transfer between contexts (FSCORE-337/r:12647)
+ mod_sofia: fix presence subscription not automatically refreshed due to wrong Contact in 202 (refer accepted) response. (MODENDP-201/r:12657)
+ mod_sofia: fix random segfaults (FSCORE-322/r:12676)
+ mod_sofia: fix registration issue (r:/12715)
+ mod_sofia: add username and realm to sip db (r:12785)
+ mod_sofia: fix subscriptions being checked even though it belongs to other host (MODAPP-207/r:12792)
+ mod_sofia: reduce exponential mwi notifies (r:12801)
+ mod_sofia: don't auto-disable, just warn on RFC2833 in transcoded call (r:12815)
+ mod_sofia: add 603 for now (r:12883)
+ mod_sofia: make nat options ping configurable and leave it off by default (r:12897)
+ mod_sofia: continue_on_fail broken on SVN12881 (MODENDP-209/r:12902)
+ mod_sofia: add rtp-autofix-timing (defauts to true even when not present) set to false to disable it (FSCORE-281/r:12903,12904)
+ mod_sofia: add set r_sdp_codec_string to list of codecs offered in inbound call dsp (MODENDP-206/r:12946)
+ mod_sofia: add sip_call_info variable (SFSIP-138/r:12977)
+ mod_sofia: move rtp stats up to where they will be more useful (r:13017)
+ mod_sofia: fix FreeSWITCH/SIPX transfer issue (SFSIP-86/r:13032)
+ mod_sofia: ndlb_sendrecv_in_session var NDLB-sendrecv-in-session profile option to reverse the effects of MODENDP-148 (r:13084)
+ mod_sofia: add sip info to event_socket gateway (r:13088)
+ mod_sofia: switch_add_event_header needs a format specifier, or >=gcc-4.3 will be very unhappy (r:13089)
+ mod_sofia: add calls count and failed calls count to sofia profile sorted by direction (r:13103)
+ mod_sofia: only pass 2833 while bridged and while bridged to another channel that uses our RTP stack (r:13131)
+ mod_sofia: send-message-query-on-register profile param, set it to false to disable default of true (r:13139)
+ mod_sofia: fix segfault in sofia xmlstatus profile command (MODENDP-214/r:13141)
+ mod_sofia: add contact lookup (r:13169)
+ mod_sofia: parse out alert-info and call-info from infos (r:13173)
+ mod_sofia: add arbitrary notify (r:13187,13189)
+ mod_sofia: add experimental NDLB-connectile-dysfunction-2.0 (r:13197~13203)
+ mod_sofia: allow register-transport (MODENDP-217/r:13226)
+ mod_sofia: fix mem corruption on failed register (r:13229,13230)
+ mod_sofia: Ignore ptime when missing instead of using @0i (MODENDP-206/r:13231)
+ mod_sofia: fix evil send myself a refer bug (FSCORE-350/r:13237)
+ mod_sofia: Add sofia profile params to fine-tune timers (r:13245)
+ mod_sofia: Fix incoming anonymous from MetaSwitch will not bridge (SFSIP-144/r:13266)
+ mod_sofia: Fix command "sofia xmlstatus profile internal reg" returns invalid xml text (SFSIP-145/r:13267)
+ mod_sofia: Allow retrieval of redirect contact uri parameters via channel variable (MODSOFIA-7/r:13271)
+ mod_sofia: Fix Polycom SRTP (r:13295)
+ mod_sofia: preserve the transport on SLA interactions, still needs work for TLS but should work for UDP and TCP (r:13303)
+ mod_sofia: now pickup, barge-in and various other things will work with SLA is turned on (r:13306)
+ mod_sofia: Add ability to supply call-id when using SEND_INFO (MODENDP-219/r:13357)
+ mod_sofia: Allow sending the flush/reboot all the registration of a domain (MODENDP-187/r:13363)
+ mod_sofia: Fix double re-register problem (SFSIP-143/r:13384)
+ mod_sofia: make autoflush on bridge the default (r:13389)
+ mod_sofia: add contact-user profile param to override default contact username for a profile (MODSOFIA-8/r:13397)
+ mod_sofia: add proxy-follow-redirect flag (experimental) (r:13402)
+ mod_sofia: add proxy-follow-redirect flag (experimental) (r:13403)
+ mod_sofia: Update CID on Polycom when doing an Attended transfer, Make send_display work with Polycom and others, add patch with mods from SFSIP-111 (r:13492/SFSIP-111)
+ mod_sofia: handle vegastream broken sip info packets (r:13506)
+ mod_sofia: Rewrite sofia_glue_get_user_host (r:13543)
+ mod_sofia: Fix NOTIFY message sending incorrect information (MODENDP-225/r:13719)
+ mod_sofia: add sofia tracelevel <level> and tracelevel param in <settings> (r:13735)
+ mod_sofia: Fix wrong contact header in SIP on incoming calls and NAT (SFSIP-151/r:13736)
+ mod_sofia: increase compat on NDLB-to-in-200-contact to handle NAT (r:13759)
+ mod_sofia: fix segfault (FSCORE-382/r:13774)
+ mod_sofia: Fix multicast replication of sofia registrations (r:13786)
+ mod_sofia: don't put params in chan names on sofia urls (r:13841)
+ mod_sofia: Fix mod_sofia is not looking fs_path for correct url if endpoint is behind NAT or proxy (MODENDP-221/r:13865)
+ mod_sofia: Move sip-allow-multiple-registrations and similar variables from variables to params (MODENDP-222/r:13875)
+ mod_sofia: fix segfault on refer with no content-type or body (SFSIP-153/r:13889)
+ mod_sofia: fix segfault on reinvite on nomedia call when using uuid_media (r:13894)
+ mod_sofia: use the register proxy for the R-URI on register when register-proxy is set (MODSOFIA-12/r:13911)
+ mod_sofia: Dereferencing a null pointer causes segfault: sofia_handle_sip_r_invite doesn't check profile->extsipip before use (FSCORE-386/r:13937)
+ mod_sofia: preserve transport on route (SFSIP-157/r:13948)
+ mod_sofia: do not set route_uri unless there is actually one to go to (r:13952)
+ mod_sofia: P-Asserted-Identity and P-Preferred-Identity headers now available as channel vars (BOUNTY-7 and MODENDP-146/r:13977)
+ mod_sofia: this one was my fault, it shouldn't set them as sip_h just in case. Moved it to set the full header into sip_HEADERNAME so you can use it as you see fit or re-export it to a sip_h on the b-leg if needed unchanged. (r:14081)
+ mod_sofia: manually handle bye to delay the 200 OK till after the call is torn down (reversible with a define) (r:14121)
+ mod_sofia: Have I said how dumb sip is sometimes? (r:14142)
+ mod_sofia: fix SFSIP-163, don't blindly copy the extrtpip when ip is defined. (r:14209)
+ mod_sofia: add sip_auto_answer_detected var set when we get intercom request on inbound invite. (r:14220)
+ mod_sofia: Gateway Config option caller-id-in-from disables/ignores option from-domain (MODSOFIA-16/r:14244)
+ mod_sofia: Fix OPTIONS ping sends OPTIONS of many gateways to one gateway (SFSIP-162/r:14249,14250)
+ mod_sofia: Fix problem w/OCS after svn14200 with transport=tcp (MODSOFIA-17/r:14251)
+ mod_sofia: Send outbound INVITES to outbound proxy (SFSIP-165/r:14263)
+ mod_sofia: do not auto-set from-domain value (r:14304)
+ mod_sofia: fix MODSOFIA-18 (r:14319)
+ mod_sofia: add some err checking to sqlite case for nonce checking (r:14322)
+ mod_sofia: Also support 300 redirections (r:14329)
+ mod_sofia: Mitel interop (MODSOFIA-15/r:14332)
+ mod_sofia: Fix issue of gateway parameters register-proxy and outbound-proxy being interchanged (SFSIP-167/r:14344)
+ mod_sofia: Fix Multiple ODBC table creation issues (SFSIP-168/r:14346)
+ mod_sofia: Optionally rewrite fs_path element of sip contact string on multicasted registrations (MODENDP-231/r:14353)
+ mod_spidermonkey: fix segfaults on dtmf callback (FSCORE-327/r:12577)
+ mod_spidermonkey: fix error loading mod_spidermonkey due to missing PR_* symbols (r:12934,12939)
+ mod_spidermonkey: add destroy method to js (r:13016)
+ mod_spidermonkey: Let session.destroy() take the cause as a string too (r:13020)
+ mod_spidermonkey: add error checking on switch_core_db_column_text (r:14323)
+ mod_spy: add new module, mod_spy (MODAPP-260/r:13035,13036)
+ mod_syslog: Keep the indent string in memory (LOGGER-1/r:12852)
+ mod_t38gateway: Introduction of the skeleton of a media bug implementing a T.38 gateway, so the
+ related infrastructure work can take place around it (r:13082)
+ mod_voicemail: remove endless loop on leaving message (MODAPP-233/r:12315-12316)
+ mod_voicemail: add indexes to mod_voicemail (r:12341)
+ mod_voicemail: fix audio cutoffs in voicemail_leave_main (MODAPP-225/r:12367)
+ mod_voicemail: fix profile id mismatch when changing password via menu (MODAPP-236/r:12602)
+ mod_voicemail: fix incorrect (NULL) recipient stored for VM on dynamic binding of FS directory. (MODAPP-240/r:12850)
+ mod_voicemail: fix segfault on vm_boxcount when box has "sip:" prefix (MODAPP-250/r:12915)
+ mod_voicemail: add parameter "login-keys" to allow user to customize which key is used to log in (MODAPP-251/r:12916)
+ mod_voicemail: change len to seconds (r:13127)
+ mod_voicemail: message-query-exact-match global param in settings section of voicemail to assume profile names match domain names (r:13138)
+ mod_voicemail: allow unload and reload of mod_voicemail (MODAPP-177/r:13145)
+ mod_voicemail: expand the right variable (r:13272)
+ mod_voicemail: rework vm_boxcount api and add an optional profile parameter (r:13283)
+ mod_voicemail: add voicemail disk quota (MODAPP-173/r:13314)
+ mod_voicemail: abolish mailbox attribute in users and use number-alias attribute instead (MODAPP-218/r:13377,13378,13379,13380,13381)
+ mod_voicemail: Implement new config parser (r:13878,13879)
+ mod_voicemail: Implement reload in non-blocking way (r:13884)
+ mod_voicemail: fix playback control keys being non-functional (MODAPP-302/r:14090)
+ mod_voicemail: Fix seg fault and do some cleanup (r:14107)
+ mod_voicemail: Flush DTMF Before Tone (MODAPP-312/r:14380)
+ mod_voicemail: add option to move to next and previous message(MODAPP-313/r:14386)
+ mod_voicemail: allow Voicemail FF REW key to have configurable millisec interval AND allow REW to limit at the begining of the recording. (MODAPP-311/r:14389)
+ mod_voicemail: allow to skip the info section of a message by pressing a key (MODAPP-314/r:14392)
+ mod_unimrcp: add to trunk (r:13788,13789,13790,13791)
+ mod_unimrcp: make mod_unimrcp compile with gcc 4.3 (MODUNIMRCP-1/r:13833)
+ mod_unimrcp: mrcp_profile for unimrcpserver 0.6.0 (MODASRTTS-18/r:13835)
+ mod_unimrcp: use paths referenced to the project file dir (r:13840)
+ mod_unimrcp: Added LPCM (16-bit linear PCM) codec, which is used internally in host order; while L16 is RFC3551 defined 16-bit linear PCM codec in network order. (r:13859)
+ mod_unimrcp: add speech_channel_set_state_unlocked() (r:14049)
+ mod_xml_cdr: Implement optional directory rotation for mod_xml_cdr (XML-6/r:14300)
+ mod_xml_cdr: use switch_true instead of atoi (r:14342)
+ mod_xml_curl: fix data fetch (MODXMLINT-48/r:12586)
+ mod_xml_curl mod_xml_cdr: fix ssl verify peer option and add cookie options (MDXMLINT-51/MDXMLINT-52/r:14208)
+ mod_xml_rpc: xmlrpc fails to check security restrictions (MDXMLINT-53/r:13912)
+ mod_xml_rpc: add virtual-host (default to true) and default-domain params (MDXMLINT-45/r:14349)
+ scripts: Add -days option to set expiration time of certificates in gentls_cert (r:13825)
+ scripts: Add zrtp enrollment script, we do auto enrollment and verification (r:13843)
+ scripts: Add AT&T System 25 PBX style call pickup (FSSCRIPTS-16/FSSCRIPTS-17/r:13896)
+ support: Add print_list gdb macro (r:12687)
+ switch_cpp: fix leak (FSCORE-394/r:14097)
+
+
+freeswitch (1.0.3)
+
+ build: add targets cd-sounds[-install] and cd-moh[-install] for 48k sounds (r:11151)
+ build: autoconf detect odbc library (FSBUILD-8)
+ build: fix sound install on windows build (r:11635,11638)
+ build: fix configure --sysconfdir (FSBUILD-84)
+ build: fix uclibc build (MODLANG-99)
+ build: fix adduser in debian (FSBUILD-122, FSBUILD-102)
+ core: fix buffering issues (r:11101,11145,11152-11157,11162,11191,11200)
+ core: fix c leg no hangup when converting attended to blind transfer before b leg answers (MODENDP-165/r:11061)
+ core: fix codec and media handling issues (r:11104)
+ core: fix double close of file handles and add recording of native files (r:11108-11113,11482,11483)
+ core: fix file resampling issue (r:11090)
+ core: fix incorrect call progress timestamps in timetable (r:11186-11187/FSCORE-268)
+ core: fix media handling issues (r:11079-11082)
+ core: fix multiple 2833 dtmf handling issues (r:11149,11261,11262,11266,11293,11294,11338/FSCORE-266,FSCORE-273)
+ core: send more event types verbos bridge,unbridge,park,unpark (r:11097-11098)
+ core: Prevent media setup on failed originates (r:11462/FSCORE-279)
+ core: fix recorded soundfiles had random data at end of file (r:11491/MODAPP-205)
+ core: fix user for windows service (r:11538/FSCORE-277)
+ core: modify variable expansion code to expand in more places and to fix potential security issue from injecting variables (r:11569,11570)
+ core: look for soundfiles in more locations based on rate (r:11601/MODFORM-23)
+ core: state machine veto behavior changed (r:11610)
+ core: add enable_file_write_buffering variable (r:11677)
+ core: fix garbled audio on media bug during bridge using stateful codecs (FSCORE-288)
+ core: fix tone detect running multiple bugs when detecting multiple tones
+ core: add {instant_ringback=true} to make ringback not wait for indication to generate ringback
+ core: fix segfault from race condition on multiple reloadxml calls (MOODAPP-211)
+ core: modify xml locking so phrases do not lock the xml for the duration of playing them
+ core: replace resampler with the speexdsp resampler
+ core: fix windows calling convention on threads launched that return a value to fix shutdown segfault (FSCORE-298)
+ core: do not auto-export origination_caller_id_* to avoid confusion (r:12052)
+ core: API visibility support (GCC/SUNCC) (FSCORE-264)
+ core: fix leak in exposed event class serialize method (r:12068)
+ core: add volume as possible return value from input callback on embedded languages (r:12114)
+ core: add resampler to seech handles (r:12141)
+ core: add api.getTime to embedded languages (r:12149)
+ freeswitch: allow you to specify -htdocs dir at runtime. (r:11614)
+ fs_cli: add "debug" command to change the esl debug level at runtime (r:11057)
+ iksemel: update to 1.3 (r:11645)
+ libesl: fix disconnect failure (r:11078,11083)
+ libesl: fix solaris build (r:11067,11068)
+ libesl: add c++ wrapper and swigged wrappers for multiple scripting languages
+ libg722_1: fix dct4.h code generator to include the "f" (r:11188-11189,11367)
+ libilbc: update to new library from Steve Underwood
+ mod_amrwb: add amr wideband passthrough codec (r:11971)
+ mod_cepstral: fix failure return code handling (MODASRTTS-9)
+ mod_conference: add 'conference xml_list' and 'conference [conf_name] xml_list' (r:11062-11063)
+ mod_conference: make conference verbose-events param to control if events have all the channel data or not (r:11073-11077)
+ mod_conference: add MINTWO flag to end conference when down to 1 participant (r:11523)
+ mod_conference: refactor conference record function (r:11626)
+ mod_conference: add conference list summary command (MODAPP-197)
+ mod_conference: fix Deadlock or coredump on conference commands play, transfer (MODAPP-209)
+ mod_dahdi_codec: added (MODCODEC-7)
+ mod_dialplan_xml: make previous auto hunt feature optional and off by defaule use auto_hunt=true session or global variable to enable (r:12144)
+ mod_dptools: Add failure_causes channel variable (r:12058)
+ mod_easyroute: add configuration file example for custom-query (r:11055)
+ mod_easyroute: add custom-query configuration option (r:11054)
+ mod_easyroute: fix build error when not configured for odbc (r:11478)
+ mod_easyroute: fix memory leak (r:11611)
+ mod_erlang_event: add ability to spawn a process (module/function) outbound on a specified node. (r:11460,11477)
+ mod_erlang_event: Fix some issues with standing up a new outbound listener and cleaning up after a failed session (r:11479)
+ mod_erlang_event: Fix setting up a listener for an outbound session if one doesn't already exist (r:11488)
+ mod_erlang_event: add "erlang" fscli command (r:11488)
+ mod_erlang_event: Monitor spawned outbound processes for premature exits (r:11489)
+ mod_erlang_event: Allow the event encoding strategy to be configurable; choices are string or binary (r:11495)
+ mod_erlang_event: Allow certain tuple elements to be binaries or strings, to reduce conversion requirements on the erlang side (r:11496)
+ mod_erlang_event: Support sending a message to a registered process to request a pid (when spawning won't cut it) (r:11499)
+ mod_erlang_event: Ensure events received while a pid session is being created aren't discarded but are queued instead (r:11500)
+ mod_erlang_event: Add freeswitch.erl - An erlang module to make talking to mod_erlang_event more painless (r:11525)
+ mod_erlang_event: use rpc:call instead of spawn and to make the registered process argument to handlecall optional (r:11542)
+ mod_event_socket: add ability to use a comma sep list of events on event-sink create-listener (r:11056)
+ mod_event_socket: add debug logging to event-sink (r:11060)
+ mod_event_socket: fix race condition (r:11680,12146)
+ mod_dptools: add all modifier to break command (r:11557,11558)
+ mod_dptools: add sound_test application (r:11658)
+ mod_fax: Dont hangup after sending/receiving faxes
+ mod_fifo: pause media bugs while not in a bridge (r:11466,11490)
+ mod_fifo: allow unpark during chime list playing (r:11555/MODAPP-206)
+ mod_fifo: fix outbound fifos doesn't check if the consumer is in the fifo in question. (r:11561/MODAPP-207)
+ mod_fifo: Fix segfault when no argument were supplied to fifo_member call (MODAPP-210)
+ mod_lcr: added (r:11180,11184,11532,11609)
+ mod_limit: fix memory corruption caused by race condition when using limit hash (r:11070-11071)
+ mod_limit: Fix transfer bug, fix leak and make the channel hangup if the extension is \!hangup_cause (r:11604,11932)
+ mod_limit: add write different channel variables per realm_id (r:11608)
+ mod_limit: Make max argument optional on the limit app, set the limit_usage variable to current count after inserting call in the db (r:11955)
+ mod_lua: Create empty argv table when no args are passed to a Lua script (r:11559)
+ mod_lua: use dll for lua windows build (FSCORE-299)
+ mod_openmrcp: removed (r:11176-11179)
+ mod_opal: added
+ mod_pocketsphinx: fix leak (r:11974)
+ mod_portaudio: fix stuck channels on outbound calls (r:11160,11470,11471,11472,11475,11476,11485)
+ mod_python: fix build when site dir is not /usr/lib/python2.4 (r:12070)
+ mod_say_en: add short form date/time (MODAPP-180)
+ mod_sofia: add auto-rtp-bugs profile option to make rtp bug compensation configurable (r :11146-11147)
+ mod_sofia: add support in sdp for a=maxptime (r:11103)
+ mod_sofia: fix codec change race condition (r:11143)
+ mod_sofia: fix notify event wasn't allowing content-length 0 (r:11106/MODENDP-167)
+ mod_sofia: fix sending extra sdp in 200 OK when using 100rel in violation of sdp o/a protocol draft-ietf-sipping-sip-offeranswer-10 (r:11088)
+ mod_sofia: fix sip_auto_answer=true (r:11069)
+ mod_sofia: improve outbound registration error message (r:11059)
+ mod_sofia: reset media timeout on re-invite (r:11161)
+ mod_sofia: fix segfault due to missing contact header in invite (r:11463/MODENDP-177)
+ mod_sofia: allow <params> tag in gateways as well as <variables> with direction inbound/outbound (default both) and call counter (r:11468)
+ mod_sofia: add support or SLA, works with Polycom and Snom(Sylantro mode). (r:11562/MODENDP-179)
+ mod_sofia: tolerate missing user in the request uri (r:11636)
+ mod_sofia: Add purpose=gateways and profile=[name] so xml_curl requests make sense (MDXMLINT-46)
+ mod_sofia: Add disable-srv and disable-naptr params to sip profiles (default false) (MODENDP-183)
+ mod_sofia: add outbound-proxy param (MODENDP-184)
+ mod_sofia: fix segfault with stun-enabled=false (SFSIP-120)
+ mod_sofia: Profile Name in Expire Event is incorrect (MODENDP-185)
+ mod_sofia: add "scrooge" mode to "inbound-codec-negotiation" (r:11881)
+ mod_sofia: Add context to reconfig_sofia (r:12080)
+ mod_sofia: fix segfault when calling from a Cisco 7940 using bypass_media (FSCORE-301)
+ mod_sofia: ilbc to default to 30 if no mode= fmtp is defined on the inbound (r:12110)
+ mod_sofia: fix challenge-realm (r:12113)
+ mod_sofia: Segmentation fault when running killgw command on sofia profile without specifying a gateway (MODENDP-189)
+ mod_sofia: gateways will inherit the context from its parent unless manually provided (r:12138)
+ mod_sndfile: Add IMA ADPCM support (MODFORM-22)
+ mod_spidermonkey: fix loading of spidermonkey modules (r:11084-11085)
+ mod_spidermonkey: block some unwanted behaviours in session.originate
+ mod_spidermonkey_socket: fix gc blocking (MODLANG-97)
+ mod_xml_rpc: fixed authentication using @domain syntax (r:11064)
+ mod_xml_rpc: fix http content types sent in responses (r:11099,11148,11150)
+ mod_voicemail: voicemail insert into the proper fields (MODAPP-190)
+ mod_voipcodecs: add G.726 24k (r:12083)
+ sofia-sip: update to current sofia-sip repository
+ spandsp: sync to latest snapshot and fix windows build
+ speex: updated to 1.2rc1
+ sqlite: fix random assert on windows (FSCORE-292)
+
+
freeswitch (1.0.2)
all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36)
Modified: freeswitch/branches/seven/docs/phrase/phrase_en.xml (14471 => 14472)
--- freeswitch/branches/seven/docs/phrase/phrase_en.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/docs/phrase/phrase_en.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -169,7 +169,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"/>
@@ -203,7 +203,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"/>
@@ -217,11 +217,12 @@
<prompt phrase="in folder inbox" filename="vm-in_folder.wav"/>
<prompt phrase="to return the call now" filename="vm-return_call.wav"/>
<prompt phrase="urgent" filename="vm-urgent.wav"/>
+ <prompt phrase="That mailbox is full. Please try your call again later." filename="vm-mailbox_full.wav"/>
</voicemail>
<conference>
<prompt phrase="NULL" filename="conf-ack.wav" type="tone"/>
<prompt phrase="NULL" filename="conf-nack.wav" type="tone"/>
- <prompt phrase="You are now muted." filename="conf-mute.wav"/>
+ <prompt phrase="You are now muted." filename="conf-muted.wav"/>
<prompt phrase="You are now unmuted." filename="conf-unmuted.wav"/>
<prompt phrase="You are currently the only person in this conference." filename="conf-alone.wav"/>
<prompt phrase="NULL" filename="conf-perpetual.wav" type="music"/>
@@ -281,6 +282,26 @@
<prompt phrase="Customer service" filename="ivr-customer_service.wav"/>
<prompt phrase="Technical support" filename="ivr-technical_support.wav"/>
<prompt phrase="Operator" filename="ivr-operator.wav"/>
+ <prompt phrase="You have dialed an invalid extension." filename="ivr-you_have_dialed_an_invalid_extension.wav"/>
+ <prompt phrase="Please enter your extension, followed by the pound sign." filename="ivr-please_enter_extension_followed_by_pound.wav"/>
+ <prompt phrase="Please enter your pin number, followed by the pound sign." filename="ivr-please_enter_pin_followed_by_pound.wav"/>
+ <prompt phrase="Your pin number or extension is invalid." filename="ivr-pin_or_extension_is-invalid.wav"/>
+ <prompt phrase="You are about to provision this phone to your account..." filename="ivr-you_are_about_to_provision_this_phone.wav"/>
+ <prompt phrase="Please re-enter your pin number to confirm." filename="ivr-please_reenter_your_pin.wav"/>
+ <prompt phrase="To register for ClueCon, please press..." filename="ivr-register_for_cluecon.wav"/>
+ <prompt phrase="to log in" filename="ivr-to_log_in.wav"/>
+ <prompt phrase="to log out" filename="ivr-to_log_out.wav"/>
+ <prompt phrase="You are now logged in" filename="ivr-you_are_now_logged_in.wav"/>
+ <prompt phrase="You are now logged out" filename="ivr-you_are_now_logged_out.wav"/>
+ <prompt phrase="Please try again." filename="ivr-please_try_again.wav"/>
+ <prompt phrase="You are about to provision this phone permanently to your extension." filename="ivr-provision_phone_permanently_to_extension.wav"/>
+ <prompt phrase="Please enter the extension number to which you would like to provision this phone, followed by the pound sign." filename="ivr-extension_to_provision_this_phone.wav"/>
+ <prompt phrase="Thank you, this phone will now reboot." filename="ivr-this_phone_will_now_reboot.wav"/>
+ <!-- The following three phrases still need to be recorded -->
+ <prompt phrase="Thank you. Your recording has been saved." filename="ivr-recording_saved.wav" attr="Needs_to_be_recorded!"/>
+ <prompt phrase="Press 1 to save your recording. Press 2 to review your recording. Press 3 to re-record." filename="ivr-save_review_record.wav" attr="Needs_to_be_recorded!"/>
+ <prompt phrase="The system is unable to save your sound file at this time. Please try again later." filename="ivr-unable_save" attr="Needs_to_be_recorded!"/>
+
</ivr>
<misc>
<prompt phrase="This call has been secured" filename="call_secured.wav"/>
@@ -292,6 +313,539 @@
<prompt phrase="Transfer" filename="transfer2.wav"/>
<prompt phrase="We are trying to reach" filename="we_are_trying_to_reach.wav"/>
<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"/>
</misc>
+ <zrtp>
+ <!-- base256 prompts for SAS -->
+ <prompt phrase="Algol" filename="Algol.wav"/>
+ <prompt phrase="Apollo" filename="Apollo.wav"/>
+ <prompt phrase="Athens" filename="Athens.wav"/>
+ <prompt phrase="Atlantic" filename="Atlantic.wav"/>
+ <prompt phrase="Aztec" filename="Aztec.wav"/>
+ <prompt phrase="Babylon" filename="Babylon.wav"/>
+ <prompt phrase="Belfast" filename="Belfast.wav"/>
+ <prompt phrase="Bradbury" filename="Bradbury.wav"/>
+ <prompt phrase="Brazilian" filename="Brazilian.wav"/>
+ <prompt phrase="Burbank" filename="Burbank.wav"/>
+ <prompt phrase="Burlington" filename="Burlington.wav"/>
+ <prompt phrase="Camelot" filename="Camelot.wav"/>
+ <prompt phrase="Capricorn" filename="Capricorn.wav"/>
+ <prompt phrase="Cherokee" filename="Cherokee.wav"/>
+ <prompt phrase="Chicago" filename="Chicago.wav"/>
+ <prompt phrase="Christmas" filename="Christmas.wav"/>
+ <prompt phrase="Dakota" filename="Dakota.wav"/>
+ <prompt phrase="December" filename="December.wav"/>
+ <prompt phrase="Dupont" filename="Dupont.wav"/>
+ <prompt phrase="Eskimo" filename="Eskimo.wav"/>
+ <prompt phrase="Galveston" filename="Galveston.wav"/>
+ <prompt phrase="Geiger" filename="Geiger.wav"/>
+ <prompt phrase="Hamilton" filename="Hamilton.wav"/>
+ <prompt phrase="Istanbul" filename="Istanbul.wav"/>
+ <prompt phrase="Jamaica" filename="Jamaica.wav"/>
+ <prompt phrase="Jupiter" filename="Jupiter.wav"/>
+ <prompt phrase="Medusa" filename="Medusa.wav"/>
+ <prompt phrase="Mohawk" filename="Mohawk.wav"/>
+ <prompt phrase="Montana" filename="Montana.wav"/>
+ <prompt phrase="Neptune" filename="Neptune.wav"/>
+ <prompt phrase="Norwegian" filename="Norwegian.wav"/>
+ <prompt phrase="Oakland" filename="Oakland.wav"/>
+ <prompt phrase="October" filename="October.wav"/>
+ <prompt phrase="Ohio" filename="Ohio.wav"/>
+ <prompt phrase="Orlando" filename="Orlando.wav"/>
+ <prompt phrase="Pacific" filename="Pacific.wav"/>
+ <prompt phrase="Pandora" filename="Pandora.wav"/>
+ <prompt phrase="Pegasus" filename="Pegasus.wav"/>
+ <prompt phrase="Pluto" filename="Pluto.wav"/>
+ <prompt phrase="Saturday" filename="Saturday.wav"/>
+ <prompt phrase="Scotland" filename="Scotland.wav"/>
+ <prompt phrase="Trojan" filename="Trojan.wav"/>
+ <prompt phrase="Virginia" filename="Virginia.wav"/>
+ <prompt phrase="Vulcan" filename="Vulcan.wav"/>
+ <prompt phrase="Waterloo" filename="Waterloo.wav"/>
+ <prompt phrase="Wichita" filename="Wichita.wav"/>
+ <prompt phrase="Wilmington" filename="Wilmington.wav"/>
+ <prompt phrase="Wyoming" filename="Wyoming.wav"/>
+ <prompt phrase="Yucatan" filename="Yucatan.wav"/>
+ <prompt phrase="Zulu" filename="Zulu.wav"/>
+ <prompt phrase="aardvark" filename="aardvark.wav"/>
+ <prompt phrase="absurd" filename="absurd.wav"/>
+ <prompt phrase="accrue" filename="accrue.wav"/>
+ <prompt phrase="acme" filename="acme.wav"/>
+ <prompt phrase="adrift" filename="adrift.wav"/>
+ <prompt phrase="adroitness" filename="adroitness.wav"/>
+ <prompt phrase="adult" filename="adult.wav"/>
+ <prompt phrase="adviser" filename="adviser.wav"/>
+ <prompt phrase="afflict" filename="afflict.wav"/>
+ <prompt phrase="aftermath" filename="aftermath.wav"/>
+ <prompt phrase="aggregate" filename="aggregate.wav"/>
+ <prompt phrase="ahead" filename="ahead.wav"/>
+ <prompt phrase="aimless" filename="aimless.wav"/>
+ <prompt phrase="alkali" filename="alkali.wav"/>
+ <prompt phrase="allow" filename="allow.wav"/>
+ <prompt phrase="almighty" filename="almighty.wav"/>
+ <prompt phrase="alone" filename="alone.wav"/>
+ <prompt phrase="ammo" filename="ammo.wav"/>
+ <prompt phrase="amulet" filename="amulet.wav"/>
+ <prompt phrase="amusement" filename="amusement.wav"/>
+ <prompt phrase="ancient" filename="ancient.wav"/>
+ <prompt phrase="antenna" filename="antenna.wav"/>
+ <prompt phrase="apple" filename="apple.wav"/>
+ <prompt phrase="applicant" filename="applicant.wav"/>
+ <prompt phrase="armistice" filename="armistice.wav"/>
+ <prompt phrase="article" filename="article.wav"/>
+ <prompt phrase="artist" filename="artist.wav"/>
+ <prompt phrase="assume" filename="assume.wav"/>
+ <prompt phrase="asteroid" filename="asteroid.wav"/>
+ <prompt phrase="atlas" filename="atlas.wav"/>
+ <prompt phrase="atmosphere" filename="atmosphere.wav"/>
+ <prompt phrase="autopsy" filename="autopsy.wav"/>
+ <prompt phrase="baboon" filename="baboon.wav"/>
+ <prompt phrase="backfield" filename="backfield.wav"/>
+ <prompt phrase="backward" filename="backward.wav"/>
+ <prompt phrase="backwater" filename="backwater.wav"/>
+ <prompt phrase="banjo" filename="banjo.wav"/>
+ <prompt phrase="barbecue" filename="barbecue.wav"/>
+ <prompt phrase="beaming" filename="beaming.wav"/>
+ <prompt phrase="bedlamp" filename="bedlamp.wav"/>
+ <prompt phrase="beehive" filename="beehive.wav"/>
+ <prompt phrase="beeswax" filename="beeswax.wav"/>
+ <prompt phrase="befriend" filename="befriend.wav"/>
+ <prompt phrase="belowground" filename="belowground.wav"/>
+ <prompt phrase="berserk" filename="berserk.wav"/>
+ <prompt phrase="bifocals" filename="bifocals.wav"/>
+ <prompt phrase="billiard" filename="billiard.wav"/>
+ <prompt phrase="bison" filename="bison.wav"/>
+ <prompt phrase="blackjack" filename="blackjack.wav"/>
+ <prompt phrase="blockade" filename="blockade.wav"/>
+ <prompt phrase="blowtorch" filename="blowtorch.wav"/>
+ <prompt phrase="bluebird" filename="bluebird.wav"/>
+ <prompt phrase="bodyguard" filename="bodyguard.wav"/>
+ <prompt phrase="bombast" filename="bombast.wav"/>
+ <prompt phrase="bookseller" filename="bookseller.wav"/>
+ <prompt phrase="bookshelf" filename="bookshelf.wav"/>
+ <prompt phrase="borderline" filename="borderline.wav"/>
+ <prompt phrase="bottomless" filename="bottomless.wav"/>
+ <prompt phrase="brackish" filename="brackish.wav"/>
+ <prompt phrase="bravado" filename="bravado.wav"/>
+ <prompt phrase="breadline" filename="breadline.wav"/>
+ <prompt phrase="breakaway" filename="breakaway.wav"/>
+ <prompt phrase="breakup" filename="breakup.wav"/>
+ <prompt phrase="brickyard" filename="brickyard.wav"/>
+ <prompt phrase="briefcase" filename="briefcase.wav"/>
+ <prompt phrase="businessman" filename="businessman.wav"/>
+ <prompt phrase="butterfat" filename="butterfat.wav"/>
+ <prompt phrase="button" filename="button.wav"/>
+ <prompt phrase="buzzard" filename="buzzard.wav"/>
+ <prompt phrase="candidate" filename="candidate.wav"/>
+ <prompt phrase="cannonball" filename="cannonball.wav"/>
+ <prompt phrase="caravan" filename="caravan.wav"/>
+ <prompt phrase="caretaker" filename="caretaker.wav"/>
+ <prompt phrase="celebrate" filename="celebrate.wav"/>
+ <prompt phrase="cellulose" filename="cellulose.wav"/>
+ <prompt phrase="cement" filename="cement.wav"/>
+ <prompt phrase="certify" filename="certify.wav"/>
+ <prompt phrase="chairlift" filename="chairlift.wav"/>
+ <prompt phrase="chambermaid" filename="chambermaid.wav"/>
+ <prompt phrase="chatter" filename="chatter.wav"/>
+ <prompt phrase="checkup" filename="checkup.wav"/>
+ <prompt phrase="chisel" filename="chisel.wav"/>
+ <prompt phrase="choking" filename="choking.wav"/>
+ <prompt phrase="chopper" filename="chopper.wav"/>
+ <prompt phrase="clamshell" filename="clamshell.wav"/>
+ <prompt phrase="classic" filename="classic.wav"/>
+ <prompt phrase="classroom" filename="classroom.wav"/>
+ <prompt phrase="cleanup" filename="cleanup.wav"/>
+ <prompt phrase="clergyman" filename="clergyman.wav"/>
+ <prompt phrase="clockwork" filename="clockwork.wav"/>
+ <prompt phrase="cobra" filename="cobra.wav"/>
+ <prompt phrase="coherence" filename="coherence.wav"/>
+ <prompt phrase="combustion" filename="combustion.wav"/>
+ <prompt phrase="commando" filename="commando.wav"/>
+ <prompt phrase="commence" filename="commence.wav"/>
+ <prompt phrase="company" filename="company.wav"/>
+ <prompt phrase="component" filename="component.wav"/>
+ <prompt phrase="concert" filename="concert.wav"/>
+ <prompt phrase="concurrent" filename="concurrent.wav"/>
+ <prompt phrase="confidence" filename="confidence.wav"/>
+ <prompt phrase="conformist" filename="conformist.wav"/>
+ <prompt phrase="congregate" filename="congregate.wav"/>
+ <prompt phrase="consensus" filename="consensus.wav"/>
+ <prompt phrase="consulting" filename="consulting.wav"/>
+ <prompt phrase="corporate" filename="corporate.wav"/>
+ <prompt phrase="corrosion" filename="corrosion.wav"/>
+ <prompt phrase="councilman" filename="councilman.wav"/>
+ <prompt phrase="cowbell" filename="cowbell.wav"/>
+ <prompt phrase="crackdown" filename="crackdown.wav"/>
+ <prompt phrase="cranky" filename="cranky.wav"/>
+ <prompt phrase="crossover" filename="crossover.wav"/>
+ <prompt phrase="crowfoot" filename="crowfoot.wav"/>
+ <prompt phrase="crucial" filename="crucial.wav"/>
+ <prompt phrase="crucifix" filename="crucifix.wav"/>
+ <prompt phrase="crumpled" filename="crumpled.wav"/>
+ <prompt phrase="crusade" filename="crusade.wav"/>
+ <prompt phrase="cubic" filename="cubic.wav"/>
+ <prompt phrase="cumbersome" filename="cumbersome.wav"/>
+ <prompt phrase="customer" filename="customer.wav"/>
+ <prompt phrase="dashboard" filename="dashboard.wav"/>
+ <prompt phrase="deadbolt" filename="deadbolt.wav"/>
+ <prompt phrase="decadence" filename="decadence.wav"/>
+ <prompt phrase="decimal" filename="decimal.wav"/>
+ <prompt phrase="deckhand" filename="deckhand.wav"/>
+ <prompt phrase="designing" filename="designing.wav"/>
+ <prompt phrase="detector" filename="detector.wav"/>
+ <prompt phrase="detergent" filename="detergent.wav"/>
+ <prompt phrase="determine" filename="determine.wav"/>
+ <prompt phrase="dictator" filename="dictator.wav"/>
+ <prompt phrase="dinosaur" filename="dinosaur.wav"/>
+ <prompt phrase="direction" filename="direction.wav"/>
+ <prompt phrase="disable" filename="disable.wav"/>
+ <prompt phrase="disbelief" filename="disbelief.wav"/>
+ <prompt phrase="disruptive" filename="disruptive.wav"/>
+ <prompt phrase="distortion" filename="distortion.wav"/>
+ <prompt phrase="document" filename="document.wav"/>
+ <prompt phrase="dogsled" filename="dogsled.wav"/>
+ <prompt phrase="dragnet" filename="dragnet.wav"/>
+ <prompt phrase="drainage" filename="drainage.wav"/>
+ <prompt phrase="dreadful" filename="dreadful.wav"/>
+ <prompt phrase="drifter" filename="drifter.wav"/>
+ <prompt phrase="dropper" filename="dropper.wav"/>
+ <prompt phrase="drumbeat" filename="drumbeat.wav"/>
+ <prompt phrase="drunken" filename="drunken.wav"/>
+ <prompt phrase="dwelling" filename="dwelling.wav"/>
+ <prompt phrase="eating" filename="eating.wav"/>
+ <prompt phrase="edict" filename="edict.wav"/>
+ <prompt phrase="egghead" filename="egghead.wav"/>
+ <prompt phrase="eightball" filename="eightball.wav"/>
+ <prompt phrase="embezzle" filename="embezzle.wav"/>
+ <prompt phrase="enchanting" filename="enchanting.wav"/>
+ <prompt phrase="endorse" filename="endorse.wav"/>
+ <prompt phrase="endow" filename="endow.wav"/>
+ <prompt phrase="enlist" filename="enlist.wav"/>
+ <prompt phrase="enrollment" filename="enrollment.wav"/>
+ <prompt phrase="enterprise" filename="enterprise.wav"/>
+ <prompt phrase="equation" filename="equation.wav"/>
+ <prompt phrase="equipment" filename="equipment.wav"/>
+ <prompt phrase="erase" filename="erase.wav"/>
+ <prompt phrase="escapade" filename="escapade.wav"/>
+ <prompt phrase="escape" filename="escape.wav"/>
+ <prompt phrase="everyday" filename="everyday.wav"/>
+ <prompt phrase="examine" filename="examine.wav"/>
+ <prompt phrase="exceed" filename="exceed.wav"/>
+ <prompt phrase="existence" filename="existence.wav"/>
+ <prompt phrase="exodus" filename="exodus.wav"/>
+ <prompt phrase="eyeglass" filename="eyeglass.wav"/>
+ <prompt phrase="eyetooth" filename="eyetooth.wav"/>
+ <prompt phrase="facial" filename="facial.wav"/>
+ <prompt phrase="fallout" filename="fallout.wav"/>
+ <prompt phrase="fascinate" filename="fascinate.wav"/>
+ <prompt phrase="filament" filename="filament.wav"/>
+ <prompt phrase="finicky" filename="finicky.wav"/>
+ <prompt phrase="flagpole" filename="flagpole.wav"/>
+ <prompt phrase="flatfoot" filename="flatfoot.wav"/>
+ <prompt phrase="flytrap" filename="flytrap.wav"/>
+ <prompt phrase="forever" filename="forever.wav"/>
+ <prompt phrase="fortitude" filename="fortitude.wav"/>
+ <prompt phrase="fracture" filename="fracture.wav"/>
+ <prompt phrase="framework" filename="framework.wav"/>
+ <prompt phrase="freedom" filename="freedom.wav"/>
+ <prompt phrase="frequency" filename="frequency.wav"/>
+ <prompt phrase="frighten" filename="frighten.wav"/>
+ <prompt phrase="gadgetry" filename="gadgetry.wav"/>
+ <prompt phrase="gazelle" filename="gazelle.wav"/>
+ <prompt phrase="getaway" filename="getaway.wav"/>
+ <prompt phrase="glitter" filename="glitter.wav"/>
+ <prompt phrase="glossary" filename="glossary.wav"/>
+ <prompt phrase="glucose" filename="glucose.wav"/>
+ <prompt phrase="goggles" filename="goggles.wav"/>
+ <prompt phrase="goldfish" filename="goldfish.wav"/>
+ <prompt phrase="gossamer" filename="gossamer.wav"/>
+ <prompt phrase="graduate" filename="graduate.wav"/>
+ <prompt phrase="gravity" filename="gravity.wav"/>
+ <prompt phrase="gremlin" filename="gremlin.wav"/>
+ <prompt phrase="guidance" filename="guidance.wav"/>
+ <prompt phrase="guitarist" filename="guitarist.wav"/>
+ <prompt phrase="hamburger" filename="hamburger.wav"/>
+ <prompt phrase="hamlet" filename="hamlet.wav"/>
+ <prompt phrase="handiwork" filename="handiwork.wav"/>
+ <prompt phrase="hazardous" filename="hazardous.wav"/>
+ <prompt phrase="headwaters" filename="headwaters.wav"/>
+ <prompt phrase="hemisphere" filename="hemisphere.wav"/>
+ <prompt phrase="hesitate" filename="hesitate.wav"/>
+ <prompt phrase="hideaway" filename="hideaway.wav"/>
+ <prompt phrase="highchair" filename="highchair.wav"/>
+ <prompt phrase="hockey" filename="hockey.wav"/>
+ <prompt phrase="holiness" filename="holiness.wav"/>
+ <prompt phrase="hurricane" filename="hurricane.wav"/>
+ <prompt phrase="hydraulic" filename="hydraulic.wav"/>
+ <prompt phrase="impartial" filename="impartial.wav"/>
+ <prompt phrase="impetus" filename="impetus.wav"/>
+ <prompt phrase="inception" filename="inception.wav"/>
+ <prompt phrase="indigo" filename="indigo.wav"/>
+ <prompt phrase="indoors" filename="indoors.wav"/>
+ <prompt phrase="indulge" filename="indulge.wav"/>
+ <prompt phrase="inertia" filename="inertia.wav"/>
+ <prompt phrase="infancy" filename="infancy.wav"/>
+ <prompt phrase="inferno" filename="inferno.wav"/>
+ <prompt phrase="informant" filename="informant.wav"/>
+ <prompt phrase="insincere" filename="insincere.wav"/>
+ <prompt phrase="insurgent" filename="insurgent.wav"/>
+ <prompt phrase="integrate" filename="integrate.wav"/>
+ <prompt phrase="intention" filename="intention.wav"/>
+ <prompt phrase="inventive" filename="inventive.wav"/>
+ <prompt phrase="inverse" filename="inverse.wav"/>
+ <prompt phrase="involve" filename="involve.wav"/>
+ <prompt phrase="island" filename="island.wav"/>
+ <prompt phrase="jawbone" filename="jawbone.wav"/>
+ <prompt phrase="keyboard" filename="keyboard.wav"/>
+ <prompt phrase="kickoff" filename="kickoff.wav"/>
+ <prompt phrase="kiwi" filename="kiwi.wav"/>
+ <prompt phrase="klaxon" filename="klaxon.wav"/>
+ <prompt phrase="leprosy" filename="leprosy.wav"/>
+ <prompt phrase="letterhead" filename="letterhead.wav"/>
+ <prompt phrase="liberty" filename="liberty.wav"/>
+ <prompt phrase="locale" filename="locale.wav"/>
+ <prompt phrase="lockup" filename="lockup.wav"/>
+ <prompt phrase="maritime" filename="maritime.wav"/>
+ <prompt phrase="matchmaker" filename="matchmaker.wav"/>
+ <prompt phrase="maverick" filename="maverick.wav"/>
+ <prompt phrase="megaton" filename="megaton.wav"/>
+ <prompt phrase="merit" filename="merit.wav"/>
+ <prompt phrase="microscope" filename="microscope.wav"/>
+ <prompt phrase="microwave" filename="microwave.wav"/>
+ <prompt phrase="midsummer" filename="midsummer.wav"/>
+ <prompt phrase="millionaire" filename="millionaire.wav"/>
+ <prompt phrase="minnow" filename="minnow.wav"/>
+ <prompt phrase="miracle" filename="miracle.wav"/>
+ <prompt phrase="miser" filename="miser.wav"/>
+ <prompt phrase="misnomer" filename="misnomer.wav"/>
+ <prompt phrase="molasses" filename="molasses.wav"/>
+ <prompt phrase="molecule" filename="molecule.wav"/>
+ <prompt phrase="monument" filename="monument.wav"/>
+ <prompt phrase="mosquito" filename="mosquito.wav"/>
+ <prompt phrase="mural" filename="mural.wav"/>
+ <prompt phrase="music" filename="music.wav"/>
+ <prompt phrase="narrative" filename="narrative.wav"/>
+ <prompt phrase="nebula" filename="nebula.wav"/>
+ <prompt phrase="necklace" filename="necklace.wav"/>
+ <prompt phrase="newborn" filename="newborn.wav"/>
+ <prompt phrase="newsletter" filename="newsletter.wav"/>
+ <prompt phrase="nightbird" filename="nightbird.wav"/>
+ <prompt phrase="obtuse" filename="obtuse.wav"/>
+ <prompt phrase="offload" filename="offload.wav"/>
+ <prompt phrase="onlooker" filename="onlooker.wav"/>
+ <prompt phrase="optic" filename="optic.wav"/>
+ <prompt phrase="opulent" filename="opulent.wav"/>
+ <prompt phrase="orca" filename="orca.wav"/>
+ <prompt phrase="outfielder" filename="outfielder.wav"/>
+ <prompt phrase="pandemic" filename="pandemic.wav"/>
+ <prompt phrase="paperweight" filename="paperweight.wav"/>
+ <prompt phrase="paragon" filename="paragon.wav"/>
+ <prompt phrase="paragraph" filename="paragraph.wav"/>
+ <prompt phrase="paramount" filename="paramount.wav"/>
+ <prompt phrase="passenger" filename="passenger.wav"/>
+ <prompt phrase="payday" filename="payday.wav"/>
+ <prompt phrase="peachy" filename="peachy.wav"/>
+ <prompt phrase="pedigree" filename="pedigree.wav"/>
+ <prompt phrase="penetrate" filename="penetrate.wav"/>
+ <prompt phrase="perceptive" filename="perceptive.wav"/>
+ <prompt phrase="performance" filename="performance.wav"/>
+ <prompt phrase="pharmacy" filename="pharmacy.wav"/>
+ <prompt phrase="pheasant" filename="pheasant.wav"/>
+ <prompt phrase="phonetic" filename="phonetic.wav"/>
+ <prompt phrase="photograph" filename="photograph.wav"/>
+ <prompt phrase="physique" filename="physique.wav"/>
+ <prompt phrase="pioneer" filename="pioneer.wav"/>
+ <prompt phrase="playhouse" filename="playhouse.wav"/>
+ <prompt phrase="pocketful" filename="pocketful.wav"/>
+ <prompt phrase="politeness" filename="politeness.wav"/>
+ <prompt phrase="positive" filename="positive.wav"/>
+ <prompt phrase="potato" filename="potato.wav"/>
+ <prompt phrase="preclude" filename="preclude.wav"/>
+ <prompt phrase="prefer" filename="prefer.wav"/>
+ <prompt phrase="preshrunk" filename="preshrunk.wav"/>
+ <prompt phrase="printer" filename="printer.wav"/>
+ <prompt phrase="processor" filename="processor.wav"/>
+ <prompt phrase="provincial" filename="provincial.wav"/>
+ <prompt phrase="prowler" filename="prowler.wav"/>
+ <prompt phrase="proximate" filename="proximate.wav"/>
+ <prompt phrase="puberty" filename="puberty.wav"/>
+ <prompt phrase="publisher" filename="publisher.wav"/>
+ <prompt phrase="pupil" filename="pupil.wav"/>
+ <prompt phrase="puppy" filename="puppy.wav"/>
+ <prompt phrase="pyramid" filename="pyramid.wav"/>
+ <prompt phrase="python" filename="python.wav"/>
+ <prompt phrase="quadrant" filename="quadrant.wav"/>
+ <prompt phrase="quantity" filename="quantity.wav"/>
+ <prompt phrase="quiver" filename="quiver.wav"/>
+ <prompt phrase="quota" filename="quota.wav"/>
+ <prompt phrase="racketeer" filename="racketeer.wav"/>
+ <prompt phrase="ragtime" filename="ragtime.wav"/>
+ <prompt phrase="ratchet" filename="ratchet.wav"/>
+ <prompt phrase="rebellion" filename="rebellion.wav"/>
+ <prompt phrase="rebirth" filename="rebirth.wav"/>
+ <prompt phrase="recipe" filename="recipe.wav"/>
+ <prompt phrase="recover" filename="recover.wav"/>
+ <prompt phrase="reform" filename="reform.wav"/>
+ <prompt phrase="regain" filename="regain.wav"/>
+ <prompt phrase="reindeer" filename="reindeer.wav"/>
+ <prompt phrase="rematch" filename="rematch.wav"/>
+ <prompt phrase="repay" filename="repay.wav"/>
+ <prompt phrase="repellent" filename="repellent.wav"/>
+ <prompt phrase="replica" filename="replica.wav"/>
+ <prompt phrase="reproduce" filename="reproduce.wav"/>
+ <prompt phrase="resistor" filename="resistor.wav"/>
+ <prompt phrase="responsive" filename="responsive.wav"/>
+ <prompt phrase="retouch" filename="retouch.wav"/>
+ <prompt phrase="retraction" filename="retraction.wav"/>
+ <prompt phrase="retrieval" filename="retrieval.wav"/>
+ <prompt phrase="retrospect" filename="retrospect.wav"/>
+ <prompt phrase="revenge" filename="revenge.wav"/>
+ <prompt phrase="revenue" filename="revenue.wav"/>
+ <prompt phrase="revival" filename="revival.wav"/>
+ <prompt phrase="revolver" filename="revolver.wav"/>
+ <prompt phrase="reward" filename="reward.wav"/>
+ <prompt phrase="rhythm" filename="rhythm.wav"/>
+ <prompt phrase="ribcage" filename="ribcage.wav"/>
+ <prompt phrase="ringbolt" filename="ringbolt.wav"/>
+ <prompt phrase="robust" filename="robust.wav"/>
+ <prompt phrase="rocker" filename="rocker.wav"/>
+ <prompt phrase="ruffled" filename="ruffled.wav"/>
+ <prompt phrase="sailboat" filename="sailboat.wav"/>
+ <prompt phrase="sandalwood" filename="sandalwood.wav"/>
+ <prompt phrase="sardonic" filename="sardonic.wav"/>
+ <prompt phrase="savagery" filename="savagery.wav"/>
+ <prompt phrase="sawdust" filename="sawdust.wav"/>
+ <prompt phrase="scallion" filename="scallion.wav"/>
+ <prompt phrase="scavenger" filename="scavenger.wav"/>
+ <prompt phrase="scenic" filename="scenic.wav"/>
+ <prompt phrase="scorecard" filename="scorecard.wav"/>
+ <prompt phrase="seabird" filename="seabird.wav"/>
+ <prompt phrase="select" filename="select.wav"/>
+ <prompt phrase="sensation" filename="sensation.wav"/>
+ <prompt phrase="sentence" filename="sentence.wav"/>
+ <prompt phrase="shadow" filename="shadow.wav"/>
+ <prompt phrase="shamrock" filename="shamrock.wav"/>
+ <prompt phrase="showgirl" filename="showgirl.wav"/>
+ <prompt phrase="skullcap" filename="skullcap.wav"/>
+ <prompt phrase="skydive" filename="skydive.wav"/>
+ <prompt phrase="slingshot" filename="slingshot.wav"/>
+ <prompt phrase="slowdown" filename="slowdown.wav"/>
+ <prompt phrase="snapline" filename="snapline.wav"/>
+ <prompt phrase="snapshot" filename="snapshot.wav"/>
+ <prompt phrase="snowcap" filename="snowcap.wav"/>
+ <prompt phrase="snowslide" filename="snowslide.wav"/>
+ <prompt phrase="sociable" filename="sociable.wav"/>
+ <prompt phrase="solo" filename="solo.wav"/>
+ <prompt phrase="southward" filename="southward.wav"/>
+ <prompt phrase="souvenir" filename="souvenir.wav"/>
+ <prompt phrase="soybean" filename="soybean.wav"/>
+ <prompt phrase="spaniel" filename="spaniel.wav"/>
+ <prompt phrase="spearhead" filename="spearhead.wav"/>
+ <prompt phrase="specialist" filename="specialist.wav"/>
+ <prompt phrase="speculate" filename="speculate.wav"/>
+ <prompt phrase="spellbind" filename="spellbind.wav"/>
+ <prompt phrase="spheroid" filename="spheroid.wav"/>
+ <prompt phrase="spigot" filename="spigot.wav"/>
+ <prompt phrase="spindle" filename="spindle.wav"/>
+ <prompt phrase="spyglass" filename="spyglass.wav"/>
+ <prompt phrase="stagehand" filename="stagehand.wav"/>
+ <prompt phrase="stagnate" filename="stagnate.wav"/>
+ <prompt phrase="stairway" filename="stairway.wav"/>
+ <prompt phrase="standard" filename="standard.wav"/>
+ <prompt phrase="stapler" filename="stapler.wav"/>
+ <prompt phrase="steamship" filename="steamship.wav"/>
+ <prompt phrase="sterling" filename="sterling.wav"/>
+ <prompt phrase="stethoscope" filename="stethoscope.wav"/>
+ <prompt phrase="stockman" filename="stockman.wav"/>
+ <prompt phrase="stopwatch" filename="stopwatch.wav"/>
+ <prompt phrase="stormy" filename="stormy.wav"/>
+ <prompt phrase="stupendous" filename="stupendous.wav"/>
+ <prompt phrase="sugar" filename="sugar.wav"/>
+ <prompt phrase="supportive" filename="supportive.wav"/>
+ <prompt phrase="surmount" filename="surmount.wav"/>
+ <prompt phrase="surrender" filename="surrender.wav"/>
+ <prompt phrase="suspense" filename="suspense.wav"/>
+ <prompt phrase="suspicious" filename="suspicious.wav"/>
+ <prompt phrase="sweatband" filename="sweatband.wav"/>
+ <prompt phrase="swelter" filename="swelter.wav"/>
+ <prompt phrase="sympathy" filename="sympathy.wav"/>
+ <prompt phrase="tactics" filename="tactics.wav"/>
+ <prompt phrase="talon" filename="talon.wav"/>
+ <prompt phrase="tambourine" filename="tambourine.wav"/>
+ <prompt phrase="tapeworm" filename="tapeworm.wav"/>
+ <prompt phrase="telephone" filename="telephone.wav"/>
+ <prompt phrase="tempest" filename="tempest.wav"/>
+ <prompt phrase="therapist" filename="therapist.wav"/>
+ <prompt phrase="tiger" filename="tiger.wav"/>
+ <prompt phrase="tissue" filename="tissue.wav"/>
+ <prompt phrase="tobacco" filename="tobacco.wav"/>
+ <prompt phrase="tolerance" filename="tolerance.wav"/>
+ <prompt phrase="tomorrow" filename="tomorrow.wav"/>
+ <prompt phrase="tonic" filename="tonic.wav"/>
+ <prompt phrase="topmost" filename="topmost.wav"/>
+ <prompt phrase="torpedo" filename="torpedo.wav"/>
+ <prompt phrase="tracker" filename="tracker.wav"/>
+ <prompt phrase="tradition" filename="tradition.wav"/>
+ <prompt phrase="transit" filename="transit.wav"/>
+ <prompt phrase="trauma" filename="trauma.wav"/>
+ <prompt phrase="travesty" filename="travesty.wav"/>
+ <prompt phrase="treadmill" filename="treadmill.wav"/>
+ <prompt phrase="trombonist" filename="trombonist.wav"/>
+ <prompt phrase="trouble" filename="trouble.wav"/>
+ <prompt phrase="truncated" filename="truncated.wav"/>
+ <prompt phrase="tumor" filename="tumor.wav"/>
+ <prompt phrase="tunnel" filename="tunnel.wav"/>
+ <prompt phrase="tycoon" filename="tycoon.wav"/>
+ <prompt phrase="typewriter" filename="typewriter.wav"/>
+ <prompt phrase="ultimate" filename="ultimate.wav"/>
+ <prompt phrase="uncut" filename="uncut.wav"/>
+ <prompt phrase="undaunted" filename="undaunted.wav"/>
+ <prompt phrase="underfoot" filename="underfoot.wav"/>
+ <prompt phrase="unearth" filename="unearth.wav"/>
+ <prompt phrase="unicorn" filename="unicorn.wav"/>
+ <prompt phrase="unify" filename="unify.wav"/>
+ <prompt phrase="universe" filename="universe.wav"/>
+ <prompt phrase="unravel" filename="unravel.wav"/>
+ <prompt phrase="unwind" filename="unwind.wav"/>
+ <prompt phrase="upcoming" filename="upcoming.wav"/>
+ <prompt phrase="uproot" filename="uproot.wav"/>
+ <prompt phrase="upset" filename="upset.wav"/>
+ <prompt phrase="upshot" filename="upshot.wav"/>
+ <prompt phrase="vacancy" filename="vacancy.wav"/>
+ <prompt phrase="vagabond" filename="vagabond.wav"/>
+ <prompt phrase="vapor" filename="vapor.wav"/>
+ <prompt phrase="vertigo" filename="vertigo.wav"/>
+ <prompt phrase="village" filename="village.wav"/>
+ <prompt phrase="virus" filename="virus.wav"/>
+ <prompt phrase="visitor" filename="visitor.wav"/>
+ <prompt phrase="vocalist" filename="vocalist.wav"/>
+ <prompt phrase="voyager" filename="voyager.wav"/>
+ <prompt phrase="waffle" filename="waffle.wav"/>
+ <prompt phrase="wallet" filename="wallet.wav"/>
+ <prompt phrase="warranty" filename="warranty.wav"/>
+ <prompt phrase="watchword" filename="watchword.wav"/>
+ <prompt phrase="wayside" filename="wayside.wav"/>
+ <prompt phrase="whimsical" filename="whimsical.wav"/>
+ <prompt phrase="willow" filename="willow.wav"/>
+ <prompt phrase="woodlark" filename="woodlark.wav"/>
+ <prompt phrase="yesteryear" filename="yesteryear.wav"/>
+ <!-- Event prompts -->
+ <prompt phrase="Welcome to the ZRTP security enrollment agent." filename="zrtp-enroll_welcome.wav"/>
+ <prompt phrase="You must check the authentication string with your partner. If it doesn't match, it indicates the presence of a wire tapper." filename="zrtp-check_sas.wav"/>
+ <prompt phrase="Only phones that are authenticated can be configured to trust this system to relay ZRTP secured calls. Your phone is not authenticated with this system, so this call will have no effect." filename="zrtp-enroll_not_sip_registered.wav"/>
+ <prompt phrase="Your phone indicates that it already trusts this system to relay ZRTP secured calls, so you do not need to do anything more." filename="zrtp-enroll_already_enrolled.wav"/>
+ <prompt phrase="Only phones equipped with the ZRTP protocol can use this extension. Your phone is not a ZRTP-enable phone, so this call will have no effect." filename="zrtp-enroll_notzrtp.wav"/>
+ <prompt phrase="This system is equipped to handle ZRTP encrypted phone calls. You must decide if you want to allow this system to be in a position to intercept and possibly monitor your secure phone calls. You may hang up after you've done this." filename="zrtp-enroll_confirmed.wav"/>
+ <prompt phrase="Verbally compare this authentication code with your partner." filename="zrtp-is_secure.wav"/>
+ <prompt phrase="Authentication code is now unverified." filename="zrtp-is_unverified.wav"/>
+ <prompt phrase="Authentication code is now verified." filename="zrtp-is_verified.wav"/>
+ <prompt phrase="Thank you for calling. Goodbye." filename="zrtp-thankyou_goodbye.wav"/>
+ <prompt phrase="Something's wrong" filename="zrtp-somethings_wrong.wav"/>
+ <prompt phrase="Error." filename="zrtp-status_error.wav"/>
+ <prompt phrase="Call is not secure." filename="zrtp-status_notsecure.wav"/>
+ <prompt phrase="Call is secure." filename="zrtp-status_secure.wav"/>
+ <prompt phrase="Securing call." filename="zrtp-status_securing.wav"/>
+ </zrtp>
</en>
</language>
Copied: freeswitch/branches/seven/docs/phrase/phrase_es.xml (from rev 14471, freeswitch/trunk/docs/phrase/phrase_es.xml) (0 => 14472)
--- freeswitch/branches/seven/docs/phrase/phrase_es.xml (rev 0)
+++ freeswitch/branches/seven/docs/phrase/phrase_es.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,340 @@
+<!-- This file is a work in progress.
+ If you know how to translate from English to Spanish then please
+ contact Michael Collins (msc@freeswitch.org or IRC: mercutioviz)
+-->
+<language>
+ <en>
+ <ascii>
+ <prompt phrase="Espacio" filename="32.wav"/>
+ <prompt phrase="Signo de número" filename="35.wav"/>
+ <prompt phrase="Asterisco" filename="42.wav"/>
+ <prompt phrase="Punto" filename="46.wav"/>
+ <prompt phrase="A" filename="97.wav"/>
+ <prompt phrase="B" filename="98.wav"/>
+ <prompt phrase="C" filename="99.wav"/>
+ <prompt phrase="D" filename="100.wav"/>
+ <prompt phrase="E" filename="101.wav"/>
+ <prompt phrase="F" filename="102.wav"/>
+ <prompt phrase="G" filename="103.wav"/>
+ <prompt phrase="H" filename="104.wav"/>
+ <prompt phrase="I" filename="105.wav"/>
+ <prompt phrase="J" filename="106.wav"/>
+ <prompt phrase="K" filename="107.wav"/>
+ <prompt phrase="L" filename="108.wav"/>
+ <prompt phrase="LL" filename="???.wav"/>
+ <prompt phrase="M" filename="109.wav"/>
+ <prompt phrase="N" filename="110.wav"/>
+ <prompt phrase="Ñ" filename="???.wav"/>
+ <prompt phrase="O" filename="111.wav"/>
+ <prompt phrase="P" filename="112.wav"/>
+ <prompt phrase="Q" filename="113.wav"/>
+ <prompt phrase="R" filename="114.wav"/>
+ <prompt phrase="S" filename="115.wav"/>
+ <prompt phrase="T" filename="116.wav"/>
+ <prompt phrase="U" filename="117.wav"/>
+ <prompt phrase="V" filename="118.wav"/>
+ <prompt phrase="W" filename="119.wav"/>
+ <prompt phrase="X" filename="120.wav"/>
+ <prompt phrase="Y" filename="121.wav"/>
+ <prompt phrase="Z" filename="122.wav"/>
+ </ascii>
+ <phonetic-ascii>
+ <prompt phrase="Espacio" filename="32.wav"/>
+ <prompt phrase="Punto" filename="46.wav"/>
+ <prompt phrase="Alpha" filename="97.wav"/>
+ <prompt phrase="Bravo" filename="98.wav"/>
+ <prompt phrase="Charlie" filename="99.wav"/>
+ <prompt phrase="Delta" filename="100.wav"/>
+ <prompt phrase="Echo" filename="101.wav"/>
+ <prompt phrase="Foxtrot" filename="102.wav"/>
+ <prompt phrase="Golf" filename="103.wav"/>
+ <prompt phrase="Hotel" filename="104.wav"/>
+ <prompt phrase="India" filename="105.wav"/>
+ <prompt phrase="Juliet" filename="106.wav"/>
+ <prompt phrase="Kilo" filename="107.wav"/>
+ <prompt phrase="Lima" filename="108.wav"/>
+ <prompt phrase="Mike" filename="109.wav"/>
+ <prompt phrase="November" filename="110.wav"/>
+ <prompt phrase="Oscar" filename="111.wav"/>
+ <prompt phrase="Papa" filename="112.wav"/>
+ <prompt phrase="Quebec" filename="113.wav"/>
+ <prompt phrase="Romeo" filename="114.wav"/>
+ <prompt phrase="Sierra" filename="115.wav"/>
+ <prompt phrase="Tango" filename="116.wav"/>
+ <prompt phrase="Unifor" filename="117.wav"/>
+ <prompt phrase="Victor" filename="118.wav"/>
+ <prompt phrase="Whiskey" filename="119.wav"/>
+ <prompt phrase="Xray" filename="120.wav"/>
+ <prompt phrase="Yankee" filename="121.wav"/>
+ <prompt phrase="Zulu" filename="122.wav"/>
+ </phonetic-ascii>
+ <digits>
+ <prompt phrase="Cero" filename="0.wav"/>
+ <prompt phrase="Uno" filename="1.wav"/>
+ <prompt phrase="Dos" filename="2.wav"/>
+ <prompt phrase="Tres" filename="3.wav"/>
+ <prompt phrase="Cuatro" filename="4.wav"/>
+ <prompt phrase="Cinco" filename="5.wav"/>
+ <prompt phrase="Seis" filename="6.wav"/>
+ <prompt phrase="Siete" filename="7.wav"/>
+ <prompt phrase="Ocho" filename="8.wav"/>
+ <prompt phrase="Nueve" filename="9.wav"/>
+ <prompt phrase="Diez" filename="10.wav"/>
+ <prompt phrase="Once" filename="11.wav"/>
+ <prompt phrase="Doce" filename="12.wav"/>
+ <prompt phrase="Trece" filename="13.wav"/>
+ <prompt phrase="Catorce" filename="14.wav"/>
+ <prompt phrase="Quince" filename="15.wav"/>
+ <prompt phrase="Dieciséis" filename="16.wav"/>
+ <prompt phrase="Diecisiete" filename="17.wav"/>
+ <prompt phrase="Dieciocho" filename="18.wav"/>
+ <prompt phrase="Diecinueve" filename="19.wav"/>
+ <prompt phrase="Veinte" filename="20.wav"/>
+<!-- In english we just say twenty one
+in spanish we say veintiuno etc in the 20's
+and treinta y uno etc from 30's on
+-->
+ <prompt phrase="Veintiuno" filename="21.wav"/>
+ <prompt phrase="Veintidos" filename="22.wav"/>
+ <prompt phrase="Veintitrés" filename="23.wav"/>
+ <prompt phrase="Veinticuatro" filename="24.wav"/>
+ <prompt phrase="Veinticinco" filename="25.wav"/>
+ <prompt phrase="Veintiséis" filename="26.wav"/>
+ <prompt phrase="Veintisiete" filename="27.wav"/>
+ <prompt phrase="Veintiocho" filename="28.wav"/>
+ <prompt phrase="Veintinueve" filename="29.wav"/>
+ <prompt phrase="Treinta" filename="30.wav"/>
+ <prompt phrase="Cuarenta" filename="40.wav"/>
+ <prompt phrase="Cincuenta" filename="50.wav"/>
+ <prompt phrase="Sesenta" filename="60.wav"/>
+ <prompt phrase="Setenta" filename="70.wav"/>
+ <prompt phrase="Ochenta" filename="80.wav"/>
+ <prompt phrase="Noventa" filename="90.wav"/>
+ <prompt phrase="Punto" filename="dot.wav"/>
+<!-- This part is not easy... it depends on context
+When used as an adjective, ordinal numbers must agree
+with the nouns the refer to in both number and gender:
+el segundo coche ("the second car"),
+but la segunda vez ("the second time").
+
+Note also that when primero and tercero precede a singular
+masculine noun, the final -o is dropped:
+el primer rey ("the first king"),
+el tercer trimestre ("the third trimester").
+I will assume a non singular masculine noun for the sake
+of translating something
+-->
+ <prompt phrase="Primero" filename="h-1.wav"/>
+ <prompt phrase="Segundo" filename="h-2.wav"/>
+ <prompt phrase="Tercero" filename="h-3.wav"/>
+ <prompt phrase="Cuarto" filename="h-4.wav"/>
+ <prompt phrase="Quinto" filename="h-5.wav"/>
+ <prompt phrase="Sexto" filename="h-6.wav"/>
+ <prompt phrase="Séptimo" filename="h-7.wav"/>
+ <prompt phrase="Octavo" filename="h-8.wav"/>
+ <prompt phrase="Noveno" filename="h-9.wav"/>
+ <prompt phrase="Décimo" filename="h-10.wav"/>
+<!-- For larger numbers, it is common to use simply the
+cardinal number, especially in speech. Thus el siglo veinte
+("the 20th century") is more common than the cardinal form,
+el siglo vigésimo, and in writing the numerical form (el siglo 20)
+is often used. It is also common to word a sentence in such a way
+that the ordinal form is not used. So, for example, cumple cuarenta
+y cinco años would be the most common way of saying it is someone's
+45th birthday. In general, the ordinal numbers for 11th and above
+can be considered mostly a formal usage.
+I will translate them anyways
+-->
+ <prompt phrase="Undécimo" filename="h-11.wav"/>
+ <prompt phrase="Duodécimo" filename="h-12.wav"/>
+ <prompt phrase="Decimotecero" filename="h-13.wav"/>
+ <prompt phrase="Decimocuarto" filename="h-14.wav"/>
+ <prompt phrase="Decimoquinto" filename="h-15.wav"/>
+ <prompt phrase="Decimosexto" filename="h-16.wav"/>
+ <prompt phrase="Decimoséptimo" filename="h-17.wav"/>
+ <prompt phrase="Decimoctavo" filename="h-18.wav"/>
+ <prompt phrase="Decimonoveno" filename="h-19.wav"/>
+ <prompt phrase="Vigésimo" filename="h-20.wav"/>
+ <prompt phrase="Trigésimo" filename="h-30.wav"/>
+ <prompt phrase="Cien" filename="hundred.wav"/>
+ <prompt phrase="Millón" filename="million.wav"/>
+ <prompt phrase="Período" filename="period.wav"/>
+ <prompt phrase="Punto" filename="point.wav"/>
+ <prompt phrase="Signo de número" filename="pound.wav"/>
+ <prompt phrase="Asterisco" filename="star.wav"/>
+ <prompt phrase="Mil" filename="thousand.wav"/>
+ </digits>
+ <currency>
+ <prompt phrase="Y" filename="and.wav"/>
+ <prompt phrase="Centavo" filename="cent.wav"/>
+ <prompt phrase="Central" filename="central.wav"/>
+ <prompt phrase="Centavos por minuto" filename="cents-per-minute.wav"/>
+ <prompt phrase="Centavos" filename="cents.wav"/>
+ <prompt phrase="Dolar" filename="dollar.wav"/>
+ <prompt phrase="Dólares" filename="dollars.wav"/>
+ <prompt phrase="Menos" filename="minus.wav"/>
+ <prompt phrase="Negativo" filename="negative.wav"/>
+ </currency>
+ <time>
+ <prompt phrase="A.M." filename="a-m.wav"/>
+ <prompt phrase="A" filename="at.wav"/>
+ <prompt phrase="Domingo" filename="day-0.wav"/>
+ <prompt phrase="Lunes" filename="day-1.wav"/>
+ <prompt phrase="Martes" filename="day-2.wav"/>
+ <prompt phrase="Miércoles" filename="day-3.wav"/>
+ <prompt phrase="Jueves" filename="day-4.wav"/>
+ <prompt phrase="Viernes" filename="day-5.wav"/>
+ <prompt phrase="Sábado" filename="day-6.wav"/>
+ <prompt phrase="Hora" filename="hour.wav"/>
+ <prompt phrase="Horas" filename="hours.wav"/>
+ <prompt phrase="Minuto" filename="minute.wav"/>
+ <prompt phrase="Minutos" filename="minutes.wav"/>
+ <prompt phrase="Enero" filename="mon-0.wav"/>
+ <prompt phrase="Febrero" filename="mon-1.wav"/>
+ <prompt phrase="Marzo" filename="mon-2.wav"/>
+ <prompt phrase="Abril" filename="mon-3.wav"/>
+ <prompt phrase="Mayo" filename="mon-4.wav"/>
+ <prompt phrase="Junio" filename="mon-5.wav"/>
+ <prompt phrase="Julio" filename="mon-6.wav"/>
+ <prompt phrase="Agosto" filename="mon-7.wav"/>
+ <prompt phrase="Septiembre" filename="mon-8.wav"/>
+ <prompt phrase="Octubre" filename="mon-9.wav"/>
+ <prompt phrase="Noviembre" filename="mon-10.wav"/>
+ <prompt phrase="Diciembre" filename="mon-11.wav"/>
+ <prompt phrase="En punto" filename="oclock.wav"/>
+ <prompt phrase="oh" filename="oh.wav"/>
+ <prompt phrase="P.M." filename="p-m.wav"/>
+ <prompt phrase="Segundo" filename="second.wav"/>
+ <prompt phrase="Segundos" filename="seconds.wav"/>
+ <prompt phrase="Hoy" filename="today.wav"/>
+ <prompt phrase="Mañana" filename="tomorrow.wav"/>
+ <prompt phrase="Ayer" filename="yesterday.wav"/>
+ </time>
+ <voicemail>
+ <prompt phrase="La persona a la extensión" filename="vm-person.wav"/>
+ <prompt phrase="marcado urgente" filename="vm-marked-urgent.wav"/>
+ <prompt phrase="correo electrónico" filename="vm-emailed.wav"/>
+ <prompt phrase="usted tiene" filename="vm-you_have.wav"/>
+ <prompt phrase="por favor ingrese su numero de usuario, seguido por" filename="vm-enter_id.wav"/>
+ <prompt phrase="por favor ingrese su contraseña, seguido por" filename="vm-enter_pass.wav"/>
+ <prompt phrase="inicio de sesión incorrectos" filename="vm-fail_auth.wav"/>
+ <prompt phrase="bienvenido a su buzon de voz" filename="vm-hello.wav"/>
+ <prompt phrase="Gracias por llamar" filename="vm-goodbye.wav"/>
+ <prompt phrase="después del tono, por favor anote su nombre, pulse cualquier tecla o deje de hablar para poner fin a la grabación." filename="vm-record_name1.wav"/>
+ <prompt phrase="elija un saludo entre 1 y 9" filename="vm-choose_greeting_choose.wav"/>
+ <prompt phrase="valor inválido" filename="vm-choose_greeting_fail.wav"/>
+ <prompt phrase="demasiados intentos fallidos" filename="vm-abort.wav"/>
+ <prompt phrase="para cambiar su clave" filename="vm-change_password.wav"/>
+ <prompt phrase="grabe su saludo después del tono, pulse cualquier tecla o deje de hablar para poner fin a la grabación" filename="vm-record_greeting.wav"/>
+ <prompt phrase="grabe su mensaje después del tono, pulse cualquier tecla o deje de hablar para poner fin a la grabación" filename="vm-record_message.wav"/>
+ <prompt phrase="no está disponible" filename="vm-play_greeting.wav"/>
+ <prompt phrase="urgente nuevo" filename="vm-urgent-new.wav"/>
+ <prompt phrase="nuevo" filename="vm-new.wav"/>
+ <prompt phrase="urgente guardado" filename="vm-urgent-saved.wav"/>
+ <prompt phrase="guardado" filename="vm-saved.wav"/>
+ <prompt phrase="mensaje" filename="vm-message.wav"/>
+ <prompt phrase="mensajes" filename="vm-messages.wav"/>
+ <prompt phrase="presione" filename="vm-press.wav"/>
+ <prompt phrase="para escuchar mensajes nuevos" filename="vm-listen_new.wav"/>
+ <prompt phrase="para escuchar mensajes guardados" filename="vm-listen_saved.wav"/>
+ <prompt phrase="para opciones avanzadas" filename="vm-advanced.wav"/>
+ <prompt phrase="para salir" filename="vm-to_exit.wav"/>
+ <prompt phrase="para guardar un saludo" filename="vm-record_greeting.wav"/>
+ <prompt phrase="para elegir un saludo" filename="vm-choose_greeting.wav"/>
+ <prompt phrase="para grabar su nombre" filename="vm-record_name2.wav"/>
+ <prompt phrase="para el menú principal" filename="vm-main_menu.wav"/>
+ <prompt phrase="para escuchar la grabación" filename="vm-listen_to_recording.wav"/>
+ <prompt phrase="para guardar la grabación" filename="vm-save_recording.wav"/>
+ <prompt phrase="para regrabar" filename="vm-rerecord.wav"/>
+ <prompt phrase="para marcar este mensaje como urgente" filename="vm-mark-urgent.wav"/>
+ <prompt phrase="para continuar" filename="vm-continue.wav"/>
+ <prompt phrase="para escuchar la grabación de nuevo" filename="vm-listen_to_recording_again.wav"/>
+ <prompt phrase="para eliminar la grabación" filename="vm-delete_recording.wav"/>
+ <prompt phrase="para enviar la grabación a su e-mail" filename="vm-forward_to_email.wav"/>
+ <prompt phrase="saludo" filename="vm-greeting.wav"/>
+ <prompt phrase="seleccionado" filename="vm-selected.wav"/>
+ <prompt phrase="no está disponible" filename="vm-not_available.wav"/>
+ <prompt phrase="mensaje número" filename="vm-message_number.wav"/>
+ <prompt phrase="eliminado" filename="vm-deleted.wav"/>
+ <prompt phrase="Su grabación es demasiado corta, por favor intente de nuevo" filename="vm-too-small.wav"/>
+ <prompt phrase="en la bandeja de entrada" filename="vm-in_folder.wav"/>
+ <prompt phrase="para devolver la llamada" filename="vm-return_call.wav"/>
+ <prompt phrase="urgente" filename="vm-urgent.wav"/>
+ </voicemail>
+ <conference>
+ <prompt phrase="NULL" filename="conf-ack.wav" type="tone"/>
+ <prompt phrase="NULL" filename="conf-nack.wav" type="tone"/>
+ <prompt phrase="Usted ahora está silenciado." filename="conf-muted.wav"/>
+ <prompt phrase="Usted ya no está silenciado." filename="conf-unmuted.wav"/>
+ <prompt phrase="En este momento usted es la única persona en la conferencia." filename="conf-alone.wav"/>
+ <prompt phrase="NULL" filename="conf-perpetual.wav" type="music"/>
+ <prompt phrase="NULL" filename="conf-enter.wav" type="tone"/>
+ <prompt phrase="NULL" filename="conf-exit.wav" type="tone"/>
+ <prompt phrase="Usted ha sido expulsado de la conferencia." filename="conf-kicked.wav"/>
+ <prompt phrase="Esta conferencia está bloqueada." filename="conf-locked.wav"/>
+ <prompt phrase="La conferencia está ahora bloqueada." filename="conf-is-locked.wav"/>
+ <prompt phrase="La conferencia está ahora desbloqueada." filename="conf-is-unlocked.wav"/>
+ <prompt phrase="Por favor ingrese el pin de la conferencia." filename="conf-pin.wav"/>
+ <prompt phrase="Pin inválido, intente de nuevo." filename="conf-bad-pin.wav"/>
+ <prompt phrase="hasta luego" filename="conf-goodbye.wav"/>
+ <prompt phrase="Bienvenido a la conferencia." filename="conf-welcome.wav"/>
+ </conference>
+ <ivr>
+ <prompt phrase="Número de cuenta" filename="ivr-account_number.wav"/>
+ <prompt phrase="Conectar con quien llama" filename="ivr-connect_to_caller.wav"/>
+ <prompt phrase="Si conoce la extensión, por favor ingrésela ahora" filename="ivr-enter_ext_pound.wav"/>
+ <prompt phrase="por favor ingrese el número de una extensión seguido del signo de número" filename="ivr-enter_ext.wav"/>
+ <prompt phrase="Para esta persona" filename="ivr-for_this_person.wav"/>
+ <prompt phrase="Por favor espere mientras conecto su llamada" filename="ivr-hold_connect_call.wav"/>
+ <prompt phrase="Lo siento" filename="ivr-im_sorry.wav"/>
+ <prompt phrase="Por favor" filename="ivr-please.wav"/>
+ <prompt phrase="Por favor devuelva nuestra llamada al" filename="ivr-please_return_our_call_at.wav"/>
+ <prompt phrase="Acerca del número de referencia" filename="ivr-regarding_reference_number.wav"/>
+ <prompt phrase="Este es un ejemplo de un submenú de audiorrespuesta..." filename="ivr-sample_submenu.wav"/>
+ <prompt phrase="Por favor diga su nombre después del tono" filename="ivr-say_name.wav"/>
+ <prompt phrase="Enviar a esta persona que llama al buzón de voz" filename="ivr-send_to_voicemail.wav"/>
+ <prompt phrase="Para hablar con un representante de servicio al cliente" filename="ivr-speak_to_a_customer_service_representative.wav"/>
+ <prompt phrase="Tomar un mensaje" filename="ivr-take_a_message.wav"/>
+ <prompt phrase="Gracias" filename="ivr-thank_you.wav"/>
+ <prompt phrase="Esa fue una entrada inválida" filename="ivr-that_was_an_invalid_entry.wav"/>
+ <prompt phrase="Esta es una llamada de" filename="ivr-this_is_a_call_from.wav"/>
+ <prompt phrase="Este menú de audiorrespuesta le permitirá probar algunas de las características..." filename="ivr-this_ivr_will_let_you_test_features.wav"/>
+ <prompt phrase="Para llamar a la conferencia de FreeSWITCH" filename="ivr-to_call_the_freeswitch_conference.wav"/>
+ <prompt phrase="Para hacer una prueba de eco de FreeSWITCH" filename="ivr-to_do_a_freeswitch_echo_test.wav"/>
+ <prompt phrase="Para hacer una prueba de eco de FWD" filename="ivr-to_do_a_fwd_echo_test.wav"/>
+ <prompt phrase="Para escuchar un ejemplo de un submenú de audio respuesta" filename="ivr-to_hear_sample_submenu.wav"/>
+ <prompt phrase="Para escuchar simios gritando" filename="ivr-to_hear_screaming_monkeys.wav"/>
+ <prompt phrase="Para escuchar música de llamada en espera" filename="ivr-to_listen_to_moh.wav"/>
+ <prompt phrase="Para repetir estas opciones" filename="ivr-to_repeat_these_options.wav"/>
+ <prompt phrase="Para regresar al menú anterior" filename="ivr-to_return_to_previous_menu.wav"/>
+ <prompt phrase="Para hablar con un operador" filename="ivr-to_speak_with_an_operator.wav"/>
+ <prompt phrase="Bienvenido a FreeSWITCH, el futuro de la telefonía" filename="ivr-welcome_to_freeswitch.wav"/>
+ <prompt phrase="Usted puede colgar en cualquier momento para salir" filename="ivr-you_may_exit_by_hanging_up.wav"/>
+ <prompt phrase="o" filename="ivr-or.wav"/>
+ <prompt phrase="no" filename="ivr-not.wav"/>
+ <prompt phrase="llamar" filename="ivr-call.wav"/>
+ <prompt phrase="Usted puede" filename="ivr-you_may.wav"/>
+ <prompt phrase="hola" filename="ivr-hello.wav"/>
+ <prompt phrase="Usando el teclado de su teléfono..." filename="ivr-use_telephone_keypad.wav"/>
+ <prompt phrase="por favor deletree el nombre de la persona a la cual está intentando contactar." filename="ivr-spell_name.wav"/>
+ <prompt phrase="Primero el apellido" filename="ivr-last_name_first.wav"/>
+ <prompt phrase="Primero el nombre" filename="ivr-first_name_first.wav"/>
+ <prompt phrase="Presione 1 para Q ó Z." filename="ivr-press_one_q_or_z.wav"/>
+ <prompt phrase="Ventas" filename="ivr-sales.wav"/>
+ <prompt phrase="Servicio al cliente" filename="ivr-customer_service.wav"/>
+ <prompt phrase="Soporte técnico" filename="ivr-technical_support.wav"/>
+ <prompt phrase="Operador" filename="ivr-operator.wav"/>
+ </ivr>
+ <misc>
+ <prompt phrase="Esta llamada ha sido asegurada" filename="call_secured.wav"/>
+ <prompt phrase="Seguido del signo de número" filename="followed.wav"/>
+ <prompt phrase="Si usted es esta persona" filename="if_you_are_this_person.wav"/>
+ <prompt phrase="Si usted desea" filename="if_you_would_like_to.wav"/>
+ <prompt phrase="Diga el número de referencia" filename="provide_reference_number.wav"/>
+ <prompt phrase="Por favor pulse la extensión a la cual desea transferir" filename="transfer1.wav"/>
+ <prompt phrase="Transferir" filename="transfer2.wav"/>
+ <prompt phrase="Estamos tratando de contactar" filename="we_are_trying_to_reach.wav"/>
+ <prompt phrase="Un error ha ocurrido, por favor contacte al administrador" filename="error.wav"/>
+ </misc>
+ </en>
+</language>
\ No newline at end of file
Modified: freeswitch/branches/seven/docs/phrase/phrase_fr.xml (14471 => 14472)
--- freeswitch/branches/seven/docs/phrase/phrase_fr.xml 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/docs/phrase/phrase_fr.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,10 +1,10 @@
<language>
<fr>
<ascii>
- <prompt phrase="Space" filename="32.wav"/>
- <prompt phrase="Pound" filename="35.wav"/>
- <prompt phrase="Star" filename="42.wav"/>
- <prompt phrase="Dot" filename="46.wav"/>
+ <prompt phrase="espace" filename="32.wav"/>
+ <prompt phrase="dièse" filename="35.wav"/>
+ <prompt phrase="étoile" filename="42.wav"/>
+ <prompt phrase="point" filename="46.wav"/>
<prompt phrase="A" filename="97.wav"/>
<prompt phrase="B" filename="98.wav"/>
<prompt phrase="C" filename="99.wav"/>
@@ -33,8 +33,8 @@
<prompt phrase="Z" filename="122.wav"/>
</ascii>
<phonetic-ascii>
- <prompt phrase="Espace" filename="32.wav"/>
- <prompt phrase="Point" filename="46.wav"/>
+ <prompt phrase="espace" filename="32.wav"/>
+ <prompt phrase="point" filename="46.wav"/>
<prompt phrase="Alpha" filename="97.wav"/>
<prompt phrase="Bravo" filename="98.wav"/>
<prompt phrase="Charlie" filename="99.wav"/>
@@ -55,7 +55,7 @@
<prompt phrase="Romeo" filename="114.wav"/>
<prompt phrase="Sierra" filename="115.wav"/>
<prompt phrase="Tango" filename="116.wav"/>
- <prompt phrase="Unifor" filename="117.wav"/>
+ <prompt phrase="Uniform" filename="117.wav"/>
<prompt phrase="Victor" filename="118.wav"/>
<prompt phrase="Whiskey" filename="119.wav"/>
<prompt phrase="Xray" filename="120.wav"/>
@@ -63,7 +63,7 @@
<prompt phrase="Zulu" filename="122.wav"/>
</phonetic-ascii>
<digits>
- <prompt phrase="Zero" filename="0.wav"/>
+ <prompt phrase="Zéro" filename="0.wav"/>
<prompt phrase="Un" filename="1.wav"/>
<prompt phrase="Deux" filename="2.wav"/>
<prompt phrase="Trois" filename="3.wav"/>
@@ -88,12 +88,12 @@
<prompt phrase="Quarante" filename="40.wav"/>
<prompt phrase="Cinquante" filename="50.wav"/>
<prompt phrase="Soixante" filename="60.wav"/>
- <prompt phrase="Soixante Dix" filename="70.wav"/>
+ <prompt phrase="Soixante-Dix" filename="70.wav"/>
<prompt phrase="Quatre-Vingt" filename="80.wav"/>
<prompt phrase="Quatre-Vingt-Dix" filename="90.wav"/>
<prompt phrase="Point" filename="dot.wav"/>
<prompt phrase="Premier" filename="h-1.wav"/>
- <prompt phrase="Second" filename="h-2.wav"/>
+ <prompt phrase="Deuxième" filename="h-2.wav"/>
<prompt phrase="Troisième" filename="h-3.wav"/>
<prompt phrase="Quatrième" filename="h-4.wav"/>
<prompt phrase="Cinquième" filename="h-5.wav"/>
@@ -103,7 +103,7 @@
<prompt phrase="Neuvième" filename="h-9.wav"/>
<prompt phrase="Dixième" filename="h-10.wav"/>
<prompt phrase="Onzième" filename="h-11.wav"/>
- <prompt phrase="Douxième" filename="h-12.wav"/>
+ <prompt phrase="Douzième" filename="h-12.wav"/>
<prompt phrase="Treizième" filename="h-13.wav"/>
<prompt phrase="Quatorzième" filename="h-14.wav"/>
<prompt phrase="Quinzième" filename="h-15.wav"/>
@@ -113,29 +113,28 @@
<prompt phrase="Dix-Neuvième" filename="h-19.wav"/>
<prompt phrase="Vingtième" filename="h-20.wav"/>
<prompt phrase="Trentième" filename="h-30.wav"/>
- <prompt phrase="Quarantième" filename="hh-40.wav"/>
<prompt phrase="Cent" filename="hundred.wav"/>
<prompt phrase="Million" filename="million.wav"/>
- <prompt phrase="Point Final" filename="period.wav"/>
- <prompt phrase="Point" filename="point.wav"/>
- <prompt phrase="Dièze" filename="pound.wav"/>
- <prompt phrase="Etoile" filename="star.wav"/>
- <prompt phrase="Cent" filename="thousand.wav"/>
+ <prompt phrase="point final" filename="period.wav"/>
+ <prompt phrase="point" filename="point.wav"/>
+ <prompt phrase="dièse" filename="pound.wav"/>
+ <prompt phrase="étoile" filename="star.wav"/>
+ <prompt phrase="Mille" filename="thousand.wav"/>
</digits>
<currency>
- <prompt phrase="And" filename="and.wav"/>
- <prompt phrase="Cent" filename="cent.wav"/>
+ <prompt phrase="Et" filename="and.wav"/>
+ <prompt phrase="Cents" filename="cent.wav"/>
<prompt phrase="Centrale" filename="central.wav"/>
<prompt phrase="Cents par minute" filename="cents-per-minute.wav"/>
- <prompt phrase="Cent" filename="cents.wav"/>
+ <prompt phrase="Cents" filename="cents.wav"/>
<prompt phrase="Dollar" filename="dollar.wav"/>
<prompt phrase="Dollars" filename="dollars.wav"/>
<prompt phrase="Moins" filename="minus.wav"/>
- <prompt phrase="Negatif" filename="negative.wav"/>
+ <prompt phrase="Négatif" filename="negative.wav"/>
</currency>
<time>
<prompt phrase="Du matin" filename="a-m.wav"/>
- <prompt phrase="A" filename="at.wav"/>
+ <prompt phrase="À" filename="at.wav"/>
<prompt phrase="Dimanche" filename="day-0.wav"/>
<prompt phrase="Lundi" filename="day-1.wav"/>
<prompt phrase="Mardi" filename="day-2.wav"/>
@@ -148,17 +147,17 @@
<prompt phrase="Minute" filename="minute.wav"/>
<prompt phrase="Minutes" filename="minutes.wav"/>
<prompt phrase="Janvier" filename="mon-0.wav"/>
- <prompt phrase="Fevrier" filename="mon-1.wav"/>
+ <prompt phrase="Février" filename="mon-1.wav"/>
<prompt phrase="Mars" filename="mon-2.wav"/>
<prompt phrase="Avril" filename="mon-3.wav"/>
<prompt phrase="Mai" filename="mon-4.wav"/>
<prompt phrase="Juin" filename="mon-5.wav"/>
<prompt phrase="Juillet" filename="mon-6.wav"/>
- <prompt phrase="Aout" filename="mon-7.wav"/>
+ <prompt phrase="Août" filename="mon-7.wav"/>
<prompt phrase="Septembre" filename="mon-8.wav"/>
<prompt phrase="Octobre" filename="mon-9.wav"/>
<prompt phrase="Novembre" filename="mon-10.wav"/>
- <prompt phrase="Decembre" filename="mon-11.wav"/>
+ <prompt phrase="Décembre" filename="mon-11.wav"/>
<prompt phrase="Heures" filename="oclock.wav"/>
<prompt phrase="oh" filename="oh.wav"/>
<prompt phrase="Du soir" filename="p-m.wav"/>
@@ -166,48 +165,126 @@
<prompt phrase="Secondes" filename="seconds.wav"/>
<prompt phrase="Aujourd'hui" filename="today.wav"/>
<prompt phrase="Demain" filename="tomorrow.wav"/>
- <prompt phrase="Hiers" filename="yesterday.wav"/>
+ <prompt phrase="Hier" filename="yesterday.wav"/>
</time>
<voicemail>
- <prompt phrase="Entrez votre identification, suivi par" filename="vm-enter_id.wav"/>
- <prompt phrase="Entrez votre code, suivi par" filename="vm-enter_pass.wav"/>
- <prompt phrase="Identification incorrecte" filename="vm-fail_auth.wav"/>
- <prompt phrase="Bienvenue dans votre boite aux lettres" filename="vm-hello.wav"/>
- <prompt phrase="Aurevoir" filename="vm-goodbye.wav"/>
- <prompt phrase="Trops de tentatives échouées" filename="vm-abort.wav"/>
- <prompt phrase="au bip, enregistrez votre nom, puis appuyez sur une touche ou arretez de parler jusqu'a la fin de l'enregistrement." filename="vm-record_name1.wav"/>
- <prompt phrase="Choisissez un message d'accueil entre 1 et 3" filename="vm-choose_greeting.wav"/>
- <prompt phrase="Valeur incorrecte" filename="vm-choose_greeting_fail.wav"/>
- <prompt phrase="Enregistrez votre message d'accueil au bip, puis appuyez sur une touche ou arretez de parler jusqu'a la fin de l'enregistrement." filename="vm-record_greeting.wav"/>
- <prompt phrase="enregistrez votre message au bip, puis appuyez sur une touche ou arretez de parler jusqu'a la fin de l'enregistrement." filename="vm-record_message.wav"/>
- <prompt phrase="n'est pas joignable" filename="vm-play_greeting.wav"/>
- <prompt phrase="Nouvelle importante" filename="vm-urgent-new.wav"/>
- <prompt phrase="Nouveau" filename="vm-new.wav"/>
- <prompt phrase="Enregistrement Urgent" filename="vm-urgent-saved.wav"/>
- <prompt phrase="Enregistré" filename="vm-saved.wav"/>
- <prompt phrase="message" filename="vm-message.wav"/>
- <prompt phrase="messages" filename="vm-messages.wav"/>
- <prompt phrase="Appuyez" filename="vm-press.wav"/>
- <prompt phrase="Pour écouter les nouveaux messages" filename="vm-listen_new.wav"/>
- <prompt phrase="Pour écouter les messages enregistrés" filename="vm-listen_saved.wav"/>
- <prompt phrase="Pour les options avancées" filename="vm-advanced.wav"/>
- <prompt phrase="Pour terminer" filename="vm-to_exit.wav"/>
- <prompt phrase="Pour enregistrer un message d'accueil" filename="vm-record_greeting.wav"/>
- <prompt phrase="Pour choisir un message d'acceuil" filename="vm-choose_greeting.wav"/>
- <prompt phrase="Pour enregistrer votre nom" filename="vm-record_name2.wav"/>
- <prompt phrase="Pour le menu principale" filename="vm-main_menu.wav"/>
- <prompt phrase="Pour écouter l'enregistrement" filename="vm-listen_to_recording.wav"/>
- <prompt phrase="Pour sauvegarder votre enregistrement" filename="vm-save_recording.wav"/>
- <prompt phrase="Pour réenregistrer" filename="vm-rerecord.wav"/>
- <prompt phrase="Pour signaler ce message en tant qu'urgent ou" filename="vm-mark_urgent.wav"/>
- <prompt phrase="pour continuer" filename="vm-continue.wav"/>
- <prompt phrase="pour réÂécouter l'enregistrement de nouveau" filename="vm-listen_to_recording_again.wav"/>
- <prompt phrase="pour effacer l'enregistrement" filename="vm-delete_recording.wav"/>
- <prompt phrase="Pour transférer l'enregistrement vers votre boite mail" filename="vm-forward_to_email.wav"/>
- <prompt phrase="Message d'accueil" filename="vm-greeting.wav"/>
- <prompt phrase="Choisissez" filename="vm-selected.wav"/>
- <prompt phrase="N'est pas disponible" filename="vm-not_avaliable.wav"/>
- <prompt phrase="message numéro" filename="vm-message_number.wav"/>
+ <prompt phrase="La personne au numéro" filename="vm-person.wav"/>
+ <prompt phrase="marqué urgent" filename="vm-marked_urgent.wav"/>
+ <prompt phrase="envoyé par courrier électronique" filename="vm-emailed.wav"/>
+ <prompt phrase="vous avez" filename="vm-you_have.wav"/>
+ <prompt phrase="Entrez votre identifiant, suivi par" filename="vm-enter_id.wav"/>
+ <prompt phrase="Entrez votre code d'accès, suivi par" filename="vm-enter_pass.wav"/>
+ <prompt phrase="Identification incorrecte" filename="vm-fail_auth.wav"/>
+ <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="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"/>
+ <prompt phrase="Au bip, enregistrez votre message d'accueil, puis appuyez sur une touche ou arrêtez de parler pour finir l'enregistrement." filename="vm-record_greeting.wav"/>
+ <prompt phrase="Au bip, enregistrez votre message, puis appuyez sur une touche ou arrêtez de parler pour finir l'enregistrement." filename="vm-record_message.wav"/>
+ <prompt phrase="n'est pas joignable" filename="vm-play_greeting.wav"/>
+ <prompt phrase="urgent et nouveau" filename="vm-urgent-new.wav"/>
+ <prompt phrase="nouveau" filename="vm-new.wav"/>
+ <prompt phrase="urgent et sauvegardé" filename="vm-urgent-saved.wav"/>
+ <prompt phrase="sauvegardé" filename="vm-saved.wav"/>
+ <prompt phrase="message" filename="vm-message.wav"/>
+ <prompt phrase="messages" filename="vm-messages.wav"/>
+ <prompt phrase="Appuyez" filename="vm-press.wav"/>
+ <prompt phrase="pour écouter les nouveaux messages" filename="vm-listen_new.wav"/>
+ <prompt phrase="pour écouter les messages sauvegardés" filename="vm-listen_saved.wav"/>
+ <prompt phrase="pour les options avancées" filename="vm-advanced.wav"/>
+ <prompt phrase="pour quitter" filename="vm-to_exit.wav"/>
+ <prompt phrase="pour enregistrer un message d'accueil" filename="vm-record_greeting.wav"/>
+ <prompt phrase="pour choisir un message d'acceuil" filename="vm-choose_greeting.wav"/>
+ <prompt phrase="pour enregistrer votre nom" filename="vm-record_name2.wav"/>
+ <prompt phrase="pour le menu principal" filename="vm-main_menu.wav"/>
+ <prompt phrase="Pour écouter l'enregistrement" filename="vm-listen_to_recording.wav"/>
+ <prompt phrase="Pour sauvegarder l'enregistrement" filename="vm-save_recording.wav"/>
+ <prompt phrase="Pour réenregistrer" filename="vm-rerecord.wav"/>
+ <prompt phrase="Pour marquer ce message urgent" filename="vm-mark_urgent.wav"/>
+ <prompt phrase="pour continuer" filename="vm-continue.wav"/>
+ <prompt phrase="pour ré-écouter l'enregistrement" filename="vm-listen_to_recording_again.wav"/>
+ <prompt phrase="pour effacer l'enregistrement" filename="vm-delete_recording.wav"/>
+ <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="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"/>
+ <prompt phrase="dans la boîte de réception" filename="vm-in_folder.wav"/>
+ <prompt phrase="pour répondre à cet appel tout de suite" filename="vm-return_call.wav"/>
+ <prompt phrase="urgent" filename="vm-urgent.wav"/>
</voicemail>
+ <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="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"/>
+ <prompt phrase="NULL" filename="conf-enter.wav" type="tone"/>
+ <prompt phrase="NULL" filename="conf-exit.wav" type="tone"/>
+ <prompt phrase="Vous avez été déconnecté de cette conférence." filename="conf-kicked.wav"/>
+ <prompt phrase="Cette conférence est verrouillée." filename="conf-locked.wav"/>
+ <prompt phrase="La conférence est maintenant verrouillée." filename="conf-is-locked.wav"/>
+ <prompt phrase="La conférence est maintenant déverrouillée." filename="conf-is-unlocked.wav"/>
+ <prompt phrase="Veuillez saisir le code d'accès à la conférence." filename="conf-pin.wav"/>
+ <prompt phrase="Code d'accès invalide, veuillez réessayer." filename="conf-bad-pin.wav"/>
+ <prompt phrase="Au revoir" filename="conf-goodbye.wav"/>
+ <prompt phrase="Bienvenue à la conférence." filename="conf-welcome.wav"/>
+ </conference>
+ <ivr>
+ <prompt phrase="Numéro de compte" filename="ivr-account_number.wav"/>
+ <prompt phrase="Connecter l'appel" filename="ivr-connect_to_caller.wav"/>
+ <prompt phrase="Si vous connaissez le numéro de poste de votre correspondant, veuiller le saisir maintenant." filename="ivr-enter_ext_pound.wav"/>
+ <prompt phrase="Veuillez saisir un numéro de poste suivi de la touche dièse." filename="ivr-enter_ext.wav"/>
+ <prompt phrase="Pour cette personne" filename="ivr-for_this_person.wav"/>
+ <prompt phrase="Patientez, votre appel va être connecté." filename="ivr-hold_connect_call.wav"/>
+ <prompt phrase="Désolé" filename="ivr-im_sorry.wav"/>
+ <prompt phrase="S'il vous plaît" filename="ivr-please.wav"/>
+ <prompt phrase="Veuillez nous rappeler au" filename="ivr-please_return_our_call_at.wav"/>
+ <prompt phrase="concernant la référence" filename="ivr-regarding_reference_number.wav"/>
+ <prompt phrase="Ceci est un example de menu. FreeSWITCH est très flexible dans la conception de système interactifs." filename="ivr-sample_submenu.wav"/>
+ <prompt phrase="Veuillez prononcer votre nom après le bip" filename="ivr-say_name.wav"/>
+ <prompt phrase="Envoyer cet appelant vers la messagerie vocale" filename="ivr-send_to_voicemail.wav"/>
+ <prompt phrase="Pour parler avec un de nos agents" filename="ivr-speak_to_a_customer_service_representative.wav"/>
+ <prompt phrase="Prendre un message" filename="ivr-take_a_message.wav"/>
+ <prompt phrase="Merci" filename="ivr-thank_you.wav"/>
+ <prompt phrase="Votre choix n'est pas valide" filename="ivr-that_was_an_invalid_entry.wav"/>
+ <prompt phrase="Cet appel est de" filename="ivr-this_is_a_call_from.wav"/>
+ <prompt phrase="Ce menu interactif vous permet de tester certaines des fonctionalités de votre système FreeSWITCH." filename="ivr-this_ivr_will_let_you_test_features.wav"/>
+ <prompt phrase="Pour appeler la conférence téléphonique de FreeSWITCH" filename="ivr-to_call_the_freeswitch_conference.wav"/>
+ <prompt phrase="Pour faire un test d'écho avec FreeSWITCH" filename="ivr-to_do_a_freeswitch_echo_test.wav"/>
+ <prompt phrase="Pour faire un test d'écho avec FWD" filename="ivr-to_do_a_fwd_echo_test.wav"/>
+ <prompt phrase="Pour entendre un exemple de menu" filename="ivr-to_hear_sample_submenu.wav"/>
+ <prompt phrase="Pour entendre des singes qui hurlent" filename="ivr-to_hear_screaming_monkeys.wav"/>
+ <prompt phrase="Pour écouter la musique d'attente" filename="ivr-to_listen_to_moh.wav"/>
+ <prompt phrase="Pour répéter ces options" filename="ivr-to_repeat_these_options.wav"/>
+ <prompt phrase="Pour revenir au menu précédent" filename="ivr-to_return_to_previous_menu.wav"/>
+ <prompt phrase="Pour parler avec un opérateur" filename="ivr-to_speak_with_an_operator.wav"/>
+ <prompt phrase="FreeSWITCH, le futur de la téléphonie, vous souhaite la bienvenue" filename="ivr-welcome_to_freeswitch.wav"/>
+ <prompt phrase="Raccrochez à tout moment pour quitter" filename="ivr-you_may_exit_by_hanging_up.wav"/>
+ <!-- Suggested additions; "not" would require syntax handling; is "call" a verb or a noun?
+ <prompt phrase="ou" filename ="ivr-or.wav"/>
+ <prompt phrase="not" filename ="ivr-not.wav"/>
+ <prompt phrase="call" filename ="ivr-call.wav"/>
+ <prompt phrase="Vous pouvez" filename ="ivr-you_may.wav"/>
+ -->
+ </ivr>
+ <misc>
+ <prompt phrase="Cet appel a été sécurisé" filename="call_secured.wav"/>
+ <prompt phrase="Suivi de la touche dièse" filename="followed.wav"/>
+ <prompt phrase="Si vous êtes cette personne" filename="if_you_are_this_person.wav"/>
+ <prompt phrase="Si vous souhaitez" filename="if_you_would_like_to.wav"/>
+ <prompt phrase="Provide reference number" filename="provide_reference_number.wav"/>
+ <prompt phrase="Veuillez saisir le numéro de poste du destinataire" filename="transfer1.wav"/>
+ <!-- Is "transfer" a noun or a verb? -->
+ <prompt phrase="Transfer" filename="transfer2.wav"/>
+ <prompt phrase="Nous essayons de joindre" filename="we_are_trying_to_reach.wav"/>
+ <prompt phrase="Une erreur est survenue. Veuillez contacter l'administrateur." filename="error.wav"/>
+ </misc>
</fr>
</language>
Copied: freeswitch/branches/seven/docs/phrase/phrase_ru.xml (from rev 14471, freeswitch/trunk/docs/phrase/phrase_ru.xml) (0 => 14472)
--- freeswitch/branches/seven/docs/phrase/phrase_ru.xml (rev 0)
+++ freeswitch/branches/seven/docs/phrase/phrase_ru.xml 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1220 @@
+<language>
+ <ru>
+ <ascii>
+ <prompt phrase="Пробел" filename="32.wav"/>
+ <!-- -->
+ <prompt phrase="Решётка" filename="35.wav"/>
+ <prompt phrase="Звездочка" filename="42.wav"/>
+ <prompt phrase="Точка" filename="46.wav"/>
+ <prompt phrase="A" filename="97.wav"/>
+ <prompt phrase="B" filename="98.wav"/>
+ <prompt phrase="C" filename="99.wav"/>
+ <prompt phrase="D" filename="100.wav"/>
+ <prompt phrase="E" filename="101.wav"/>
+ <prompt phrase="F" filename="102.wav"/>
+ <prompt phrase="G" filename="103.wav"/>
+ <prompt phrase="H" filename="104.wav"/>
+ <prompt phrase="I" filename="105.wav"/>
+ <prompt phrase="J" filename="106.wav"/>
+ <prompt phrase="K" filename="107.wav"/>
+ <prompt phrase="L" filename="108.wav"/>
+ <prompt phrase="M" filename="109.wav"/>
+ <prompt phrase="N" filename="110.wav"/>
+ <prompt phrase="O" filename="111.wav"/>
+ <prompt phrase="P" filename="112.wav"/>
+ <prompt phrase="Q" filename="113.wav"/>
+ <prompt phrase="R" filename="114.wav"/>
+ <prompt phrase="S" filename="115.wav"/>
+ <prompt phrase="T" filename="116.wav"/>
+ <prompt phrase="U" filename="117.wav"/>
+ <prompt phrase="V" filename="118.wav"/>
+ <prompt phrase="W" filename="119.wav"/>
+ <prompt phrase="X" filename="120.wav"/>
+ <prompt phrase="Y" filename="121.wav"/>
+ <prompt phrase="Z" filename="122.wav"/>
+ </ascii>
+ <phonetic-ascii>
+ <prompt phrase="Пробел" filename="32.wav"/>
+ <prompt phrase="Точка" filename="46.wav"/>
+ <prompt phrase="Alpha" filename="97.wav"/>
+ <prompt phrase="Bravo" filename="98.wav"/>
+ <prompt phrase="Charlie" filename="99.wav"/>
+ <prompt phrase="Delta" filename="100.wav"/>
+ <prompt phrase="Echo" filename="101.wav"/>
+ <prompt phrase="Foxtrot" filename="102.wav"/>
+ <prompt phrase="Golf" filename="103.wav"/>
+ <prompt phrase="Hotel" filename="104.wav"/>
+ <prompt phrase="India" filename="105.wav"/>
+ <prompt phrase="Juliet" filename="106.wav"/>
+ <prompt phrase="Kilo" filename="107.wav"/>
+ <prompt phrase="Lima" filename="108.wav"/>
+ <prompt phrase="Mike" filename="109.wav"/>
+ <prompt phrase="November" filename="110.wav"/>
+ <prompt phrase="Oscar" filename="111.wav"/>
+ <prompt phrase="Papa" filename="112.wav"/>
+ <prompt phrase="Quebec" filename="113.wav"/>
+ <prompt phrase="Romeo" filename="114.wav"/>
+ <prompt phrase="Sierra" filename="115.wav"/>
+ <prompt phrase="Tango" filename="116.wav"/>
+ <prompt phrase="Unifor" filename="117.wav"/>
+ <prompt phrase="Victor" filename="118.wav"/>
+ <prompt phrase="Whiskey" filename="119.wav"/>
+ <prompt phrase="Xray" filename="120.wav"/>
+ <prompt phrase="Yankee" filename="121.wav"/>
+ <prompt phrase="Zulu" filename="122.wav"/>
+ </phonetic-ascii>
+ <digits>
+ <prompt phrase="ноль" filename="0.wav"/>
+ <prompt phrase="нулевая" filename="h-0f.wav"/>
+ <prompt phrase="нулевой" filename="h-0m.wav"/>
+ <prompt phrase="Нулевое" filename="h-0n.wav"/>
+ <prompt phrase="нулевого" filename="h-0x.wav"/>
+ <prompt phrase="Один" filename="1.wav"/>
+ <prompt phrase="Одна" filename="1f.wav"/>
+ <prompt phrase="Одно" filename="1n.wav"/>
+ <prompt phrase="Одного" filename="1x.wav"/>
+ <prompt phrase="Одной" filename="1xx.wav"/>
+ <prompt phrase="Первого" filename="h-1x.wav"/>
+ <prompt phrase="Первый" filename="h-1m.wav"/>
+ <prompt phrase="Первое" filename="h-1n.wav"/>
+ <prompt phrase="Первая" filename="h-1f.wav"/>
+ <prompt phrase="Одной" filename="h-1xx.wav"/>
+ <prompt phrase="Два" filename="2.wav"/>
+ <prompt phrase="Две" filename="2f.wav"/>
+ <prompt phrase="Два" filename="2n.wav"/>
+ <prompt phrase="Двух" filename="h-2xx.wav"/>
+ <prompt phrase="Второе" filename="h-2n.wav"/>
+ <prompt phrase="Второго" filename="h-2x.wav"/>
+ <prompt phrase="Второй" filename="h-2m.wav"/>
+ <prompt phrase="Вторая" filename="h-2f.wav"/>
+ <prompt phrase="Три" filename="3.wav"/>
+ <prompt phrase="Третьего" filename="h-3x.wav"/>
+ <prompt phrase="Третий" filename="h-3m.wav"/>
+ <prompt phrase="Третья" filename="h-3f.wav"/>
+ <prompt phrase="третье" filename="h-3n.wav"/>
+ <prompt phrase="Трёх" filename="h-3xx.wav"/>
+ <prompt phrase="Четыре" filename="4.wav"/>
+ <prompt phrase="Четвёртая" filename="h-4f.wav"/>
+ <prompt phrase="Четвёртого" filename="h-4x.wav"/>
+ <prompt phrase="Четвёртый" filename="h-4m.wav"/>
+ <prompt phrase="Четвёртое" filename="h-4n.wav"/>
+ <prompt phrase="Четырёх" filename="h-4xx.wav"/>
+ <prompt phrase="Пять" filename="5.wav"/>
+ <prompt phrase="Пятая" filename="h-5f.wav"/>
+ <prompt phrase="Пятого" filename="h-5x.wav"/>
+ <prompt phrase="Пятый" filename="h-5m.wav"/>
+ <prompt phrase="Пятое" filename="h-5n.wav"/>
+ <prompt phrase="Пяти" filename="h-5xx.wav"/>
+ <prompt phrase="Шесть" filename="6.wav"/>
+ <prompt phrase="Шестая" filename="h-6f.wav"/>
+ <prompt phrase="Шестого" filename="h-6x.wav"/>
+ <prompt phrase="Шестой" filename="h-6m.wav"/>
+ <prompt phrase="Шестое" filename="h-6n.wav"/>
+ <prompt phrase="Шести" filename="h-6xx.wav"/>
+ <prompt phrase="Семь" filename="7.wav"/>
+ <prompt phrase="Седьмая" filename="h-7f.wav"/>
+ <prompt phrase="Седьмого" filename="h-7x.wav"/>
+ <prompt phrase="Седьмой" filename="h-7m.wav"/>
+ <prompt phrase="Седьмое" filename="h-7n.wav"/>
+ <prompt phrase="Семи" filename="h-7xx.wav"/>
+ <prompt phrase="Восемь" filename="8.wav"/>
+ <prompt phrase="Восьмая" filename="h-8f.wav"/>
+ <prompt phrase="Восьмого" filename="h-8x.wav"/>
+ <prompt phrase="Восьмой" filename="h-8m.wav"/>
+ <prompt phrase="Восьмое" filename="h-8n.wav"/>
+ <prompt phrase="Восьми" filename="h-8xx.wav"/>
+ <prompt phrase="Девять" filename="9.wav"/>
+ <prompt phrase="Девятая" filename="h-9f.wav"/>
+ <prompt phrase="Девятого" filename="h-9x.wav"/>
+ <prompt phrase="Девятый" filename="h-9m.wav"/>
+ <prompt phrase="Девятое" filename="h-9n.wav"/>
+ <prompt phrase="Девяти" filename="h-9xx.wav"/>
+ <prompt phrase="Десять" filename="10.wav"/>
+ <prompt phrase="Десятая" filename="h-10f.wav"/>
+ <prompt phrase="Десятого" filename="h-10x.wav"/>
+ <prompt phrase="Десятый" filename="h-10m.wav"/>
+ <prompt phrase="Десятое" filename="h-10n.wav"/>
+ <prompt phrase="Десяти" filename="h-10xx.wav"/>
+ <prompt phrase="Одинадцать" filename="11.wav"/>
+ <prompt phrase="Одинадцатая" filename="h-11f.wav"/>
+ <prompt phrase="Одинадцатого" filename="h-11x.wav"/>
+ <prompt phrase="Одинадцатый" filename="h-11m.wav"/>
+ <prompt phrase="Одинадцатое" filename="h-11n.wav"/>
+ <prompt phrase="Одинадцати" filename="h-11xx.wav"/>
+ <prompt phrase="Двенадцать" filename="12.wav"/>
+ <prompt phrase="Двенадцатая" filename="h-12f.wav"/>
+ <prompt phrase="Двенадцатого" filename="h-12x.wav"/>
+ <prompt phrase="Двенадцатый" filename="h-12m.wav"/>
+ <prompt phrase="Двенадцатое" filename="h-12n.wav"/>
+ <prompt phrase="Двенадцати" filename="h-12xx.wav"/>
+ <prompt phrase="Тринадцать" filename="13.wav"/>
+ <prompt phrase="Тринадцатая" filename="h-13f.wav"/>
+ <prompt phrase="Тринадцатого" filename="h-13x.wav"/>
+ <prompt phrase="Тринадцатый" filename="h-13m.wav"/>
+ <prompt phrase="Тринадцатое" filename="h-13n.wav"/>
+ <prompt phrase="Тринадцати" filename="h-13xx.wav"/>
+ <prompt phrase="Четырнадцать" filename="14.wav"/>
+ <prompt phrase="Четырнадцатая" filename="h-14f.wav"/>
+ <prompt phrase="Четырнадцатого" filename="h-14x.wav"/>
+ <prompt phrase="Четырнадцатый" filename="h-14m.wav"/>
+ <prompt phrase="Четырнадцатое" filename="h-14n.wav"/>
+ <prompt phrase="Четырнадцати" filename="h-14xx.wav"/>
+ <prompt phrase="Пятнадцать" filename="15.wav"/>
+ <prompt phrase="Пятнадцатая" filename="h-15f.wav"/>
+ <prompt phrase="Пятнадцатого" filename="h-15x.wav"/>
+ <prompt phrase="Пятнадцатый" filename="h-15m.wav"/>
+ <prompt phrase="Пятнадцатое" filename="h-15n.wav"/>
+ <prompt phrase="Пятнадцати" filename="h-15xx.wav"/>
+ <prompt phrase="Шестнадцать" filename="16.wav"/>
+ <prompt phrase="Шестнадцатая" filename="h-16f.wav"/>
+ <prompt phrase="Шестнадцатого" filename="h-16x.wav"/>
+ <prompt phrase="Шестнадцатый" filename="h-16m.wav"/>
+ <prompt phrase="Шестнадцатое" filename="h-16n.wav"/>
+ <prompt phrase="Шестнадцати" filename="h-16xx.wav"/>
+ <prompt phrase="Семнадцать" filename="17.wav"/>
+ <prompt phrase="Семнадцатая" filename="h-17f.wav"/>
+ <prompt phrase="Семнадцатого" filename="h-17x.wav"/>
+ <prompt phrase="Семнадцатый" filename="h-17m.wav"/>
+ <prompt phrase="Семнадцатое" filename="h-17n.wav"/>
+ <prompt phrase="Семнадцати" filename="h-17xx.wav"/>
+ <prompt phrase="Восемнадцать" filename="18.wav"/>
+ <prompt phrase="Восемнадцатая" filename="h-18f.wav"/>
+ <prompt phrase="Восемнадцатого" filename="h-18x.wav"/>
+ <prompt phrase="Восемнадцатый" filename="h-18m.wav"/>
+ <prompt phrase="Восемнадцатое" filename="h-18n.wav"/>
+ <prompt phrase="Восемнадцати" filename="h-18xx.wav"/>
+ <prompt phrase="Девятнадцать" filename="19.wav"/>
+ <prompt phrase="Девятнадцатая" filename="h-19f.wav"/>
+ <prompt phrase="Девятнадцатого" filename="h-19x.wav"/>
+ <prompt phrase="Девятнадцатый" filename="h-19m.wav"/>
+ <prompt phrase="Девятнадцатое" filename="h-19n.wav"/>
+ <prompt phrase="Девятнадцати" filename="h-19xx.wav"/>
+ <prompt phrase="Двадцать" filename="20.wav"/>
+ <prompt phrase="Двадцатая" filename="h-20f.wav"/>
+ <prompt phrase="Двадцатого" filename="h-20x.wav"/>
+ <prompt phrase="Двадцатый" filename="h-20m.wav"/>
+ <prompt phrase="Двадцатое" filename="h-20n.wav"/>
+ <prompt phrase="Двадцати" filename="h-20xx.wav"/>
+ <prompt phrase="Тридцать" filename="30.wav"/>
+ <prompt phrase="Тридцатая" filename="h-30f.wav"/>
+ <prompt phrase="Тридцатого" filename="h-30x.wav"/>
+ <prompt phrase="Тридцатый" filename="h-30m.wav"/>
+ <prompt phrase="Тридцатое" filename="h-30n.wav"/>
+ <prompt phrase="Тридцати" filename="h-30xx.wav"/>
+ <prompt phrase="Сорок" filename="40.wav"/>
+ <prompt phrase="Сороковая" filename="h-40f.wav"/>
+ <prompt phrase="Сорокового" filename="h-40x.wav"/>
+ <prompt phrase="Сороковой" filename="h-40m.wav"/>
+ <prompt phrase="Сороковое" filename="h-40n.wav"/>
+ <prompt phrase="Сорока" filename="h-40xx.wav"/>
+ <prompt phrase="Пятьдесят" filename="50.wav"/>
+ <prompt phrase="Пятидесятая" filename="h-50f.wav"/>
+ <prompt phrase="Пятидесятого" filename="h-50x.wav"/>
+ <prompt phrase="Пятидесятый" filename="h-50m.wav"/>
+ <prompt phrase="Пятидесятое" filename="h-50n.wav"/>
+ <prompt phrase="Пятидесяти" filename="h-50xx.wav"/>
+ <prompt phrase="Шестьдесят" filename="60.wav"/>
+ <prompt phrase="Шестидесятая" filename="h-60f.wav"/>
+ <prompt phrase="Шестидесятого" filename="h-60x.wav"/>
+ <prompt phrase="Шестидесятый" filename="h-60m.wav"/>
+ <prompt phrase="Шестидесятое" filename="h-60n.wav"/>
+ <prompt phrase="Шестидесяти" filename="h-60xx.wav"/>
+ <prompt phrase="Семьдесят" filename="70.wav"/>
+ <prompt phrase="Семидесятая" filename="h-70f.wav"/>
+ <prompt phrase="Семидесятого" filename="h-70x.wav"/>
+ <prompt phrase="Семидесятый" filename="h-70m.wav"/>
+ <prompt phrase="Семидесятое" filename="h-70n.wav"/>
+ <prompt phrase="Семидесяти" filename="h-70xx.wav"/>
+ <prompt phrase="Восемьдесят" filename="80.wav"/>
+ <prompt phrase="Восьмидесятая" filename="h-80f.wav"/>
+ <prompt phrase="Восемидесятого" filename="h-80x.wav"/>
+ <prompt phrase="Восемидесятый" filename="h-80m.wav"/>
+ <prompt phrase="Восьмидесятое" filename="h-80n.wav"/>
+ <prompt phrase="Восьмидесяти" filename="h-80xx.wav"/>
+ <prompt phrase="Девяносто" filename="90.wav"/>
+ <prompt phrase="Девяностая" filename="h-90f.wav"/>
+ <prompt phrase="Девяностого" filename="h-90x.wav"/>
+ <prompt phrase="Девяностый" filename="h-90m.wav"/>
+ <prompt phrase="Девяностое" filename="h-90n.wav"/>
+ <prompt phrase="Девяноста" filename="h-90xx.wav"/>
+ <prompt phrase="Сто" filename="100.wav"/>
+ <prompt phrase="Сотая" filename="h-100f.wav"/>
+ <prompt phrase="Сотого" filename="h-100x.wav"/>
+ <prompt phrase="Сотый" filename="h-100m.wav"/>
+ <prompt phrase="Сотое" filename="h-100n.wav"/>
+ <prompt phrase="Ста" filename="h-100xx.wav"/>
+ <prompt phrase="Двести" filename="200.wav"/>
+ <prompt phrase="Двухсотая" filename="h-200f.wav"/>
+ <prompt phrase="Двухсотого" filename="h-200x.wav"/>
+ <prompt phrase="Двухсотый" filename="h-200m.wav"/>
+ <prompt phrase="Двухсотое" filename="h-200n.wav"/>
+ <prompt phrase="Двухсот" filename="h-200xx.wav"/>
+ <prompt phrase="Триста" filename="300.wav"/>
+ <prompt phrase="Трёхсотая" filename="h-300f.wav"/>
+ <prompt phrase="Трёхсотого" filename="h-300x.wav"/>
+ <prompt phrase="Трёхсотый" filename="h-300m.wav"/>
+ <prompt phrase="Трёхсотое" filename="h-300n.wav"/>
+ <prompt phrase="Трёхсот" filename="h-300xx.wav"/>
+ <prompt phrase="Четыреста" filename="400.wav"/>
+ <prompt phrase="Четырёхсотая" filename="h-400f.wav"/>
+ <prompt phrase="Четырёхсотого" filename="h-400x.wav"/>
+ <prompt phrase="Четырёхсотый" filename="h-400m.wav"/>
+ <prompt phrase="Четырёхсотое" filename="h-400n.wav"/>
+ <prompt phrase="Четырёхсот" filename="h-400xx.wav"/>
+ <prompt phrase="Пятьсот" filename="500.wav"/>
+ <prompt phrase="Пятисотая" filename="h-500f.wav"/>
+ <prompt phrase="Пятисотого" filename="h-500x.wav"/>
+ <prompt phrase="Пятисотый" filename="h-500m.wav"/>
+ <prompt phrase="Пятисотое" filename="h-500n.wav"/>
+ <prompt phrase="Пятисот" filename="h-500xx.wav"/>
+ <prompt phrase="Шестьсот" filename="600.wav"/>
+ <prompt phrase="Шестисотая" filename="h-600f.wav"/>
+ <prompt phrase="Шестисотого" filename="h-600x.wav"/>
+ <prompt phrase="Шестисотый" filename="h-600m.wav"/>
+ <prompt phrase="Шестисотое" filename="h-600n.wav"/>
+ <prompt phrase="Шестисот" filename="h-600xx.wav"/>
+ <prompt phrase="Семьсот" filename="700.wav"/>
+ <prompt phrase="Семисотая" filename="h-700f.wav"/>
+ <prompt phrase="Семисотого" filename="h-700x.wav"/>
+ <prompt phrase="Семисотый" filename="h-700m.wav"/>
+ <prompt phrase="Семисотое" filename="h-700n.wav"/>
+ <prompt phrase="Семисот" filename="h-700xx.wav"/>
+ <prompt phrase="Восемьсот" filename="800.wav"/>
+ <prompt phrase="Восьмисотая" filename="h-800f.wav"/>
+ <prompt phrase="Восьмисотого" filename="h-800x.wav"/>
+ <prompt phrase="Восьмисотый" filename="h-800m.wav"/>
+ <prompt phrase="Восьмисотое" filename="h-800n.wav"/>
+ <prompt phrase="Восьмисот" filename="h-800xx.wav"/>
+ <prompt phrase="Девятьсот" filename="900.wav"/>
+ <prompt phrase="Девятисотая" filename="h-900f.wav"/>
+ <prompt phrase="Девятосотого" filename="h-900x.wav"/>
+ <prompt phrase="Девятисотый" filename="h-900m.wav"/>
+ <prompt phrase="Девятисотое" filename="h-900n.wav"/>
+ <prompt phrase="Девятисот" filename="h-900xx.wav"/>
+ <prompt phrase="Тысяча" filename="thousand.wav"/>
+ <prompt phrase="Тысячи" filename="thousands-i.wav"/>
+ <prompt phrase="Тысяч" filename="thousands.wav"/>
+ <prompt phrase="Тысячная" filename="h-thousandf.wav"/>
+ <prompt phrase="Тысячного" filename="h-thousandx.wav"/>
+ <prompt phrase="Тысячный" filename="h-thousandm.wav"/>
+ <prompt phrase="Тысячное" filename="h-thousandn.wav"/>
+ <prompt phrase="Тысячных" filename="h-thousandxxx.wav"/>
+ <prompt phrase="Миллион" filename="million.wav"/>
+ <prompt phrase="Миллиона" filename="million-a.wav"/>
+ <prompt phrase="Миллионов" filename="millions.wav"/>
+ <prompt phrase="Миллионная" filename="h-millionf.wav"/>
+ <prompt phrase="Миллионного" filename="h-millionx.wav"/>
+ <prompt phrase="Миллионный" filename="h-millionm.wav"/>
+ <prompt phrase="Миллионное" filename="h-millionn.wav"/>
+ <prompt phrase="Миллионных" filename="h-millionxxx.wav"/>
+ <prompt phrase="Точка" filename="dot.wav"/>
+ <prompt phrase="Точка" filename="period.wav"/>
+<!--period -->
+ <prompt phrase="Точка" filename="point.wav"/>
+ <prompt phrase="Решётка" filename="pound.wav"/>
+ <prompt phrase="Звёздочка" filename="star.wav"/>
+ </digits>
+ <currency>
+ <prompt phrase="и" filename="and.wav"/>
+ <prompt phrase="Цент" filename="cent.wav"/>
+ <prompt phrase="центральный" filename="central.wav"/>
+ <prompt phrase="Центов в минуту" filename="cents-per-minute.wav"/>
+ <prompt phrase="Центы" filename="cents.wav"/>
+ <prompt phrase="Доллар" filename="dollar.wav"/>
+ <prompt phrase="Долларов" filename="dollars.wav"/>
+ <prompt phrase="Минус" filename="minus.wav"/>
+ <prompt phrase="Отрицательный" filename="negative.wav"/>
+ <prompt phrase="Копеек" filename="kopeck-i.wav"/>
+ <prompt phrase="Копейка" filename="kopeck.wav"/>
+ <prompt phrase="Копейки" filename="kopecks.wav"/>
+ <prompt phrase="Рубль" filename="ruble.wav"/>
+ <prompt phrase="Рубля" filename="ruble-a.wav"/>
+ <prompt phrase="Рублей" filename="rubles.wav"/>
+ </currency>
+ <time>
+ <prompt phrase="до полудня" filename="a-m.wav"/>
+ <prompt phrase="В" filename="at.wav"/>
+ <prompt phrase="Воскресенье" filename="day-0.wav"/>
+ <prompt phrase="Понедельник" filename="day-1.wav"/>
+ <prompt phrase="Вторник" filename="day-2.wav"/>
+ <prompt phrase="Среда" filename="day-3.wav"/>
+ <prompt phrase="Четверг" filename="day-4.wav"/>
+ <prompt phrase="Пятница" filename="day-5.wav"/>
+ <prompt phrase="Суббота" filename="day-6.wav"/>
+ <prompt phrase="час" filename="hour.wav"/>
+ <prompt phrase="часа" filename="hours-a.wav"/>
+ <prompt phrase="часов" filename="hours.wav"/>
+ <prompt phrase="минута" filename="minute.wav"/>
+ <prompt phrase="Минуты" filename="minutes-i.wav"/>
+ <prompt phrase="минут" filename="minutes.wav"/>
+ <prompt phrase="секунда" filename="second.wav"/>
+ <prompt phrase="секунды" filename="seconds-i.wav"/>
+ <prompt phrase="секунд" filename="seconds.wav"/>
+ <prompt phrase="января" filename="mon-0.wav"/>
+ <prompt phrase="февраля" filename="mon-1.wav"/>
+ <prompt phrase="марта" filename="mon-2.wav"/>
+ <prompt phrase="апреля" filename="mon-3.wav"/>
+ <prompt phrase="мая" filename="mon-4.wav"/>
+ <prompt phrase="июня" filename="mon-5.wav"/>
+ <prompt phrase="июля" filename="mon-6.wav"/>
+ <prompt phrase="августа" filename="mon-7.wav"/>
+ <prompt phrase="сентября" filename="mon-8.wav"/>
+ <prompt phrase="октября" filename="mon-9.wav"/>
+ <prompt phrase="ноября" filename="mon-10.wav"/>
+ <prompt phrase="декабря" filename="mon-11.wav"/>
+ <prompt phrase="после полудня" filename="p-m.wav"/>
+ <prompt phrase="сегодня" filename="today.wav"/>
+ <prompt phrase="завтра" filename="tomorrow.wav"/>
+ <prompt phrase="вчера" filename="yesterday.wav"/>
+ <prompt phrase="Год" filename="year.wav"/>
+ <prompt phrase="Года" filename="h-year.wav"/>
+ <prompt phrase="Годов" filename="years.wav"/>
+ <prompt phrase="Лет" filename="yearsx.wav"/>
+ </time>
+ <voicemail>
+ <prompt phrase="Абонент с номером" filename="vm-person.wav"/>
+ <!-- The person at extension-->
+ <prompt phrase="Помечено как важное" filename="vm-marked_urgent.wav"/>
+ <!-- marked urgent-->
+ <prompt phrase="отправлен на электронную почту" filename="vm-emailed.wav"/>
+<!-- emailed-->
+ <prompt phrase="у Вас" filename="vm-you_have.wav"/>
+<!--you have -->
+ <prompt phrase="Пожалуйста, введите свой идентификатор, завершив нажатием на клавишу" filename="vm-enter_id.wav"/>
+<!-- please enter your i d, followed by -->
+ <prompt phrase="Пожалуйста, введите свой пароль , завершив нажатием на клавишу" filename="vm-enter_pass.wav"/>
+<!-- please enter your password, followed by -->
+ <prompt phrase="Неправильный номер" filename="vm-fail_auth.wav"/>
+<!-- login incorrect -->
+ <prompt phrase="Добро пожаловать в Вашу голосовую почту" filename="vm-hello.wav"/>
+<!-- welcome to your voicemail -->
+ <prompt phrase="До свидания" filename="vm-goodbye.wav"/>
+<!--goodbye -->
+ <prompt phrase="После сигнала, пожалуйста, сообщите свое имя, для окончания записи нажмите любую клавишу или перестаньте говорить." filename="vm-record_name1.wav"/>
+<!--at the tone please record your name, press any key or stop talking to end the recording. -->
+ <prompt phrase="Выберите приветствие от единицы до девяти" filename="vm-choose_greeting_choose.wav"/>
+<!--choose a greeting between 1 and 9 -->
+ <prompt phrase="Неправильное значение" filename="vm-choose_greeting_fail.wav"/>
+<!--invalid value -->
+ <prompt phrase="Слишком много неудачных попыток" filename="vm-abort.wav"/>
+<!--too many failed attempts -->
+ <prompt phrase="Для изменения Вашего пароля" filename="vm-change_password.wav"/>
+<!-- to change your password -->
+ <prompt phrase="После сигнала, запишите свое приветствие, для окончания записи нажмите любую клавишу или перестаньте говорить" filename="vm-to_record_greeting.wav"/>
+<!-- record your greeting at the tone, press any key or stop talking to end the recording -->
+ <prompt phrase="После сигнала, запишите свое сообщение, для окончания записи нажмите любую клавишу или перестаньте говорить" filename="vm-record_message.wav"/>
+<!--record your message at the tone, press any key or stop talking to end the recording -->
+ <prompt phrase="не доступно" filename="vm-play_greeting.wav"/>
+<!-- is not available -->
+ <prompt phrase="новых срочных" filename="vm-urgent-newx.wav"/>
+<!-- urgent new -->
+ <prompt phrase="новое срочное" filename="vm-urgent-new.wav"/>
+<!-- -->
+ <prompt phrase="новое" filename="vm-new.wav"/>
+<!-- new -->
+ <prompt phrase="новых" filename="vm-newx.wav"/>
+<!-- -->
+ <prompt phrase="срочное сообщение сохранено" filename="vm-urgent-saved.wav"/>
+<!--urgent saved -->
+ <prompt phrase="сохранено" filename="vm-saved.wav"/>
+<!--saved -->
+ <prompt phrase="сообщение" filename="vm-message.wav"/>
+<!--message -->
+ <prompt phrase="сообщений" filename="vm-messagex.wav"/>
+<!--messages -->
+ <prompt phrase="сообщения" filename="vm-messages.wav"/>
+<!-- message -->
+ <prompt phrase="нажмите" filename="vm-press.wav"/>
+<!-- press -->
+ <prompt phrase="чтобы прослушать новые сообщения" filename="vm-listen_new.wav"/>
+<!-- to listen to new messages -->
+ <prompt phrase="для прослушивания сохраненных сообщений" filename="vm-listen_saved.wav"/>
+<!-- to listen to saved messages -->
+ <prompt phrase="для дополнительных параметров" filename="vm-advanced.wav"/>
+<!-- for advanced options -->
+ <prompt phrase="для выхода" filename="vm-to_exit.wav"/>
+<!-- to exit -->
+ <prompt phrase="для записи приветствия" filename="vm-record_greeting.wav"/>
+<!-- to record a greeting -->
+ <prompt phrase="для выбора приветствия" filename="vm-choose_greeting.wav"/>
+<!-- to choose greeting -->
+ <prompt phrase="для записи Вашего имени" filename="vm-record_name2.wav"/>
+<!-- to record your name -->
+ <prompt phrase="для перехода в главное меню" filename="vm-main_menu.wav"/>
+<!-- for the main menu -->
+ <prompt phrase="прослушать запись" filename="vm-listen_to_recording.wav"/>
+<!-- to listen to the recording -->
+ <prompt phrase="сохранить запись" filename="vm-save_recording.wav"/>
+<!-- to save the recording -->
+ <prompt phrase="записать" filename="vm-rerecord.wav"/>
+<!-- to rerecord -->
+ <prompt phrase="пометить это сообщение как срочное" filename="vm-mark-urgent.wav"/>
+<!-- to mark this message urgent -->
+ <prompt phrase="для продолжения" filename="vm-continue.wav"/>
+<!-- to continue -->
+ <prompt phrase="прослушать запись снова" filename="vm-listen_to_recording_again.wav"/>
+<!-- to listen to the recording again -->
+ <prompt phrase="удалить запись" filename="vm-delete_recording.wav"/>
+<!-- to delete the recording -->
+ <prompt phrase="переслать это сообщение" filename="vm-to_forward.wav"/>
+<!-- to forward the recording to your email -->
+ <prompt phrase="переслать запись на электронную почту" filename="vm-forward_to_email.wav"/>
+<!-- -->
+ <prompt phrase="приветствие" filename="vm-greeting.wav"/>
+<!--greeting -->
+ <prompt phrase="выбрано" filename="vm-selected.wav"/>
+<!-- selected -->
+ <prompt phrase="не доступен" filename="vm-not_available.wav"/>
+<!-- is not available -->
+ <prompt phrase="сообщение номер" filename="vm-message_number.wav"/>
+<!-- message number -->
+ <prompt phrase="удалено" filename="vm-deleted.wav"/>
+<!-- deleted -->
+ <prompt phrase="Ваша запись короче минимально допустимой длинны, пожалуйста попробуйте снова" filename="vm-too-small.wav"/>
+<!-- Your recording is below the minimum acceptable length, please try again -->
+ <prompt phrase="в папке Входящие" filename="vm-in_folder.wav"/>
+<!-- in folder inbox -->
+ <prompt phrase="что бы перезвонить" filename="vm-return_call_1.wav"/>
+<!-- to return the call now -->
+ <prompt phrase="для возврата вызова" filename="vm-return_call.wav"/>
+<!-- to return the call now -->
+ <prompt phrase="Срочное" filename="vm-urgent.wav"/>
+<!-- urgent -->
+ <prompt phrase="добавить вступление к сообщению" filename="vm-forward_add_intro.wav"/>
+<!-- to add an introduction to this message -->
+ <prompt phrase="для того что бы послать собощение" filename="vm-send_message_now.wav"/>
+<!-- to send this messege now -->
+ <prompt phrase="пожалуйста, введите добавочный номер для отправки сообщения" filename="vm-forward_enter_ext.wav"/>
+<!--please, enter the extention to forward this message to -->
+ <prompt phrase="Неправильный добавочный номер" filename="vm-that_was_an_invalid_ext.wav"/>
+<!-- -->
+ <prompt phrase="Почтовый ящик переполнен. Пожалуйста перезвоните позже" filename="vm-mailbox_full.wav"/>
+<!-- That mailbox is full. Please try your call again later. -->
+ </voicemail>
+ <conference>
+ <prompt phrase="NULL" filename="conf-ack.wav" type="tone"/>
+<!-- -->
+ <prompt phrase="NULL" filename="conf-nack.wav" type="tone"/>
+<!-- -->
+ <prompt phrase="Ваш микрофон отключен" filename="conf-muted.wav"/>
+<!-- You are now muted. -->
+ <prompt phrase="Ваш микрофон включён" filename="conf-unmuted.wav"/>
+<!-- You are now unmuted. -->
+ <prompt phrase="Вы единственный участник конференции" filename="conf-alone.wav"/>
+<!-- You are currently the only person in this conference. -->
+ <prompt phrase="NULL" filename="conf-perpetual.wav" type="tone"/>
+<!-- -->
+ <prompt phrase="NULL" filename="conf-enter.wav" type="tone"/>
+<!-- -->
+ <prompt phrase="NULL" filename="conf-exit.wav" type="tone"/>
+<!-- -->
+ <prompt phrase="Вы были отключены от конференции" filename="conf-kicked.wav"/>
+<!-- You have been kicked from this conference. -->
+ <prompt phrase="Эта конференция заблокирована" filename="conf-locked.wav"/>
+<!-- This conference is locked. -->
+ <prompt phrase="Конференция заблокирована" filename="conf-is-locked.wav"/>
+<!-- The conference is now locked. -->
+ <prompt phrase="Конференция разблокирована" filename="conf-is-unlocked.wav"/>
+<!-- The conference is now unlocked. -->
+ <prompt phrase="Пожалуйста, введите пин-код конференции" filename="conf-pin.wav"/>
+<!-- Please enter the conference pin number. -->
+ <prompt phrase="Неправильный пин-код, попробуйте снова" filename="conf-bad-pin.wav"/>
+<!-- Invalid pin number, try again. -->
+ <prompt phrase="До свидания" filename="conf-goodbye.wav"/>
+<!-- goodbye -->
+ <prompt phrase="Добро пожаловать в конференцию" filename="conf-welcome.wav"/>
+<!--Welcome to the conference. -->
+ </conference>
+ <ivr>
+ <prompt phrase="Номер счета" filename="ivr-account_number.wav"/>
+<!-- Account number -->
+ <prompt phrase="Соединение с вызывающим абонентом" filename="ivr-connect_to_caller.wav"/>
+<!--Connect to caller -->
+ <prompt phrase="Если вам известен добавочный номер вызываемого абонента, пожалуйста введите его сейчас" filename="ivr-enter_ext_pound.wav"/>
+<!-- If you know your party's extension, please enter it now -->
+ <prompt phrase="Пожалуйста, введите добавочный номер абонента завершив нажатием на клавишу решётка" filename="ivr-enter_ext.wav"/>
+<!-- Please enter an extension followed by the pound sign-->
+ <prompt phrase="Для этого абонента" filename="ivr-for_this_person.wav"/>
+<!-- For this person -->
+ <prompt phrase="Пожалуйста, оставайтесь на линии, идет соединение" filename="ivr-hold_connect_call.wav"/>
+<!-- Please hold while I connect your call -->
+ <prompt phrase="Извините" filename="ivr-im_sorry.wav"/>
+<!-- I'm sorry -->
+ <prompt phrase="Пожалуйста" filename="ivr-please.wav"/>
+<!-- Please -->
+ <prompt phrase="Пожалуйста, перезвоните нам в …" filename="ivr-please_return_our_call_at.wav"/>
+<!-- Please return our call at -->
+ <prompt phrase="относительно номера ссылки" filename="ivr-regarding_reference_number.wav"/>
+<!-- Regarding reference number -->
+ <prompt phrase="Это пример голосового подменю" filename="ivr-sample_submenu.wav"/>
+<!-- This is a sample IVR submenu... -->
+ <prompt phrase="Пожалуйста, представьтесь после сигнала" filename="ivr-say_name.wav"/>
+<!-- Please say your name after the tone -->
+ <prompt phrase="Перенаправить на голосовую почту" filename="ivr-send_to_voicemail.wav"/>
+<!-- Send this caller to voicemail -->
+ <prompt phrase="Для разговора с представителем по обслуживанию клиентов" filename="ivr-speak_to_a_customer_service_representative.wav"/>
+<!-- To speak to a customer service representative -->
+ <prompt phrase="принять сообщение." filename="ivr-take_a_message.wav"/>
+<!-- Take a message -->
+ <prompt phrase="Спасибо" filename="ivr-thank_you.wav"/>
+<!-- Thank you -->
+ <prompt phrase="Неправильное значение" filename="ivr-that_was_an_invalid_entry.wav"/>
+<!-- That was an invalid entry -->
+ <prompt phrase="Этот звонок от" filename="ivr-this_is_a_call_from.wav"/>
+<!-- This is a call from -->
+ <prompt phrase="это голосовое меню позволит Вам протестировать некоторые функции" filename="ivr-this_ivr_will_let_you_test_features.wav"/>
+<!-- This IVR will let you test some of the features... -->
+ <prompt phrase="Для того чтобы набрать конференцию ФС ___" filename="ivr-to_call_the_freeswitch_conference.wav"/>
+<!-- To call the FreeSWITCH conference -->
+ <prompt phrase="Для выполнения эхо-теста в ФС" filename="ivr-to_do_a_freeswitch_echo_test.wav"/>
+<!-- To do a FreeSWITCH echo test -->
+ <prompt phrase="Для выполнения эхо-теста free world dialed" filename="ivr-to_do_a_fwd_echo_test.wav"/>
+<!-- To do a fwd echo test -->
+ <prompt phrase="чтобы прослушать пример голосового подменю" filename="ivr-to_hear_sample_submenu.wav"/>
+<!-- To hear a sample IVR submenu -->
+ <prompt phrase="Чтобы услышать кричащих обезьян" filename="ivr-to_hear_screaming_monkeys.wav"/>
+<!-- To hear screaming monkeys -->
+ <prompt phrase="Для прослушивания списка мелодий в режиме ожидания" filename="ivr-to_listen_to_moh.wav"/>
+<!-- To list to music on hold -->
+ <prompt phrase="Для повтора этих параметров" filename="ivr-to_repeat_these_options.wav"/>
+<!-- To repeat these options -->
+ <prompt phrase="Для возврата к предыдущему меню" filename="ivr-to_return_to_previous_menu.wav"/>
+<!-- To return to the previous menu -->
+ <prompt phrase="Для соединения с оператором" filename="ivr-to_speak_with_an_operator.wav"/>
+<!-- To speak with an operator -->
+ <prompt phrase="Добро пожаловать в FreeSwitch, будущее телефонии" filename="ivr-welcome_to_freeswitch.wav"/>
+<!-- Welcome to FreeSWITCH, the future of telephony -->
+ <prompt phrase="Вы можете выйти в любое время повесив трубку" filename="ivr-you_may_exit_by_hanging_up.wav"/>
+<!-- You may exit at any time by simply hanging up -->
+ <prompt phrase="или" filename="ivr-or.wav"/>
+<!-- or -->
+ <prompt phrase="не" filename="ivr-not.wav"/>
+<!-- not -->
+ <prompt phrase="Вызов" filename="ivr-call.wav"/>
+<!-- call -->
+ <prompt phrase="Вы можете" filename="ivr-you_may.wav"/>
+<!-- You may -->
+ <prompt phrase="Здравствуйте" filename="ivr-hello.wav"/>
+<!-- hello -->
+ <prompt phrase="Используя клавиатуру телефона…" filename="ivr-use_telephone_keypad.wav"/>
+<!-- Using your telephone keypad... -->
+ <prompt phrase="Пожалуйста, назовите имя сотрудника, которому пытаетесь дозвониться" filename="ivr-spell_name.wav"/>
+<!-- please spell the name of the person you are trying to reach. -->
+ <prompt phrase="Сначала фамилия" filename="ivr-last_name_first.wav"/>
+<!--Last name firs -->
+ <prompt phrase="Сначала имя" filename="ivr-first_name_first.wav"/>
+<!--First name first -->
+ <prompt phrase="Нажмите 1 для Q или Z." filename="ivr-press_one_q_or_z.wav"/>
+<!--Press 1 for Q or Z. -->
+ <prompt phrase="Отдел продаж" filename="ivr-sales.wav"/>
+<!-- Sales -->
+ <prompt phrase="Центр обслуживания клиентов" filename="ivr-customer_service.wav"/>
+<!-- Customer service -->
+ <prompt phrase="Отдел технической поддержки" filename="ivr-technical_support.wav"/>
+<!-- Technical support -->
+ <prompt phrase="Оператор" filename="ivr-operator.wav"/>
+<!-- Operator -->
+ <prompt phrase="Вы набрали несуществующий добавочный номер" filename="ivr-you_have_dialed_an_invalid_extension.wav"/>
+<!--You have dialed an invalid extension. -->
+ <prompt phrase="Пожалйста, наберите добавочный номер и нажмите клавишу решетка" filename="ivr-please_enter_extension_followed_by_pound.wav"/>
+<!--Please enter your extension, followed by the pound sign. -->
+ <prompt phrase="Пожалуйста введите ваш пинкод и нажмите клавишу решётка" filename="ivr-please_enter_pin_followed_by_pound.wav"/>
+<!-- Please enter your pin number, followed by the pound sign. -->
+ <prompt phrase="Ваш пин код или номер не верны" filename="ivr-pin_or_extension_is-invalid.wav"/>
+<!-- Your pin number or extension is invalid. -->
+ <prompt phrase="Вы закрепляете этот телефон за вашей учётной записью" filename="ivr-you_are_about_to_provision_this_phone.wav"/>
+<!-- You are about to provision this phone to your account... -->
+ <prompt phrase="Пожалуйста повторите ваш пин код для подтверждения" filename="ivr-please_reenter_your_pin.wav"/>
+<!-- Please re-enter your pin number to confirm. -->
+ <prompt phrase="Для регистрации на clueCon , пожалуйста нажмите .." filename="ivr-register_for_cluecon.wav"/>
+<!-- To register for ClueCon, please press... -->
+ <prompt phrase="Для входа" filename="ivr-to_log_in.wav"/>
+<!-- to log in -->
+ <prompt phrase="Для выхода" filename="ivr-to_log_out.wav"/>
+<!-- to log out -->
+ <prompt phrase="Вы вошли" filename="ivr-you_are_now_logged_in.wav"/>
+<!-- You are now logged in -->
+ <prompt phrase="Вы вышли" filename="ivr-you_are_now_logged_out.wav"/>
+<!-- You are now logged out -->
+ <prompt phrase="Попробуйте снова" filename="ivr-please_try_again.wav"/>
+<!-- Please try again. -->
+ <prompt phrase="Вы закрепляете этот телефон за Вашим добавочным номером" filename="ivr-provision_phone_permanently_to_extension.wav"/>
+<!-- You are about to provision this phone permanently to your extension. -->
+ <prompt phrase="Пожалуйста введите добавочный номер за которым вы хотите закрепить этот телефон и нажмите решётку" filename="ivr-extension_to_provision_this_phone.wav"/>
+<!-- Please enter the extension number to which you would like to provision this phone,followed by the pound sign. -->
+ <prompt phrase="Спасибо, этот телефон сейчас перезагрузится" filename="ivr-this_phone_will_now_reboot.wav"/>
+<!-- Thank you, this phone will now reboot. -->
+ <prompt phrase="Спасибо. Ваше сообщение было записано." filename="ivr-recording_saved.wav"/> <!-- Thank you. Your recording has been saved. -->
+ <prompt phrase="Нажмите 1 что бы сохранить сообщение. Нажмите 2 что бы прослушать Ваше сообщение. Нажмите 3 что бы перезаписать" filename="ivr-save_review_record.wav"/><!-- Press 1 to save your recording. Press 2 to review your recording. Press 3 to re-record. -->
+ <prompt phrase="Система не смогла сохранить ваше сообщение. Попробуйте позднее." filename="ivr-unable_save"/><!-- The system is unable to save your sound file at this time. Please try again later. -->
+
+ </ivr>
+ <misc>
+ <prompt phrase="Этот звонок шифруется" filename="call_secured.wav"/>
+<!-- This call has been secured -->
+ <prompt phrase="завершаемый нажатием на клавишу решетка" filename="vm-followed_by.wav"/>
+<!-- Followed by pound -->
+ <prompt phrase="Если вы этот человек" filename="if_you_are_this_person.wav"/>
+<!-- If you are this person -->
+ <prompt phrase="Если вы хотите" filename="if_you_would_like_to.wav"/>
+<!-- If you would like to -->
+ <prompt phrase="Предоставьте номер ссылки" filename="provide_reference_number.wav"/>
+<!-- Provide reference number -->
+ <prompt phrase="Пожалуйста, введите добавочный номер на который хотите перевести звонок" filename="transfer1.wav"/>
+<!-- Please enter extension you want to transfer to -->
+ <prompt phrase="Перевод" filename="transfer2.wav"/>
+<!-- Transfer -->
+ <prompt phrase="Мы пытаемся связаться" filename="we_are_trying_to_reach.wav"/>
+<!-- We are trying to reach -->
+ <prompt phrase="Произошла ошибка, пожалуйста обратитесь к администратору" filename="error.wav"/>
+<!-- An error has occurred please contact the administrator -->
+ </misc>
+ <zrtp>
+ <!-- base256 prompts for SAS -->
+ <prompt phrase="Algol" filename="Algol.wav"/>
+ <prompt phrase="Apollo" filename="Apollo.wav"/>
+ <prompt phrase="Athens" filename="Athens.wav"/>
+ <prompt phrase="Atlantic" filename="Atlantic.wav"/>
+ <prompt phrase="Aztec" filename="Aztec.wav"/>
+ <prompt phrase="Babylon" filename="Babylon.wav"/>
+ <prompt phrase="Belfast" filename="Belfast.wav"/>
+ <prompt phrase="Bradbury" filename="Bradbury.wav"/>
+ <prompt phrase="Brazilian" filename="Brazilian.wav"/>
+ <prompt phrase="Burbank" filename="Burbank.wav"/>
+ <prompt phrase="Burlington" filename="Burlington.wav"/>
+ <prompt phrase="Camelot" filename="Camelot.wav"/>
+ <prompt phrase="Capricorn" filename="Capricorn.wav"/>
+ <prompt phrase="Cherokee" filename="Cherokee.wav"/>
+ <prompt phrase="Chicago" filename="Chicago.wav"/>
+ <prompt phrase="Christmas" filename="Christmas.wav"/>
+ <prompt phrase="Dakota" filename="Dakota.wav"/>
+ <prompt phrase="December" filename="December.wav"/>
+ <prompt phrase="Dupont" filename="Dupont.wav"/>
+ <prompt phrase="Eskimo" filename="Eskimo.wav"/>
+ <prompt phrase="Galveston" filename="Galveston.wav"/>
+ <prompt phrase="Geiger" filename="Geiger.wav"/>
+ <prompt phrase="Hamilton" filename="Hamilton.wav"/>
+ <prompt phrase="Istanbul" filename="Istanbul.wav"/>
+ <prompt phrase="Jamaica" filename="Jamaica.wav"/>
+ <prompt phrase="Jupiter" filename="Jupiter.wav"/>
+ <prompt phrase="Medusa" filename="Medusa.wav"/>
+ <prompt phrase="Mohawk" filename="Mohawk.wav"/>
+ <prompt phrase="Montana" filename="Montana.wav"/>
+ <prompt phrase="Neptune" filename="Neptune.wav"/>
+ <prompt phrase="Norwegian" filename="Norwegian.wav"/>
+ <prompt phrase="Oakland" filename="Oakland.wav"/>
+ <prompt phrase="October" filename="October.wav"/>
+ <prompt phrase="Ohio" filename="Ohio.wav"/>
+ <prompt phrase="Orlando" filename="Orlando.wav"/>
+ <prompt phrase="Pacific" filename="Pacific.wav"/>
+ <prompt phrase="Pandora" filename="Pandora.wav"/>
+ <prompt phrase="Pegasus" filename="Pegasus.wav"/>
+ <prompt phrase="Pluto" filename="Pluto.wav"/>
+ <prompt phrase="Saturday" filename="Saturday.wav"/>
+ <prompt phrase="Scotland" filename="Scotland.wav"/>
+ <prompt phrase="Trojan" filename="Trojan.wav"/>
+ <prompt phrase="Virginia" filename="Virginia.wav"/>
+ <prompt phrase="Vulcan" filename="Vulcan.wav"/>
+ <prompt phrase="Waterloo" filename="Waterloo.wav"/>
+ <prompt phrase="Wichita" filename="Wichita.wav"/>
+ <prompt phrase="Wilmington" filename="Wilmington.wav"/>
+ <prompt phrase="Wyoming" filename="Wyoming.wav"/>
+ <prompt phrase="Yucatan" filename="Yucatan.wav"/>
+ <prompt phrase="Zulu" filename="Zulu.wav"/>
+ <prompt phrase="aardvark" filename="aardvark.wav"/>
+ <prompt phrase="absurd" filename="absurd.wav"/>
+ <prompt phrase="accrue" filename="accrue.wav"/>
+ <prompt phrase="acme" filename="acme.wav"/>
+ <prompt phrase="adrift" filename="adrift.wav"/>
+ <prompt phrase="adroitness" filename="adroitness.wav"/>
+ <prompt phrase="adult" filename="adult.wav"/>
+ <prompt phrase="adviser" filename="adviser.wav"/>
+ <prompt phrase="afflict" filename="afflict.wav"/>
+ <prompt phrase="aftermath" filename="aftermath.wav"/>
+ <prompt phrase="aggregate" filename="aggregate.wav"/>
+ <prompt phrase="ahead" filename="ahead.wav"/>
+ <prompt phrase="aimless" filename="aimless.wav"/>
+ <prompt phrase="alkali" filename="alkali.wav"/>
+ <prompt phrase="allow" filename="allow.wav"/>
+ <prompt phrase="almighty" filename="almighty.wav"/>
+ <prompt phrase="alone" filename="alone.wav"/>
+ <prompt phrase="ammo" filename="ammo.wav"/>
+ <prompt phrase="amulet" filename="amulet.wav"/>
+ <prompt phrase="amusement" filename="amusement.wav"/>
+ <prompt phrase="ancient" filename="ancient.wav"/>
+ <prompt phrase="antenna" filename="antenna.wav"/>
+ <prompt phrase="apple" filename="apple.wav"/>
+ <prompt phrase="applicant" filename="applicant.wav"/>
+ <prompt phrase="armistice" filename="armistice.wav"/>
+ <prompt phrase="article" filename="article.wav"/>
+ <prompt phrase="artist" filename="artist.wav"/>
+ <prompt phrase="assume" filename="assume.wav"/>
+ <prompt phrase="asteroid" filename="asteroid.wav"/>
+ <prompt phrase="atlas" filename="atlas.wav"/>
+ <prompt phrase="atmosphere" filename="atmosphere.wav"/>
+ <prompt phrase="autopsy" filename="autopsy.wav"/>
+ <prompt phrase="baboon" filename="baboon.wav"/>
+ <prompt phrase="backfield" filename="backfield.wav"/>
+ <prompt phrase="backward" filename="backward.wav"/>
+ <prompt phrase="backwater" filename="backwater.wav"/>
+ <prompt phrase="banjo" filename="banjo.wav"/>
+ <prompt phrase="barbecue" filename="barbecue.wav"/>
+ <prompt phrase="beaming" filename="beaming.wav"/>
+ <prompt phrase="bedlamp" filename="bedlamp.wav"/>
+ <prompt phrase="beehive" filename="beehive.wav"/>
+ <prompt phrase="beeswax" filename="beeswax.wav"/>
+ <prompt phrase="befriend" filename="befriend.wav"/>
+ <prompt phrase="belowground" filename="belowground.wav"/>
+ <prompt phrase="berserk" filename="berserk.wav"/>
+ <prompt phrase="bifocals" filename="bifocals.wav"/>
+ <prompt phrase="billiard" filename="billiard.wav"/>
+ <prompt phrase="bison" filename="bison.wav"/>
+ <prompt phrase="blackjack" filename="blackjack.wav"/>
+ <prompt phrase="blockade" filename="blockade.wav"/>
+ <prompt phrase="blowtorch" filename="blowtorch.wav"/>
+ <prompt phrase="bluebird" filename="bluebird.wav"/>
+ <prompt phrase="bodyguard" filename="bodyguard.wav"/>
+ <prompt phrase="bombast" filename="bombast.wav"/>
+ <prompt phrase="bookseller" filename="bookseller.wav"/>
+ <prompt phrase="bookshelf" filename="bookshelf.wav"/>
+ <prompt phrase="borderline" filename="borderline.wav"/>
+ <prompt phrase="bottomless" filename="bottomless.wav"/>
+ <prompt phrase="brackish" filename="brackish.wav"/>
+ <prompt phrase="bravado" filename="bravado.wav"/>
+ <prompt phrase="breadline" filename="breadline.wav"/>
+ <prompt phrase="breakaway" filename="breakaway.wav"/>
+ <prompt phrase="breakup" filename="breakup.wav"/>
+ <prompt phrase="brickyard" filename="brickyard.wav"/>
+ <prompt phrase="briefcase" filename="briefcase.wav"/>
+ <prompt phrase="businessman" filename="businessman.wav"/>
+ <prompt phrase="butterfat" filename="butterfat.wav"/>
+ <prompt phrase="button" filename="button.wav"/>
+ <prompt phrase="buzzard" filename="buzzard.wav"/>
+ <prompt phrase="candidate" filename="candidate.wav"/>
+ <prompt phrase="cannonball" filename="cannonball.wav"/>
+ <prompt phrase="caravan" filename="caravan.wav"/>
+ <prompt phrase="caretaker" filename="caretaker.wav"/>
+ <prompt phrase="celebrate" filename="celebrate.wav"/>
+ <prompt phrase="cellulose" filename="cellulose.wav"/>
+ <prompt phrase="cement" filename="cement.wav"/>
+ <prompt phrase="certify" filename="certify.wav"/>
+ <prompt phrase="chairlift" filename="chairlift.wav"/>
+ <prompt phrase="chambermaid" filename="chambermaid.wav"/>
+ <prompt phrase="chatter" filename="chatter.wav"/>
+ <prompt phrase="checkup" filename="checkup.wav"/>
+ <prompt phrase="chisel" filename="chisel.wav"/>
+ <prompt phrase="choking" filename="choking.wav"/>
+ <prompt phrase="chopper" filename="chopper.wav"/>
+ <prompt phrase="clamshell" filename="clamshell.wav"/>
+ <prompt phrase="classic" filename="classic.wav"/>
+ <prompt phrase="classroom" filename="classroom.wav"/>
+ <prompt phrase="cleanup" filename="cleanup.wav"/>
+ <prompt phrase="clergyman" filename="clergyman.wav"/>
+ <prompt phrase="clockwork" filename="clockwork.wav"/>
+ <prompt phrase="cobra" filename="cobra.wav"/>
+ <prompt phrase="coherence" filename="coherence.wav"/>
+ <prompt phrase="combustion" filename="combustion.wav"/>
+ <prompt phrase="commando" filename="commando.wav"/>
+ <prompt phrase="commence" filename="commence.wav"/>
+ <prompt phrase="company" filename="company.wav"/>
+ <prompt phrase="component" filename="component.wav"/>
+ <prompt phrase="concert" filename="concert.wav"/>
+ <prompt phrase="concurrent" filename="concurrent.wav"/>
+ <prompt phrase="confidence" filename="confidence.wav"/>
+ <prompt phrase="conformist" filename="conformist.wav"/>
+ <prompt phrase="congregate" filename="congregate.wav"/>
+ <prompt phrase="consensus" filename="consensus.wav"/>
+ <prompt phrase="consulting" filename="consulting.wav"/>
+ <prompt phrase="corporate" filename="corporate.wav"/>
+ <prompt phrase="corrosion" filename="corrosion.wav"/>
+ <prompt phrase="councilman" filename="councilman.wav"/>
+ <prompt phrase="cowbell" filename="cowbell.wav"/>
+ <prompt phrase="crackdown" filename="crackdown.wav"/>
+ <prompt phrase="cranky" filename="cranky.wav"/>
+ <prompt phrase="crossover" filename="crossover.wav"/>
+ <prompt phrase="crowfoot" filename="crowfoot.wav"/>
+ <prompt phrase="crucial" filename="crucial.wav"/>
+ <prompt phrase="crucifix" filename="crucifix.wav"/>
+ <prompt phrase="crumpled" filename="crumpled.wav"/>
+ <prompt phrase="crusade" filename="crusade.wav"/>
+ <prompt phrase="cubic" filename="cubic.wav"/>
+ <prompt phrase="cumbersome" filename="cumbersome.wav"/>
+ <prompt phrase="customer" filename="customer.wav"/>
+ <prompt phrase="dashboard" filename="dashboard.wav"/>
+ <prompt phrase="deadbolt" filename="deadbolt.wav"/>
+ <prompt phrase="decadence" filename="decadence.wav"/>
+ <prompt phrase="decimal" filename="decimal.wav"/>
+ <prompt phrase="deckhand" filename="deckhand.wav"/>
+ <prompt phrase="designing" filename="designing.wav"/>
+ <prompt phrase="detector" filename="detector.wav"/>
+ <prompt phrase="detergent" filename="detergent.wav"/>
+ <prompt phrase="determine" filename="determine.wav"/>
+ <prompt phrase="dictator" filename="dictator.wav"/>
+ <prompt phrase="dinosaur" filename="dinosaur.wav"/>
+ <prompt phrase="direction" filename="direction.wav"/>
+ <prompt phrase="disable" filename="disable.wav"/>
+ <prompt phrase="disbelief" filename="disbelief.wav"/>
+ <prompt phrase="disruptive" filename="disruptive.wav"/>
+ <prompt phrase="distortion" filename="distortion.wav"/>
+ <prompt phrase="document" filename="document.wav"/>
+ <prompt phrase="dogsled" filename="dogsled.wav"/>
+ <prompt phrase="dragnet" filename="dragnet.wav"/>
+ <prompt phrase="drainage" filename="drainage.wav"/>
+ <prompt phrase="dreadful" filename="dreadful.wav"/>
+ <prompt phrase="drifter" filename="drifter.wav"/>
+ <prompt phrase="dropper" filename="dropper.wav"/>
+ <prompt phrase="drumbeat" filename="drumbeat.wav"/>
+ <prompt phrase="drunken" filename="drunken.wav"/>
+ <prompt phrase="dwelling" filename="dwelling.wav"/>
+ <prompt phrase="eating" filename="eating.wav"/>
+ <prompt phrase="edict" filename="edict.wav"/>
+ <prompt phrase="egghead" filename="egghead.wav"/>
+ <prompt phrase="eightball" filename="eightball.wav"/>
+ <prompt phrase="embezzle" filename="embezzle.wav"/>
+ <prompt phrase="enchanting" filename="enchanting.wav"/>
+ <prompt phrase="endorse" filename="endorse.wav"/>
+ <prompt phrase="endow" filename="endow.wav"/>
+ <prompt phrase="enlist" filename="enlist.wav"/>
+ <prompt phrase="enrollment" filename="enrollment.wav"/>
+ <prompt phrase="enterprise" filename="enterprise.wav"/>
+ <prompt phrase="equation" filename="equation.wav"/>
+ <prompt phrase="equipment" filename="equipment.wav"/>
+ <prompt phrase="erase" filename="erase.wav"/>
+ <prompt phrase="escapade" filename="escapade.wav"/>
+ <prompt phrase="escape" filename="escape.wav"/>
+ <prompt phrase="everyday" filename="everyday.wav"/>
+ <prompt phrase="examine" filename="examine.wav"/>
+ <prompt phrase="exceed" filename="exceed.wav"/>
+ <prompt phrase="existence" filename="existence.wav"/>
+ <prompt phrase="exodus" filename="exodus.wav"/>
+ <prompt phrase="eyeglass" filename="eyeglass.wav"/>
+ <prompt phrase="eyetooth" filename="eyetooth.wav"/>
+ <prompt phrase="facial" filename="facial.wav"/>
+ <prompt phrase="fallout" filename="fallout.wav"/>
+ <prompt phrase="fascinate" filename="fascinate.wav"/>
+ <prompt phrase="filament" filename="filament.wav"/>
+ <prompt phrase="finicky" filename="finicky.wav"/>
+ <prompt phrase="flagpole" filename="flagpole.wav"/>
+ <prompt phrase="flatfoot" filename="flatfoot.wav"/>
+ <prompt phrase="flytrap" filename="flytrap.wav"/>
+ <prompt phrase="forever" filename="forever.wav"/>
+ <prompt phrase="fortitude" filename="fortitude.wav"/>
+ <prompt phrase="fracture" filename="fracture.wav"/>
+ <prompt phrase="framework" filename="framework.wav"/>
+ <prompt phrase="freedom" filename="freedom.wav"/>
+ <prompt phrase="frequency" filename="frequency.wav"/>
+ <prompt phrase="frighten" filename="frighten.wav"/>
+ <prompt phrase="gadgetry" filename="gadgetry.wav"/>
+ <prompt phrase="gazelle" filename="gazelle.wav"/>
+ <prompt phrase="getaway" filename="getaway.wav"/>
+ <prompt phrase="glitter" filename="glitter.wav"/>
+ <prompt phrase="glossary" filename="glossary.wav"/>
+ <prompt phrase="glucose" filename="glucose.wav"/>
+ <prompt phrase="goggles" filename="goggles.wav"/>
+ <prompt phrase="goldfish" filename="goldfish.wav"/>
+ <prompt phrase="gossamer" filename="gossamer.wav"/>
+ <prompt phrase="graduate" filename="graduate.wav"/>
+ <prompt phrase="gravity" filename="gravity.wav"/>
+ <prompt phrase="gremlin" filename="gremlin.wav"/>
+ <prompt phrase="guidance" filename="guidance.wav"/>
+ <prompt phrase="guitarist" filename="guitarist.wav"/>
+ <prompt phrase="hamburger" filename="hamburger.wav"/>
+ <prompt phrase="hamlet" filename="hamlet.wav"/>
+ <prompt phrase="handiwork" filename="handiwork.wav"/>
+ <prompt phrase="hazardous" filename="hazardous.wav"/>
+ <prompt phrase="headwaters" filename="headwaters.wav"/>
+ <prompt phrase="hemisphere" filename="hemisphere.wav"/>
+ <prompt phrase="hesitate" filename="hesitate.wav"/>
+ <prompt phrase="hideaway" filename="hideaway.wav"/>
+ <prompt phrase="highchair" filename="highchair.wav"/>
+ <prompt phrase="hockey" filename="hockey.wav"/>
+ <prompt phrase="holiness" filename="holiness.wav"/>
+ <prompt phrase="hurricane" filename="hurricane.wav"/>
+ <prompt phrase="hydraulic" filename="hydraulic.wav"/>
+ <prompt phrase="impartial" filename="impartial.wav"/>
+ <prompt phrase="impetus" filename="impetus.wav"/>
+ <prompt phrase="inception" filename="inception.wav"/>
+ <prompt phrase="indigo" filename="indigo.wav"/>
+ <prompt phrase="indoors" filename="indoors.wav"/>
+ <prompt phrase="indulge" filename="indulge.wav"/>
+ <prompt phrase="inertia" filename="inertia.wav"/>
+ <prompt phrase="infancy" filename="infancy.wav"/>
+ <prompt phrase="inferno" filename="inferno.wav"/>
+ <prompt phrase="informant" filename="informant.wav"/>
+ <prompt phrase="insincere" filename="insincere.wav"/>
+ <prompt phrase="insurgent" filename="insurgent.wav"/>
+ <prompt phrase="integrate" filename="integrate.wav"/>
+ <prompt phrase="intention" filename="intention.wav"/>
+ <prompt phrase="inventive" filename="inventive.wav"/>
+ <prompt phrase="inverse" filename="inverse.wav"/>
+ <prompt phrase="involve" filename="involve.wav"/>
+ <prompt phrase="island" filename="island.wav"/>
+ <prompt phrase="jawbone" filename="jawbone.wav"/>
+ <prompt phrase="keyboard" filename="keyboard.wav"/>
+ <prompt phrase="kickoff" filename="kickoff.wav"/>
+ <prompt phrase="kiwi" filename="kiwi.wav"/>
+ <prompt phrase="klaxon" filename="klaxon.wav"/>
+ <prompt phrase="leprosy" filename="leprosy.wav"/>
+ <prompt phrase="letterhead" filename="letterhead.wav"/>
+ <prompt phrase="liberty" filename="liberty.wav"/>
+ <prompt phrase="locale" filename="locale.wav"/>
+ <prompt phrase="lockup" filename="lockup.wav"/>
+ <prompt phrase="maritime" filename="maritime.wav"/>
+ <prompt phrase="matchmaker" filename="matchmaker.wav"/>
+ <prompt phrase="maverick" filename="maverick.wav"/>
+ <prompt phrase="megaton" filename="megaton.wav"/>
+ <prompt phrase="merit" filename="merit.wav"/>
+ <prompt phrase="microscope" filename="microscope.wav"/>
+ <prompt phrase="microwave" filename="microwave.wav"/>
+ <prompt phrase="midsummer" filename="midsummer.wav"/>
+ <prompt phrase="millionaire" filename="millionaire.wav"/>
+ <prompt phrase="minnow" filename="minnow.wav"/>
+ <prompt phrase="miracle" filename="miracle.wav"/>
+ <prompt phrase="miser" filename="miser.wav"/>
+ <prompt phrase="misnomer" filename="misnomer.wav"/>
+ <prompt phrase="molasses" filename="molasses.wav"/>
+ <prompt phrase="molecule" filename="molecule.wav"/>
+ <prompt phrase="monument" filename="monument.wav"/>
+ <prompt phrase="mosquito" filename="mosquito.wav"/>
+ <prompt phrase="mural" filename="mural.wav"/>
+ <prompt phrase="music" filename="music.wav"/>
+ <prompt phrase="narrative" filename="narrative.wav"/>
+ <prompt phrase="nebula" filename="nebula.wav"/>
+ <prompt phrase="necklace" filename="necklace.wav"/>
+ <prompt phrase="newborn" filename="newborn.wav"/>
+ <prompt phrase="newsletter" filename="newsletter.wav"/>
+ <prompt phrase="nightbird" filename="nightbird.wav"/>
+ <prompt phrase="obtuse" filename="obtuse.wav"/>
+ <prompt phrase="offload" filename="offload.wav"/>
+ <prompt phrase="onlooker" filename="onlooker.wav"/>
+ <prompt phrase="optic" filename="optic.wav"/>
+ <prompt phrase="opulent" filename="opulent.wav"/>
+ <prompt phrase="orca" filename="orca.wav"/>
+ <prompt phrase="outfielder" filename="outfielder.wav"/>
+ <prompt phrase="pandemic" filename="pandemic.wav"/>
+ <prompt phrase="paperweight" filename="paperweight.wav"/>
+ <prompt phrase="paragon" filename="paragon.wav"/>
+ <prompt phrase="paragraph" filename="paragraph.wav"/>
+ <prompt phrase="paramount" filename="paramount.wav"/>
+ <prompt phrase="passenger" filename="passenger.wav"/>
+ <prompt phrase="payday" filename="payday.wav"/>
+ <prompt phrase="peachy" filename="peachy.wav"/>
+ <prompt phrase="pedigree" filename="pedigree.wav"/>
+ <prompt phrase="penetrate" filename="penetrate.wav"/>
+ <prompt phrase="perceptive" filename="perceptive.wav"/>
+ <prompt phrase="performance" filename="performance.wav"/>
+ <prompt phrase="pharmacy" filename="pharmacy.wav"/>
+ <prompt phrase="pheasant" filename="pheasant.wav"/>
+ <prompt phrase="phonetic" filename="phonetic.wav"/>
+ <prompt phrase="photograph" filename="photograph.wav"/>
+ <prompt phrase="physique" filename="physique.wav"/>
+ <prompt phrase="pioneer" filename="pioneer.wav"/>
+ <prompt phrase="playhouse" filename="playhouse.wav"/>
+ <prompt phrase="pocketful" filename="pocketful.wav"/>
+ <prompt phrase="politeness" filename="politeness.wav"/>
+ <prompt phrase="positive" filename="positive.wav"/>
+ <prompt phrase="potato" filename="potato.wav"/>
+ <prompt phrase="preclude" filename="preclude.wav"/>
+ <prompt phrase="prefer" filename="prefer.wav"/>
+ <prompt phrase="preshrunk" filename="preshrunk.wav"/>
+ <prompt phrase="printer" filename="printer.wav"/>
+ <prompt phrase="processor" filename="processor.wav"/>
+ <prompt phrase="provincial" filename="provincial.wav"/>
+ <prompt phrase="prowler" filename="prowler.wav"/>
+ <prompt phrase="proximate" filename="proximate.wav"/>
+ <prompt phrase="puberty" filename="puberty.wav"/>
+ <prompt phrase="publisher" filename="publisher.wav"/>
+ <prompt phrase="pupil" filename="pupil.wav"/>
+ <prompt phrase="puppy" filename="puppy.wav"/>
+ <prompt phrase="pyramid" filename="pyramid.wav"/>
+ <prompt phrase="python" filename="python.wav"/>
+ <prompt phrase="quadrant" filename="quadrant.wav"/>
+ <prompt phrase="quantity" filename="quantity.wav"/>
+ <prompt phrase="quiver" filename="quiver.wav"/>
+ <prompt phrase="quota" filename="quota.wav"/>
+ <prompt phrase="racketeer" filename="racketeer.wav"/>
+ <prompt phrase="ragtime" filename="ragtime.wav"/>
+ <prompt phrase="ratchet" filename="ratchet.wav"/>
+ <prompt phrase="rebellion" filename="rebellion.wav"/>
+ <prompt phrase="rebirth" filename="rebirth.wav"/>
+ <prompt phrase="recipe" filename="recipe.wav"/>
+ <prompt phrase="recover" filename="recover.wav"/>
+ <prompt phrase="reform" filename="reform.wav"/>
+ <prompt phrase="regain" filename="regain.wav"/>
+ <prompt phrase="reindeer" filename="reindeer.wav"/>
+ <prompt phrase="rematch" filename="rematch.wav"/>
+ <prompt phrase="repay" filename="repay.wav"/>
+ <prompt phrase="repellent" filename="repellent.wav"/>
+ <prompt phrase="replica" filename="replica.wav"/>
+ <prompt phrase="reproduce" filename="reproduce.wav"/>
+ <prompt phrase="resistor" filename="resistor.wav"/>
+ <prompt phrase="responsive" filename="responsive.wav"/>
+ <prompt phrase="retouch" filename="retouch.wav"/>
+ <prompt phrase="retraction" filename="retraction.wav"/>
+ <prompt phrase="retrieval" filename="retrieval.wav"/>
+ <prompt phrase="retrospect" filename="retrospect.wav"/>
+ <prompt phrase="revenge" filename="revenge.wav"/>
+ <prompt phrase="revenue" filename="revenue.wav"/>
+ <prompt phrase="revival" filename="revival.wav"/>
+ <prompt phrase="revolver" filename="revolver.wav"/>
+ <prompt phrase="reward" filename="reward.wav"/>
+ <prompt phrase="rhythm" filename="rhythm.wav"/>
+ <prompt phrase="ribcage" filename="ribcage.wav"/>
+ <prompt phrase="ringbolt" filename="ringbolt.wav"/>
+ <prompt phrase="robust" filename="robust.wav"/>
+ <prompt phrase="rocker" filename="rocker.wav"/>
+ <prompt phrase="ruffled" filename="ruffled.wav"/>
+ <prompt phrase="sailboat" filename="sailboat.wav"/>
+ <prompt phrase="sandalwood" filename="sandalwood.wav"/>
+ <prompt phrase="sardonic" filename="sardonic.wav"/>
+ <prompt phrase="savagery" filename="savagery.wav"/>
+ <prompt phrase="sawdust" filename="sawdust.wav"/>
+ <prompt phrase="scallion" filename="scallion.wav"/>
+ <prompt phrase="scavenger" filename="scavenger.wav"/>
+ <prompt phrase="scenic" filename="scenic.wav"/>
+ <prompt phrase="scorecard" filename="scorecard.wav"/>
+ <prompt phrase="seabird" filename="seabird.wav"/>
+ <prompt phrase="select" filename="select.wav"/>
+ <prompt phrase="sensation" filename="sensation.wav"/>
+ <prompt phrase="sentence" filename="sentence.wav"/>
+ <prompt phrase="shadow" filename="shadow.wav"/>
+ <prompt phrase="shamrock" filename="shamrock.wav"/>
+ <prompt phrase="showgirl" filename="showgirl.wav"/>
+ <prompt phrase="skullcap" filename="skullcap.wav"/>
+ <prompt phrase="skydive" filename="skydive.wav"/>
+ <prompt phrase="slingshot" filename="slingshot.wav"/>
+ <prompt phrase="slowdown" filename="slowdown.wav"/>
+ <prompt phrase="snapline" filename="snapline.wav"/>
+ <prompt phrase="snapshot" filename="snapshot.wav"/>
+ <prompt phrase="snowcap" filename="snowcap.wav"/>
+ <prompt phrase="snowslide" filename="snowslide.wav"/>
+ <prompt phrase="sociable" filename="sociable.wav"/>
+ <prompt phrase="solo" filename="solo.wav"/>
+ <prompt phrase="southward" filename="southward.wav"/>
+ <prompt phrase="souvenir" filename="souvenir.wav"/>
+ <prompt phrase="soybean" filename="soybean.wav"/>
+ <prompt phrase="spaniel" filename="spaniel.wav"/>
+ <prompt phrase="spearhead" filename="spearhead.wav"/>
+ <prompt phrase="specialist" filename="specialist.wav"/>
+ <prompt phrase="speculate" filename="speculate.wav"/>
+ <prompt phrase="spellbind" filename="spellbind.wav"/>
+ <prompt phrase="spheroid" filename="spheroid.wav"/>
+ <prompt phrase="spigot" filename="spigot.wav"/>
+ <prompt phrase="spindle" filename="spindle.wav"/>
+ <prompt phrase="spyglass" filename="spyglass.wav"/>
+ <prompt phrase="stagehand" filename="stagehand.wav"/>
+ <prompt phrase="stagnate" filename="stagnate.wav"/>
+ <prompt phrase="stairway" filename="stairway.wav"/>
+ <prompt phrase="standard" filename="standard.wav"/>
+ <prompt phrase="stapler" filename="stapler.wav"/>
+ <prompt phrase="steamship" filename="steamship.wav"/>
+ <prompt phrase="sterling" filename="sterling.wav"/>
+ <prompt phrase="stethoscope" filename="stethoscope.wav"/>
+ <prompt phrase="stockman" filename="stockman.wav"/>
+ <prompt phrase="stopwatch" filename="stopwatch.wav"/>
+ <prompt phrase="stormy" filename="stormy.wav"/>
+ <prompt phrase="stupendous" filename="stupendous.wav"/>
+ <prompt phrase="sugar" filename="sugar.wav"/>
+ <prompt phrase="supportive" filename="supportive.wav"/>
+ <prompt phrase="surmount" filename="surmount.wav"/>
+ <prompt phrase="surrender" filename="surrender.wav"/>
+ <prompt phrase="suspense" filename="suspense.wav"/>
+ <prompt phrase="suspicious" filename="suspicious.wav"/>
+ <prompt phrase="sweatband" filename="sweatband.wav"/>
+ <prompt phrase="swelter" filename="swelter.wav"/>
+ <prompt phrase="sympathy" filename="sympathy.wav"/>
+ <prompt phrase="tactics" filename="tactics.wav"/>
+ <prompt phrase="talon" filename="talon.wav"/>
+ <prompt phrase="tambourine" filename="tambourine.wav"/>
+ <prompt phrase="tapeworm" filename="tapeworm.wav"/>
+ <prompt phrase="telephone" filename="telephone.wav"/>
+ <prompt phrase="tempest" filename="tempest.wav"/>
+ <prompt phrase="therapist" filename="therapist.wav"/>
+ <prompt phrase="tiger" filename="tiger.wav"/>
+ <prompt phrase="tissue" filename="tissue.wav"/>
+ <prompt phrase="tobacco" filename="tobacco.wav"/>
+ <prompt phrase="tolerance" filename="tolerance.wav"/>
+ <prompt phrase="tomorrow" filename="tomorrow.wav"/>
+ <prompt phrase="tonic" filename="tonic.wav"/>
+ <prompt phrase="topmost" filename="topmost.wav"/>
+ <prompt phrase="torpedo" filename="torpedo.wav"/>
+ <prompt phrase="tracker" filename="tracker.wav"/>
+ <prompt phrase="tradition" filename="tradition.wav"/>
+ <prompt phrase="transit" filename="transit.wav"/>
+ <prompt phrase="trauma" filename="trauma.wav"/>
+ <prompt phrase="travesty" filename="travesty.wav"/>
+ <prompt phrase="treadmill" filename="treadmill.wav"/>
+ <prompt phrase="trombonist" filename="trombonist.wav"/>
+ <prompt phrase="trouble" filename="trouble.wav"/>
+ <prompt phrase="truncated" filename="truncated.wav"/>
+ <prompt phrase="tumor" filename="tumor.wav"/>
+ <prompt phrase="tunnel" filename="tunnel.wav"/>
+ <prompt phrase="tycoon" filename="tycoon.wav"/>
+ <prompt phrase="typewriter" filename="typewriter.wav"/>
+ <prompt phrase="ultimate" filename="ultimate.wav"/>
+ <prompt phrase="uncut" filename="uncut.wav"/>
+ <prompt phrase="undaunted" filename="undaunted.wav"/>
+ <prompt phrase="underfoot" filename="underfoot.wav"/>
+ <prompt phrase="unearth" filename="unearth.wav"/>
+ <prompt phrase="unicorn" filename="unicorn.wav"/>
+ <prompt phrase="unify" filename="unify.wav"/>
+ <prompt phrase="universe" filename="universe.wav"/>
+ <prompt phrase="unravel" filename="unravel.wav"/>
+ <prompt phrase="unwind" filename="unwind.wav"/>
+ <prompt phrase="upcoming" filename="upcoming.wav"/>
+ <prompt phrase="uproot" filename="uproot.wav"/>
+ <prompt phrase="upset" filename="upset.wav"/>
+ <prompt phrase="upshot" filename="upshot.wav"/>
+ <prompt phrase="vacancy" filename="vacancy.wav"/>
+ <prompt phrase="vagabond" filename="vagabond.wav"/>
+ <prompt phrase="vapor" filename="vapor.wav"/>
+ <prompt phrase="vertigo" filename="vertigo.wav"/>
+ <prompt phrase="village" filename="village.wav"/>
+ <prompt phrase="virus" filename="virus.wav"/>
+ <prompt phrase="visitor" filename="visitor.wav"/>
+ <prompt phrase="vocalist" filename="vocalist.wav"/>
+ <prompt phrase="voyager" filename="voyager.wav"/>
+ <prompt phrase="waffle" filename="waffle.wav"/>
+ <prompt phrase="wallet" filename="wallet.wav"/>
+ <prompt phrase="warranty" filename="warranty.wav"/>
+ <prompt phrase="watchword" filename="watchword.wav"/>
+ <prompt phrase="wayside" filename="wayside.wav"/>
+ <prompt phrase="whimsical" filename="whimsical.wav"/>
+ <prompt phrase="willow" filename="willow.wav"/>
+ <prompt phrase="woodlark" filename="woodlark.wav"/>
+ <prompt phrase="yesteryear" filename="yesteryear.wav"/>
+ <!-- Event prompts -->
+ <prompt phrase="Добро пожаловать в агента регистрации шифрования ZRTP" filename="zrtp-enroll_welcome.wav"/>
+ <!-- Welcome to the ZRTP security enrollment agent. -->
+ <prompt phrase="Вы должны выбрать строку аутентификации с партнером по разговору, Если она не совпадет, система сообщит вам разрывом линии." filename="zrtp-check_sas.wav"/>
+ <!-- You must check the authentication string with your partner. If it doesn't match, it indicates the presence of a wire tapper. -->
+ <prompt phrase="Только телефоны, прошедшие аутентификацию, могут быть сконфигурированы для доверия системе для обеспечения ZRTP шифрованных звонков, так что такой звонок не даст эффекта." filename="zrtp-enroll_not_sip_registered.wav"/>
+ <!-- Only phones that are authenticated can be configured to trust this system to relay ZRTP secured calls. Your phone is not authenticated with this system, so this call will have no effect. -->
+ <prompt phrase="Ваш телефон сообщит, что он уже доверяет системе для перенаправления ZRTP шифрованных звонков, так что больше делать ничего не нужно будет" filename="zrtp-enroll_already_enrolled.wav"/>
+ <!-- Your phone indicates that it already trusts this system to relay ZRTP secured calls, so you do not need to do anything more. -->
+ <prompt phrase="Только телефоны, с поддержкой протокола ZRTP могут использовать такую функцию. Ваш телефон не поддерживает ZRTP протокол и звонок не даст эффекта ZRTP защиты." filename="zrtp-enroll_notzrtp.wav"/>
+ <!-- Only phones equipped with the ZRTP protocol can use this extension. Your phone is not a ZRTP-enable phone, so this call will have no effect.-->
+ <prompt phrase="Система оборудована для проведения шифрованных ZRTP звонков. Вы должны решить, если вы хотите чтобы система была задействована для приема и возможно мониторинга ваших защищенных звонков. Вы можете повесить трубку после окончания разговора." filename="zrtp-enroll_confirmed.wav"/>
+ <!-- This system is equipped to handle ZRTP encrypted phone calls. You must decide if you want to allow this system to be in a position to intercept and possibly monitor your secure phone calls. You may hang up after you've done this. -->
+ <prompt phrase="Договоритесь с партнером по разговору о парольной фразе." filename="zrtp-is_secure.wav"/>
+ <!-- Verbally compare this authentication code with your partner. -->
+ <prompt phrase="Парольная фраза на данный момент не проверена" filename="zrtp-is_unverified.wav"/>
+ <!-- Authentication code is now unverified. -->
+ <prompt phrase="Парольная фраза проверена." filename="zrtp-is_verified.wav"/>
+ <!-- Authentication code is now verified. -->
+ <prompt phrase="Спасибо за звонок. До свидания." filename="zrtp-thankyou_goodbye.wav"/>
+ <!-- Thank you for calling. Goodbye. -->
+ <prompt phrase="Что-то происходит не так." filename="zrtp-somethings_wrong.wav"/>
+ <!-- Something's wrong -->
+ <prompt phrase="Ошибка." filename="zrtp-status_error.wav"/>
+ <!-- Error. -->
+ <prompt phrase="Ваш разговор не шифруется" filename="zrtp-status_notsecure.wav"/>
+ <!-- Call is not secure. -->
+ <prompt phrase="Ваш разговор шифруется." filename="zrtp-status_secure.wav"/>
+ <!-- Call is secure. -->
+ <prompt phrase="Шифрованный вызов." filename="zrtp-status_securing.wav"/>
+ <!-- Securing call. -->
+ </zrtp>
+ </ru>
+</language>
+
Copied: freeswitch/branches/seven/docs/zrtp_agpl-3.0.txt (from rev 14471, freeswitch/trunk/docs/zrtp_agpl-3.0.txt) (0 => 14472)
--- freeswitch/branches/seven/docs/zrtp_agpl-3.0.txt (rev 0)
+++ freeswitch/branches/seven/docs/zrtp_agpl-3.0.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
Modified: freeswitch/branches/seven/freeswitch.spec (14471 => 14472)
--- freeswitch/branches/seven/freeswitch.spec 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/freeswitch.spec 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,17 +1,37 @@
%define _prefix /opt/freeswitch
%define prefix %{_prefix}
+%define sysconfdir /opt/freeswitch/conf
+%define _sysconfdir %{sysconfdir}
Name: freeswitch
Summary: FreeSWITCH open source telephony platform
License: MPL
Group: Productivity/Telephony/Servers
-Version: 1.0
+Version: 1.0.4
Release: 1
URL: http://www.freeswitch.org/
-Packager: Michal Bielicki
-Vendor: http://www.voiceworks.pl/
-Source0: %{name}-%{version}.tar.bz2
-Prefix: %{prefix}
+Packager: Michal Bielicki
+Vendor: http://www.freeswitch.org/
+Source0: http://files.freeswitch.org/%{name}-%{version}.tar.bz2
+Source1: http://files.freeswitch.org/downloads/libs/celt-0.6.1.tar.gz
+Source2: http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz
+Source3: http://files.freeswitch.org/downloads/libs/lame-3.97.tar.gz
+Source4: http://files.freeswitch.org/downloads/libs/libshout-2.2.2.tar.gz
+Source5: http://files.freeswitch.org/downloads/libs/mpg123.tar.gz
+Source6: http://files.freeswitch.org/downloads/libs/openldap-2.4.11.tar.gz
+Source7: http://files.freeswitch.org/downloads/libs/pocketsphinx-0.5.99-latest.tar.gz
+Source8: http://files.freeswitch.org/downloads/libs/soundtouch-1.3.1.tar.gz
+Source9: http://files.freeswitch.org/downloads/libs/sphinxbase-0.4.99-latest.tar.gz
+Source10: http://files.freeswitch.org/freeswitch-sounds-music-8000-1.0.8.tar.gz
+Source11: http://files.freeswitch.org/freeswitch-sounds-music-16000-1.0.8.tar.gz
+Source12: http://files.freeswitch.org/freeswitch-sounds-music-32000-1.0.8.tar.gz
+Source13: http://files.freeswitch.org/freeswitch-sounds-music-48000-1.0.8.tar.gz
+Source14: http://files.freeswitch.org/freeswitch-sounds-en-us-callie-8000-1.0.11.tar.gz
+Source15: http://files.freeswitch.org/freeswitch-sounds-en-us-callie-16000-1.0.11.tar.gz
+Source16: http://files.freeswitch.org/freeswitch-sounds-en-us-callie-32000-1.0.11.tar.gz
+Source17: http://files.freeswitch.org/freeswitch-sounds-en-us-callie-48000-1.0.11.tar.gz
+Source18: http://files.freeswitch.org/downloads/libs/communicator_semi_6000_20080321.tar.gz
+Prefix: %{prefix}
#AutoReqProv: no
@@ -26,7 +46,7 @@
BuildRequires: curl-devel
BuildRequires: gcc-c++
BuildRequires: gnutls-devel
-BuildRequires: libtool >= 1.5.14
+BuildRequires: libtool >= 1.5.17
BuildRequires: ncurses-devel
BuildRequires: openssl-devel
BuildRequires: perl
@@ -35,6 +55,14 @@
BuildRequires: unixODBC-devel
BuildRequires: gdbm-devel
BuildRequires: db4-devel
+BuildRequires: python-devel
+BuildRequires: libogg-devel
+BuildRequires: libvorbis-devel
+BuildRequires: libtiff-devel
+#BuildRequires: mono-devel
+BuildRequires: alsa-lib-devel
+BuildRequires: which
+BuildRequires: zlib-devel
%if %{?suse_version:1}0
%if 0%{?suse_version} > 910
@@ -42,11 +70,6 @@
%endif
%endif
-# Fedora doesn't seem to have 'which' as part of the base system
-%if %{?fedora_version:1}0
-BuildRequires: which
-%endif
-
%if 0%{?suse_version} > 800
#PreReq: /usr/sbin/useradd /usr/sbin/groupadd
PreReq: %insserv_prereq %fillup_prereq
@@ -81,6 +104,16 @@
%description devel
FreeSWITCH development files
+%package codec-passthru-amrwb
+Summary: Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Conflicts: codec-amrwb
+
+%description codec-passthru-amrwb
+Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+
+
%package codec-passthru-amr
Summary: Pass-through AMR Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
@@ -129,17 +162,146 @@
%description perl
+%package python
+Summary: Python support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description python
+
+
%package lang-en
-Summary: Provides english language dependand modules and sounds for the FreeSwitch Open Source telephone platform.
+Summary: Provides english language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
%description lang-en
English language phrases module and directory structure for say module and voicemail
+%package lang-ru
+Summary: Provides russian language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/LibrariesRequires: %{name} = %{version}-%{release}
+
+%description lang-ru
+Russian language phrases module and directory structure for say module and voicemail
+
+%package lang-fr
+Summary: Provides french language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/LibrariesRequires: %{name} = %{version}-%{release}
+
+%description lang-fr
+French language phrases module and directory structure for say module and voicemail
+
+%package lang-de
+Summary: Provides german language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/LibrariesRequires: %{name} = %{version}-%{release}
+
+%description lang-de
+German language phrases module and directory structure for say module and voicemail
+
+
+%package openzap
+Summary: Provides a unified interface to hardware TDM cards and ss7 stacks for FreeSWITCH
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description openzap
+OpenZAP
+
+%package moh
+Summary: FreeSWITCH Music on hold files
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description moh
+8khz music on hold files for FreeSWITCH
+
+
+%package hd-moh
+Summary: High Definition FreeSWITCH Music on hold files
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description hd-moh
+16khz High Definition FreeSWITCH Music on hold files
+
+
+%package uhd-moh
+Summary: Ultra High Definition FreeSWITCH Music on hold files
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description uhd-moh
+32khz Ultra High Definition FreeSWITCH Music on hold files
+
+
+%package cd-moh
+Summary: CD Quality FreeSWITCH Musci on hold files
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description cd-moh
+48khz CD Quality FreeSWITCH Music on hold files
+
+
+%package sounds-en-callie
+Summary: English prompts for FreeSWITCH
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description sounds-en-callie
+8khz English prompts for FreeSWITCH
+
+
+%package hd-sounds-en-callie
+Summary: High Density English prompts for FreeSWITCH
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description hd-sounds-en-callie
+16khz High Density English prompts for FreeSWITCH
+
+
+%package uhd-sounds-en-callie
+Summary: Ultra High Density English prompts for FreeSWITCH
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description uhd-sounds-en-callie
+32khz Ultra High Density English prompts for FreeSWITCH
+
+
+%package cd-sounds-en-callie
+Summary: CD Quality English prompts for FreeSWITCH
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description cd-sounds-en-callie
+48khz CD Quality English prompts for FreeSWITCH
+
+
%prep
-%setup -q
+%setup -b0 -q
+cp %{SOURCE1} libs/
+cp %{SOURCE2} libs/
+cp %{SOURCE3} libs/
+cp %{SOURCE4} libs/
+cp %{SOURCE5} libs/
+cp %{SOURCE6} libs/
+cp %{SOURCE7} libs/
+cp %{SOURCE8} libs/
+cp %{SOURCE9} libs/
+cp %{SOURCE10} .
+cp %{SOURCE11} .
+cp %{SOURCE12} .
+cp %{SOURCE13} .
+cp %{SOURCE14} .
+cp %{SOURCE15} .
+cp %{SOURCE16} .
+cp %{SOURCE17} .
+cp %{SOURCE18} libs/
+
%build
%ifos linux
%if 0%{?suse_version} > 1000 && 0%{?suse_version} < 1030
@@ -150,24 +312,23 @@
%endif
%endif
-PASSTHRU_CODEC_MODULES="codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr"
+PASSTHRU_CODEC_MODULES="codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr codecs/mod_amrwb"
SPIDERMONKEY_MODULES="languages/mod_spidermonkey languages/mod_spidermonkey_curl languages/mod_spidermonkey_core_db languages/mod_spidermonkey_odbc languages/mod_spidermonkey_socket languages/mod_spidermonkey_teletone"
-APPLICATIONS_MODULES="applications/mod_commands applications/mod_conference applications/mod_dptools applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_limit applications/mod_rss applications/mod_voicemail applications/mod_fsv"
-ASR_TTS_MODULES="asr_tts/mod_pocketsphinx asr_tts/mod_flite"
-CODECS_MODULES="codecs/mod_ilbc codecs/mod_h26x codecs/mod_voipcodecs codecs/mod_speex"
+APPLICATIONS_MODULES="applications/mod_commands applications/mod_conference applications/mod_dptools applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_limit applications/mod_rss applications/mod_voicemail applications/mod_fsv applications/mod_lcr applications/mod_easyroute applications/mod_stress applications/mod_vmd applications/mod_limit applications/mod_soundtouch applications/mod_fax"
+CODECS_MODULES="codecs/mod_ilbc codecs/mod_h26x codecs/mod_voipcodecs codecs/mod_speex codecs/mod_celt codecs/mod_siren"
DIALPLANS_MODULES="dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml"
-DIRECTORIES_MODULES=
-DOTNET_MODULES=
-ENDPOINTS_MODULES="endpoints/mod_dingaling endpoints/mod_iax endpoints/mod_portaudio endpoints/mod_sofia endpoints/mod_woomera ../../libs/openzap/mod_openzap"
+DIRECTORIES_MODULES=""
+ENDPOINTS_MODULES="endpoints/mod_dingaling endpoints/mod_iax endpoints/mod_portaudio endpoints/mod_sofia ../../libs/openzap/mod_openzap endpoints/mod_loopback"
+ASR_TTS_MODULES="asr_tts/mod_pocketsphinx asr_tts/mod_flite asr_tts/mod_unimrcp"
EVENT_HANDLERS_MODULES="event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv"
-FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream"
-LANGUAGES_MODULES="languages/mod_perl languages/mod_lua"
+FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout"
+LANGUAGES_MODULES="languages/mod_perl languages/mod_lua languages/mod_python languages/mod_yaml"
LOGGERS_MODULES="loggers/mod_console loggers/mod_logfile loggers/mod_syslog"
-SAY_MODULES="say/mod_say_en"
+SAY_MODULES="say/mod_say_en say/mod_say_de say/mod_say_fr"
TIMERS_MODULES=
-DISABLED_MODULES="applications/mod_soundtouch directories/mod_ldap languages/mod_java languages/mod_python languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf formats/mod_shout say/mod_say_it say/mod_say_es say/mod_say_nl"
-XML_INT_MODULES="xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr"
-MYMODULES="$PASSTHRU_CODEC_MODULES $SPIDERMONKEY_MODULES $APPLICATIONS_MODULES $ASR_TTS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES $DOTNET_MODULES $ENDPOINTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES $SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES"
+DISABLED_MODULES="applications/mod_soundtouch languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf languages/mod_managed languages/mod_java say/mod_say_it say/mod_say_es say/mod_say_nl"
+XML_INT_MODULES="xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr "
+MYMODULES="$PASSTHRU_CODEC_MODULES $SPIDERMONKEY_MODULES $APPLICATIONS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES $ENDPOINTS_MODULES $ASR_TTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES $SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES"
export MODULES=$MYMODULES
test ! -f modules.conf || rm -f modules.conf
@@ -186,11 +347,10 @@
%configure -C \
--prefix=%{prefix} \
- --bindir=%{prefix}/bin \
- --libdir=%{prefix}/lib \
- --sysconfdir=%{_sysconfdir} \
--infodir=%{_infodir} \
--mandir=%{_mandir} \
+ --sysconfdir=%{sysconfdir} \
+ --libdir=%{prefix}/lib \
--enable-core-libedit-support \
--enable-core-odbc-support \
%ifos linux
@@ -210,27 +370,28 @@
%install
# delete unsupported langugages for now
-rm -rf conf/lang/de
-rm -rf conf/lang/fr
-rm -rf $RPM_BUILD_ROOT%{prefix}/conf/lang/de
-rm -rf $RPM_BUILD_ROOT%{prefix}/conf/lang/fr
+#rm -rf conf/lang/de
+#rm -rf conf/lang/fr
+#rm -rf $RPM_BUILD_ROOT%{prefix}/conf/lang/de
+#rm -rf $RPM_BUILD_ROOT%{prefix}/conf/lang/fr
%{__make} DESTDIR=$RPM_BUILD_ROOT install
+# Install Sound Files
+%{__make} DESTDIR=$RPM_BUILD_ROOT cd-sounds-install
+%{__make} DESTDIR=$RPM_BUILD_ROOT cd-moh-install
+
# Create a log dir
%{__mkdir} -p $RPM_BUILD_ROOT%{prefix}/log
%ifos linux
-#Install the library path config so the system can find the modules
-%{__mkdir} -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
-%{__cp} build/freeswitch.ld.so.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d/
# Install init files
# On SuSE:
%if 0%{?suse_version} > 100
%{__install} -D -m 744 build/freeswitch.init.suse $RPM_BUILD_ROOT/etc/init.d/freeswitch
%else
# On RedHat like
-%{__install} -D -m 744 build/freeswitch.init.redhat $RPM_BUILD_ROOT/etc/init.d/freeswitch
+%{__install} -D -m 0755 build/freeswitch.init.redhat $RPM_BUILD_ROOT/etc/init.d/freeswitch
%endif
# On SuSE make /usr/sbin/rcfreeswitch a link to /etc/init.d/freeswitch
%if 0%{?suse_version} > 100
@@ -268,7 +429,7 @@
%files
%defattr(-,freeswitch,daemon)
%ifos linux
-%dir %attr(0750, freeswitch, daemon) /etc/monit.d
+%dir %attr(0750, root, root) /etc/monit.d
%endif
%dir %attr(0750, freeswitch, daemon) %{prefix}/db
%dir %attr(0750, freeswitch, daemon) %{prefix}/log
@@ -299,9 +460,10 @@
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.tpl
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.ttml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/cmudict.0.6d
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/m3ua.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/extensions.conf
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/acl.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cidlookup.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/alsa.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/conference.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/console.conf.xml
@@ -313,7 +475,6 @@
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cdr_csv.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fax.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fifo.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/openzap.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/shout.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/timezones.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/iax.conf.xml
@@ -332,36 +493,41 @@
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/switch.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/syslog.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/voicemail.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/woomera.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_cdr.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_curl.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_rpc.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/zeroconf.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/easyroute.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/lcr.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/opal.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/unicall.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/memcache.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/nibblebill.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/unimrcp.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/default/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/public/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/default/*
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/mrcp_profiles/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/internal/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/external/*.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/jingle_profiles/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/Makefile
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/mrcp_profiles/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/default.dic
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/model/communicator/*
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/model/wsj1/*
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/htdocs/*
%ifos linux
-/etc/ld.so.conf.d/*
+#/etc/ld.so.conf.d/*
/etc/init.d/freeswitch
/etc/sysconfig/freeswitch
%if 0%{?suse_version} > 100
/usr/sbin/rcfreeswitch
%endif
%endif
-%{prefix}/bin/*
+%attr(0755, freeswitch, daemon) %{prefix}/bin/*
%{prefix}/lib/libfreeswitch*.so*
-%{prefix}/lib/libopenzap.so*
%{prefix}/mod/mod_console.so*
%{prefix}/mod/mod_logfile.so*
%{prefix}/mod/mod_syslog.so*
@@ -388,8 +554,6 @@
%{prefix}/mod/mod_iax.so*
%{prefix}/mod/mod_portaudio.so*
%{prefix}/mod/mod_sofia.so*
-%{prefix}/mod/mod_woomera.so*
-%{prefix}/mod/mod_openzap.so*
%{prefix}/mod/mod_cdr_csv.so*
%{prefix}/mod/mod_event_multicast.so*
%{prefix}/mod/mod_event_socket.so*
@@ -401,13 +565,40 @@
%{prefix}/mod/mod_xml_cdr.so*
%{prefix}/mod/mod_fsv.so
%{prefix}/mod/mod_tone_stream.so
-%{prefix}/mod/ozmod_analog.so
-%{prefix}/mod/ozmod_analog_em.so
-%{prefix}/mod/ozmod_isdn.so
-%{prefix}/mod/ozmod_ss7_boost.so
-%{prefix}/mod/ozmod_zt.so
-%{prefix}/mod/ozmod_wanpipe.so
+%{prefix}/mod/mod_amrwb.so
+%{prefix}/mod/mod_celt.so
+%{prefix}/mod/mod_easyroute.so
+%{prefix}/mod/mod_lcr.so
+%{prefix}/mod/mod_loopback.so
+%{prefix}/mod/mod_siren.so
+%{prefix}/mod/mod_stress.so
+%{prefix}/mod/mod_yaml.so
+%{prefix}/mod/mod_shout.so
+%{prefix}/mod/mod_fax.so
+%{prefix}/mod/mod_soundtouch.so
+%{prefix}/mod/mod_vmd.so
+%{prefix}/mod/mod_unimrcp.so
+%files openzap
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/tones.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/openzap.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/pika.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/openzap.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/wanpipe.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/zt.conf
+%{prefix}/lib/libopenzap.so*
+%{prefix}/mod/mod_openzap.so*
+%{prefix}/mod/ozmod_analog.so*
+%{prefix}/mod/ozmod_analog_em.so*
+%{prefix}/mod/ozmod_isdn.so*
+%{prefix}/mod/ozmod_skel.*
+%{prefix}/mod/ozmod_ss7_boost.so*
+%{prefix}/mod/ozmod_zt.so*
+
+%files codec-passthru-amrwb
+%defattr(-,freeswitch,daemon)
+%{prefix}/mod/mod_amrwb.so*
+
%files codec-passthru-amr
%defattr(-,freeswitch,daemon)
%{prefix}/mod/mod_amr.so*
@@ -443,13 +634,22 @@
%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/perl.conf.xml
+%files python
+%defattr(-,freeswitch,daemon)
+%{prefix}/mod/mod_python*.so*
+%attr(0644, root, bin) /usr/lib/python2.4/site-packages/freeswitch.py*
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/python.conf.xml
+
%files devel
%defattr(-, freeswitch, daemon)
%{prefix}/lib/*.a
%{prefix}/lib/*.la
+%{prefix}/lib/pkgconfig/*
%{prefix}/mod/*.a
%{prefix}/mod/*.la
%{prefix}/include/*.h
+%{prefix}/include/spandsp/*
%files lang-en
%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en
@@ -460,7 +660,178 @@
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/vm/*.xml
%{prefix}/mod/mod_say_en.so*
+%files lang-de
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de/demo
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de/vm
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/vm/*.xml
+%{prefix}/mod/mod_say_de.so*
+
+%files lang-fr
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr/demo
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr/vm
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/vm/*.xml
+%{prefix}/mod/mod_say_fr.so*
+
+%files lang-ru
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru/demo
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru/vm
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/vm/*.xml
+
+%files moh
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/music/8000
+%{prefix}/sounds/music/8000/*
+
+%files hd-moh
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/music/16000
+%{prefix}/sounds/music/16000/*
+
+%files uhd-moh
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/music/32000
+%{prefix}/sounds/music/32000/*
+
+%files cd-moh
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/music/48000
+%{prefix}/sounds/music/48000/*
+
+%files sounds-en-callie
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ascii/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/base256/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/conference/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/currency/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/digits/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ivr/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/misc/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/phonetic-ascii/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/time/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/voicemail/8000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/zrtp/8000
+%{prefix}/sounds/en/us/callie/ascii/8000/*
+%{prefix}/sounds/en/us/callie/base256/8000/*
+%{prefix}/sounds/en/us/callie/conference/8000/*
+%{prefix}/sounds/en/us/callie/currency/8000/*
+%{prefix}/sounds/en/us/callie/digits/8000/*
+%{prefix}/sounds/en/us/callie/ivr/8000/*
+%{prefix}/sounds/en/us/callie/misc/8000/*
+%{prefix}/sounds/en/us/callie/phonetic-ascii/8000/*
+%{prefix}/sounds/en/us/callie/time/8000/*
+%{prefix}/sounds/en/us/callie/voicemail/8000/*
+%{prefix}/sounds/en/us/callie/zrtp/8000/*
+
+%files hd-sounds-en-callie
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ascii/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/base256/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/conference/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/currency/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/digits/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ivr/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/misc/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/phonetic-ascii/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/time/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/voicemail/16000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/zrtp/16000
+%{prefix}/sounds/en/us/callie/ascii/16000/*
+%{prefix}/sounds/en/us/callie/base256/16000/*
+%{prefix}/sounds/en/us/callie/conference/16000/*
+%{prefix}/sounds/en/us/callie/currency/16000/*
+%{prefix}/sounds/en/us/callie/digits/16000/*
+%{prefix}/sounds/en/us/callie/ivr/16000/*
+%{prefix}/sounds/en/us/callie/misc/16000/*
+%{prefix}/sounds/en/us/callie/phonetic-ascii/16000/*
+%{prefix}/sounds/en/us/callie/time/16000/*
+%{prefix}/sounds/en/us/callie/voicemail/16000/*
+%{prefix}/sounds/en/us/callie/zrtp/16000/*
+
+
+%files uhd-sounds-en-callie
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ascii/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/base256/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/conference/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/currency/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/digits/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ivr/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/misc/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/phonetic-ascii/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/time/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/voicemail/32000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/zrtp/32000
+%{prefix}/sounds/en/us/callie/ascii/32000/*
+%{prefix}/sounds/en/us/callie/base256/32000/*
+%{prefix}/sounds/en/us/callie/conference/32000/*
+%{prefix}/sounds/en/us/callie/currency/32000/*
+%{prefix}/sounds/en/us/callie/digits/32000/*
+%{prefix}/sounds/en/us/callie/ivr/32000/*
+%{prefix}/sounds/en/us/callie/misc/32000/*
+%{prefix}/sounds/en/us/callie/phonetic-ascii/32000/*
+%{prefix}/sounds/en/us/callie/time/32000/*
+%{prefix}/sounds/en/us/callie/voicemail/32000/*
+%{prefix}/sounds/en/us/callie/zrtp/32000/*
+
+
+%files cd-sounds-en-callie
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ascii/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/base256/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/conference/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/currency/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/digits/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/ivr/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/misc/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/phonetic-ascii/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/time/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/voicemail/48000
+%dir %attr(0750, freeswitch, daemon) %{prefix}/sounds/en/us/callie/zrtp/48000
+%{prefix}/sounds/en/us/callie/ascii/48000/*
+%{prefix}/sounds/en/us/callie/base256/48000/*
+%{prefix}/sounds/en/us/callie/conference/48000/*
+%{prefix}/sounds/en/us/callie/currency/48000/*
+%{prefix}/sounds/en/us/callie/digits/48000/*
+%{prefix}/sounds/en/us/callie/ivr/48000/*
+%{prefix}/sounds/en/us/callie/misc/48000/*
+%{prefix}/sounds/en/us/callie/phonetic-ascii/48000/*
+%{prefix}/sounds/en/us/callie/time/48000/*
+%{prefix}/sounds/en/us/callie/voicemail/48000/*
+%{prefix}/sounds/en/us/callie/zrtp/48000/*
+
+
%changelog
+* Tue Jul 24 2009 - mike@jerris.com
+- removed mod_http
+- removed ozmod_wanpipe
+* Tue Jun 23 2009 - raulfragoso@gmail.com
+- Adjusted for the latest SVN trunk (13912)
+- Included new config and mod files to catch up with latest SVN
+- Included new sound files for base256 and zrtp
+- mod_unimrcp must be built after mod_sofia
+* Mon Feb 17 2009 - michal.bielicki@halokwadrat.de
+- added mod_python
+- added mod_fax
+- added mod_amrwb.so
+- added mod_celt.so
+- added mod_easyroute.so
+- added mod_http.so
+- added mod_lcr.so
+- added mod_loopback.so
+- added mod_siren.so
+- added mod/mod_stress.so
+- added mod_yaml.so
+- added mod_shout.so
+- added rpms or all sounds
+- openzap is now its own rpm
+- added french
+- added german
+- added missing dependencies
+- added soundfiles with separate rpms
+- added definition of all sourcefiles and added them to the SRPM
+- fixes to monit file
+- changes to redhat init file
* Thu May 22 2008 - michal.bielicki@voiceworks.pl
- disabled beta class language stuff
- bumped revision up to rc6
Modified: freeswitch/branches/seven/freeswitch.xcodeproj/project.pbxproj (14471 => 14472)
--- freeswitch/branches/seven/freeswitch.xcodeproj/project.pbxproj 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/freeswitch.xcodeproj/project.pbxproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -6,57 +6,2561 @@
objectVersion = 42;
objects = {
+/* Begin PBXAggregateTarget section */
+ 492050492050492050000000 /* ALL_BUILD */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 493290493290493290000000 /* Build configuration list for PBXAggregateTarget "ALL_BUILD" */;
+ buildPhases = (
+ 492230492230492230000000 /* CMake ReRun */,
+ 492920492920492920000000 /* CMake Rules */,
+ );
+ dependencies = (
+ 629320629320629320000000 /* PBXTargetDependency */,
+ 629A30629A30629A30000000 /* PBXTargetDependency */,
+ 62A1F062A1F062A1F0000000 /* PBXTargetDependency */,
+ 62A96062A96062A960000000 /* PBXTargetDependency */,
+ 62B0E062B0E062B0E0000000 /* PBXTargetDependency */,
+ 62B83062B83062B830000000 /* PBXTargetDependency */,
+ );
+ name = ALL_BUILD;
+ productName = ALL_BUILD;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 499420499420499420000000 /* switch.c in Sources */ = {isa = PBXBuildFile; fileRef = 499250499250499250000000 /* switch.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A38304A38304A3830000000 /* switch_apr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A36304A36304A3630000000 /* switch_apr.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A42704A42704A4270000000 /* switch_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A3DB04A3DB04A3DB0000000 /* switch_buffer.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A4D304A4D304A4D30000000 /* switch_caller.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A48704A48704A4870000000 /* switch_caller.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A58104A58104A5810000000 /* switch_channel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A53304A53304A5330000000 /* switch_channel.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A62D04A62D04A62D0000000 /* switch_console.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A5DF04A5DF04A5DF0000000 /* switch_console.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A6DE04A6DE04A6DE0000000 /* switch_core_media_bug.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A68D04A68D04A68D0000000 /* switch_core_media_bug.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A79004A79004A7900000000 /* switch_core_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A78304A78304A7830000000 /* switch_core_timer.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A83504A83504A8350000000 /* switch_core_asr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A7E704A7E704A7E70000000 /* switch_core_asr.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A8EA04A8EA04A8EA0000000 /* switch_core_event_hook.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A89304A89304A8930000000 /* switch_core_event_hook.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4A9A104A9A104A9A10000000 /* switch_core_speech.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A98604A98604A9860000000 /* switch_core_speech.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AA4504AA4504AA450000000 /* switch_core_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AA3804AA3804AA380000000 /* switch_core_memory.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AAF004AAF004AAF00000000 /* switch_core_codec.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AAE304AAE304AAE30000000 /* switch_core_codec.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AB9504AB9504AB950000000 /* switch_core_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AB4704AB4704AB470000000 /* switch_core_file.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AC4104AC4104AC410000000 /* switch_core_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 4ABF304ABF304ABF30000000 /* switch_core_hash.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4ACED04ACED04ACED0000000 /* switch_core_sqldb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AC9F04AC9F04AC9F0000000 /* switch_core_sqldb.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AD9904AD9904AD990000000 /* switch_core_session.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AD4B04AD4B04AD4B0000000 /* switch_core_session.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AE5404AE5404AE540000000 /* switch_core_directory.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AE3E04AE3E04AE3E0000000 /* switch_core_directory.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AF0304AF0304AF030000000 /* switch_core_state_machine.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AEF504AEF504AEF50000000 /* switch_core_state_machine.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4AFA904AFA904AFA90000000 /* switch_core_io.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AEFC04AEFC04AEFC0000000 /* switch_core_io.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B05104B05104B0510000000 /* switch_core_rwlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B00304B00304B0030000000 /* switch_core_rwlock.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B10404B10404B1040000000 /* switch_core_port_allocator.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F604B0F604B0F60000000 /* switch_core_port_allocator.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B1B204B1B204B1B20000000 /* switch_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B0FD04B0FD04B0FD0000000 /* switch_core.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B25404B25404B2540000000 /* switch_scheduler.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B20604B20604B2060000000 /* switch_scheduler.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B30004B30004B3000000000 /* switch_core_db.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B204B2B204B2B20000000 /* switch_core_db.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B3B204B3B204B3B20000000 /* switch_dso.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B35E04B35E04B35E0000000 /* switch_dso.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B45904B45904B4590000000 /* switch_loadable_module.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B40A04B40A04B40A0000000 /* switch_loadable_module.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B50904B50904B5090000000 /* switch_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B4FC04B4FC04B4FC0000000 /* switch_utils.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B5B204B5B204B5B20000000 /* switch_event.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B56404B56404B5640000000 /* switch_event.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B65E04B65E04B65E0000000 /* switch_resample.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B61004B61004B6100000000 /* switch_resample.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B70A04B70A04B70A0000000 /* switch_regex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B6BC04B6BC04B6BC0000000 /* switch_regex.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B7BC04B7BC04B7BC0000000 /* switch_rtp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B76804B76804B7680000000 /* switch_rtp.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B86204B86204B8620000000 /* switch_ivr_bridge.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B81404B81404B8140000000 /* switch_ivr_bridge.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B90C04B90C04B90C0000000 /* switch_ivr_originate.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B8C004B8C004B8C00000000 /* switch_ivr_originate.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4B9CE04B9CE04B9CE0000000 /* switch_ivr_async.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AEED04AEED04AEED0000000 /* switch_ivr_async.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BA7704BA7704BA770000000 /* switch_ivr_play_say.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA2904BA2904BA290000000 /* switch_ivr_play_say.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BB2904BB2904BB290000000 /* switch_ivr_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BB1C04BB1C04BB1C0000000 /* switch_ivr_menu.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BBD404BBD404BBD40000000 /* switch_ivr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BB8004BB8004BB800000000 /* switch_ivr.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BC8004BC8004BC800000000 /* switch_stun.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BC2C04BC2C04BC2C0000000 /* switch_stun.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BD2C04BD2C04BD2C0000000 /* switch_log.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BCD804BCD804BCD80000000 /* switch_log.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BDD804BDD804BDD80000000 /* switch_xml.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BD8404BD8404BD840000000 /* switch_xml.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BE7E04BE7E04BE7E0000000 /* switch_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BE3004BE3004BE300000000 /* switch_config.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BF3004BF3004BF300000000 /* switch_time.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BEDC04BEDC04BEDC0000000 /* switch_time.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4BFDC04BFDC04BFDC0000000 /* stfu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8804BF8804BF880000000 /* stfu.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4C08204C08204C0820000000 /* switch_cpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C03404C03404C0340000000 /* switch_cpp.cpp */; settings = {COMPILER_FLAGS = ""; }; };
+ 4C12A04C12A04C12A0000000 /* g711.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C0E004C0E004C0E00000000 /* g711.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4C1DA04C1DA04C1DA0000000 /* switch_pcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C1CB04C1CB04C1CB0000000 /* switch_pcm.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4C28004C28004C2800000000 /* libteletone_detect.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C23004C23004C2300000000 /* libteletone_detect.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4C33304C33304C3330000000 /* libteletone_generate.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C27704C27704C2770000000 /* libteletone_generate.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4E2E004E2E004E2E00000000 /* resample.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF2804CF2804CF280000000 /* resample.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4E38C04E38C04E38C0000000 /* filterkit.c in Sources */ = {isa = PBXBuildFile; fileRef = 4E37F04E37F04E37F0000000 /* filterkit.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4E43704E43704E4370000000 /* resamplesubs.c in Sources */ = {isa = PBXBuildFile; fileRef = 4E42704E42704E4270000000 /* resamplesubs.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4EF3004EF3004EF300000000 /* libteletone_detect.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C23004C23004C2300000000 /* libteletone_detect.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4EFF804EFF804EFF80000000 /* libteletone_generate.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C27704C27704C2770000000 /* libteletone_generate.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4FA6604FA6604FA660000000 /* pcre_compile.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FA4804FA4804FA480000000 /* pcre_compile.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4FB0F04FB0F04FB0F0000000 /* pcre_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FABD04FABD04FABD0000000 /* pcre_tables.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 4FBB504FBB504FBB50000000 /* pcre_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FB6904FB6904FB690000000 /* pcre_config.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 600670600670600670000000 /* pcre_try_flipped.c in Sources */ = {isa = PBXBuildFile; fileRef = 600100600100600100000000 /* pcre_try_flipped.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 601100601100601100000000 /* pcre_dfa_exec.c in Sources */ = {isa = PBXBuildFile; fileRef = 601010601010601010000000 /* pcre_dfa_exec.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 601C70601C70601C70000000 /* pcre_ucp_searchfuncs.c in Sources */ = {isa = PBXBuildFile; fileRef = 6016C06016C06016C0000000 /* pcre_ucp_searchfuncs.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 6026C06026C06026C0000000 /* pcre_exec.c in Sources */ = {isa = PBXBuildFile; fileRef = 602600602600602600000000 /* pcre_exec.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 603130603130603130000000 /* pcre_valid_utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 602C70602C70602C70000000 /* pcre_valid_utf8.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 603C90603C90603C90000000 /* pcre_fullinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 603740603740603740000000 /* pcre_fullinfo.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 6047C06047C06047C0000000 /* pcre_version.c in Sources */ = {isa = PBXBuildFile; fileRef = 604220604220604220000000 /* pcre_version.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 605220605220605220000000 /* dftables.c in Sources */ = {isa = PBXBuildFile; fileRef = 604690604690604690000000 /* dftables.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 605CB0605CB0605CB0000000 /* pcre_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 605790605790605790000000 /* pcre_get.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 606780606780606780000000 /* pcre_xclass.c in Sources */ = {isa = PBXBuildFile; fileRef = 606230606230606230000000 /* pcre_xclass.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 607240607240607240000000 /* pcre_globals.c in Sources */ = {isa = PBXBuildFile; fileRef = 606CF0606CF0606CF0000000 /* pcre_globals.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 607C60607C60607C60000000 /* pcre_info.c in Sources */ = {isa = PBXBuildFile; fileRef = 6077B06077B06077B0000000 /* pcre_info.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 609CD0609CD0609CD0000000 /* pcre_maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = 609810609810609810000000 /* pcre_maketables.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60B26060B26060B260000000 /* pcre_ord2utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 60ADA060ADA060ADA0000000 /* pcre_ord2utf8.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60B8B060B8B060B8B0000000 /* stfu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8804BF8804BF880000000 /* stfu.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60BDE060BDE060BDE0000000 /* pcredemo.c in Sources */ = {isa = PBXBuildFile; fileRef = 60BD2060BD2060BD20000000 /* pcredemo.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60C8C060C8C060C8C0000000 /* pcre_refcount.c in Sources */ = {isa = PBXBuildFile; fileRef = 60C3A060C3A060C3A0000000 /* pcre_refcount.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60D30060D30060D300000000 /* pcregrep.c in Sources */ = {isa = PBXBuildFile; fileRef = 60CE5060CE5060CE50000000 /* pcregrep.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60DDC060DDC060DDC0000000 /* pcreposix.c in Sources */ = {isa = PBXBuildFile; fileRef = 60D91060D91060D910000000 /* pcreposix.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 60FE1060FE1060FE10000000 /* pcre_scanner_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 60F96060F96060F960000000 /* pcre_scanner_unittest.cc */; settings = {COMPILER_FLAGS = ""; }; };
+ 610930610930610930000000 /* pcretest.c in Sources */ = {isa = PBXBuildFile; fileRef = 6108B06108B06108B0000000 /* pcretest.c */; settings = {COMPILER_FLAGS = ""; }; };
+ 614A00614A00614A00000000 /* pcre_chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = 613ED0613ED0613ED0000000 /* pcre_chartables.c */; settings = {COMPILER_FLAGS = ""; }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 628E90628E90628E90000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 49B9E049B9E049B9E0000000;
+ remoteInfo = freeswitch;
+ };
+ 6295B06295B06295B0000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4DA6F04DA6F04DA6F0000000;
+ remoteInfo = freeswitch_la;
+ };
+ 629CF0629CF0629CF0000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 616770616770616770000000;
+ remoteInfo = pcre;
+ };
+ 62A46062A46062A460000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4E68704E68704E6870000000;
+ remoteInfo = resample;
+ };
+ 62ABF062ABF062ABF0000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 621070621070621070000000;
+ remoteInfo = stfu;
+ };
+ 62B37062B37062B370000000 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4904E04904E04904E0000000 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4F22D04F22D04F22D0000000;
+ remoteInfo = teletone;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 499250499250499250000000 /* switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch.c"; sourceTree = "<absolute>"; };
+ 4999A04999A04999A0000000 /* switch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch.h"; sourceTree = "<absolute>"; };
+ 4A2F104A2F104A2F10000000 /* freeswitch */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; path = freeswitch; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4A36304A36304A3630000000 /* switch_apr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_apr.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_apr.c"; sourceTree = "<absolute>"; };
+ 4A3DB04A3DB04A3DB0000000 /* switch_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_buffer.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_buffer.c"; sourceTree = "<absolute>"; };
+ 4A48704A48704A4870000000 /* switch_caller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_caller.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_caller.c"; sourceTree = "<absolute>"; };
+ 4A53304A53304A5330000000 /* switch_channel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_channel.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_channel.c"; sourceTree = "<absolute>"; };
+ 4A5DF04A5DF04A5DF0000000 /* switch_console.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_console.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_console.c"; sourceTree = "<absolute>"; };
+ 4A68D04A68D04A68D0000000 /* switch_core_media_bug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_media_bug.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_media_bug.c"; sourceTree = "<absolute>"; };
+ 4A78304A78304A7830000000 /* switch_core_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_timer.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_timer.c"; sourceTree = "<absolute>"; };
+ 4A7E704A7E704A7E70000000 /* switch_core_asr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_asr.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_asr.c"; sourceTree = "<absolute>"; };
+ 4A89304A89304A8930000000 /* switch_core_event_hook.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_event_hook.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_event_hook.c"; sourceTree = "<absolute>"; };
+ 4A98604A98604A9860000000 /* switch_core_speech.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_speech.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_speech.c"; sourceTree = "<absolute>"; };
+ 4AA3804AA3804AA380000000 /* switch_core_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_memory.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_memory.c"; sourceTree = "<absolute>"; };
+ 4AAE304AAE304AAE30000000 /* switch_core_codec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_codec.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_codec.c"; sourceTree = "<absolute>"; };
+ 4AB4704AB4704AB470000000 /* switch_core_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_file.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_file.c"; sourceTree = "<absolute>"; };
+ 4ABF304ABF304ABF30000000 /* switch_core_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_hash.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_hash.c"; sourceTree = "<absolute>"; };
+ 4AC9F04AC9F04AC9F0000000 /* switch_core_sqldb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_sqldb.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_sqldb.c"; sourceTree = "<absolute>"; };
+ 4AD4B04AD4B04AD4B0000000 /* switch_core_session.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_session.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_session.c"; sourceTree = "<absolute>"; };
+ 4AE3E04AE3E04AE3E0000000 /* switch_core_directory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_directory.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_directory.c"; sourceTree = "<absolute>"; };
+ 4AEED04AEED04AEED0000000 /* switch_ivr_async.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr_async.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr_async.c"; sourceTree = "<absolute>"; };
+ 4AEF504AEF504AEF50000000 /* switch_core_state_machine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_state_machine.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_state_machine.c"; sourceTree = "<absolute>"; };
+ 4AEFC04AEFC04AEFC0000000 /* switch_core_io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_io.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_io.c"; sourceTree = "<absolute>"; };
+ 4B00304B00304B0030000000 /* switch_core_rwlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_rwlock.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_rwlock.c"; sourceTree = "<absolute>"; };
+ 4B0F604B0F604B0F60000000 /* switch_core_port_allocator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_port_allocator.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_port_allocator.c"; sourceTree = "<absolute>"; };
+ 4B0FD04B0FD04B0FD0000000 /* switch_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core.c"; sourceTree = "<absolute>"; };
+ 4B20604B20604B2060000000 /* switch_scheduler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_scheduler.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_scheduler.c"; sourceTree = "<absolute>"; };
+ 4B2B204B2B204B2B20000000 /* switch_core_db.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_core_db.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_core_db.c"; sourceTree = "<absolute>"; };
+ 4B35E04B35E04B35E0000000 /* switch_dso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_dso.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_dso.c"; sourceTree = "<absolute>"; };
+ 4B40A04B40A04B40A0000000 /* switch_loadable_module.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_loadable_module.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_loadable_module.c"; sourceTree = "<absolute>"; };
+ 4B4FC04B4FC04B4FC0000000 /* switch_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_utils.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_utils.c"; sourceTree = "<absolute>"; };
+ 4B56404B56404B5640000000 /* switch_event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_event.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_event.c"; sourceTree = "<absolute>"; };
+ 4B61004B61004B6100000000 /* switch_resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_resample.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_resample.c"; sourceTree = "<absolute>"; };
+ 4B6BC04B6BC04B6BC0000000 /* switch_regex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_regex.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_regex.c"; sourceTree = "<absolute>"; };
+ 4B76804B76804B7680000000 /* switch_rtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_rtp.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_rtp.c"; sourceTree = "<absolute>"; };
+ 4B81404B81404B8140000000 /* switch_ivr_bridge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr_bridge.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr_bridge.c"; sourceTree = "<absolute>"; };
+ 4B8C004B8C004B8C00000000 /* switch_ivr_originate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr_originate.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr_originate.c"; sourceTree = "<absolute>"; };
+ 4BA2904BA2904BA290000000 /* switch_ivr_play_say.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr_play_say.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr_play_say.c"; sourceTree = "<absolute>"; };
+ 4BB1C04BB1C04BB1C0000000 /* switch_ivr_menu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr_menu.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr_menu.c"; sourceTree = "<absolute>"; };
+ 4BB8004BB8004BB800000000 /* switch_ivr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_ivr.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_ivr.c"; sourceTree = "<absolute>"; };
+ 4BC2C04BC2C04BC2C0000000 /* switch_stun.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_stun.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_stun.c"; sourceTree = "<absolute>"; };
+ 4BCD804BCD804BCD80000000 /* switch_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_log.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_log.c"; sourceTree = "<absolute>"; };
+ 4BD8404BD8404BD840000000 /* switch_xml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_xml.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_xml.c"; sourceTree = "<absolute>"; };
+ 4BE3004BE3004BE300000000 /* switch_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_config.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_config.c"; sourceTree = "<absolute>"; };
+ 4BEDC04BEDC04BEDC0000000 /* switch_time.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_time.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_time.c"; sourceTree = "<absolute>"; };
+ 4BF8804BF8804BF880000000 /* stfu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stfu.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/stfu.c"; sourceTree = "<absolute>"; };
+ 4C03404C03404C0340000000 /* switch_cpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = switch_cpp.cpp; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_cpp.cpp"; sourceTree = "<absolute>"; };
+ 4C0E004C0E004C0E00000000 /* g711.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = g711.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/g711.c"; sourceTree = "<absolute>"; };
+ 4C1CB04C1CB04C1CB0000000 /* switch_pcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = switch_pcm.c; path = "/Users/shaneburrell/freeswitch-svn-real/src/switch_pcm.c"; sourceTree = "<absolute>"; };
+ 4C23004C23004C2300000000 /* libteletone_detect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = libteletone_detect.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src/libteletone_detect.c"; sourceTree = "<absolute>"; };
+ 4C27704C27704C2770000000 /* libteletone_generate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = libteletone_generate.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src/libteletone_generate.c"; sourceTree = "<absolute>"; };
+ 4C32C04C32C04C32C0000000 /* switch_am_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_am_config.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_am_config.h"; sourceTree = "<absolute>"; };
+ 4C4F504C4F504C4F50000000 /* switch_apr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_apr.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_apr.h"; sourceTree = "<absolute>"; };
+ 4C56004C56004C5600000000 /* switch_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_buffer.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_buffer.h"; sourceTree = "<absolute>"; };
+ 4C60D04C60D04C60D0000000 /* switch_caller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_caller.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_caller.h"; sourceTree = "<absolute>"; };
+ 4C6BB04C6BB04C6BB0000000 /* switch_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_channel.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_channel.h"; sourceTree = "<absolute>"; };
+ 4C7AD04C7AD04C7AD0000000 /* switch_console.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_console.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_console.h"; sourceTree = "<absolute>"; };
+ 4C85B04C85B04C85B0000000 /* switch_core_event_hook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_core_event_hook.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_core_event_hook.h"; sourceTree = "<absolute>"; };
+ 4C86404C86404C8640000000 /* switch_scheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_scheduler.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_scheduler.h"; sourceTree = "<absolute>"; };
+ 4C9BB04C9BB04C9BB0000000 /* switch_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_core.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_core.h"; sourceTree = "<absolute>"; };
+ 4CA2604CA2604CA260000000 /* switch_core_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_core_db.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_core_db.h"; sourceTree = "<absolute>"; };
+ 4CB1704CB1704CB170000000 /* switch_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_config.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_config.h"; sourceTree = "<absolute>"; };
+ 4CB7F04CB7F04CB7F0000000 /* switch_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_event.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_event.h"; sourceTree = "<absolute>"; };
+ 4CC2C04CC2C04CC2C0000000 /* switch_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_frame.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_frame.h"; sourceTree = "<absolute>"; };
+ 4CCD904CCD904CCD90000000 /* switch_ivr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_ivr.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_ivr.h"; sourceTree = "<absolute>"; };
+ 4CD8504CD8504CD850000000 /* switch_dso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_dso.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_dso.h"; sourceTree = "<absolute>"; };
+ 4CE3104CE3104CE310000000 /* switch_loadable_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_loadable_module.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_loadable_module.h"; sourceTree = "<absolute>"; };
+ 4CE7804CE7804CE780000000 /* switch_module_interfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_module_interfaces.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_module_interfaces.h"; sourceTree = "<absolute>"; };
+ 4CF2804CF2804CF280000000 /* resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = resample.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/src/resample.c"; sourceTree = "<absolute>"; };
+ 4CF3004CF3004CF300000000 /* switch_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_platform.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_platform.h"; sourceTree = "<absolute>"; };
+ 4D08504D08504D0850000000 /* switch_resample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_resample.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_resample.h"; sourceTree = "<absolute>"; };
+ 4D13304D13304D1330000000 /* switch_regex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_regex.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_regex.h"; sourceTree = "<absolute>"; };
+ 4D19B04D19B04D19B0000000 /* switch_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_types.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_types.h"; sourceTree = "<absolute>"; };
+ 4D24804D24804D2480000000 /* switch_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_utils.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_utils.h"; sourceTree = "<absolute>"; };
+ 4D2F504D2F504D2F50000000 /* switch_rtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_rtp.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_rtp.h"; sourceTree = "<absolute>"; };
+ 4D3A104D3A104D3A10000000 /* switch_stun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_stun.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_stun.h"; sourceTree = "<absolute>"; };
+ 4D44D04D44D04D44D0000000 /* switch_log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_log.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_log.h"; sourceTree = "<absolute>"; };
+ 4D4F904D4F904D4F90000000 /* switch_xml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_xml.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_xml.h"; sourceTree = "<absolute>"; };
+ 4D5A504D5A504D5A50000000 /* switch_cpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_cpp.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_cpp.h"; sourceTree = "<absolute>"; };
+ 4D65104D65104D6510000000 /* libteletone_detect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libteletone_detect.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src/libteletone_detect.h"; sourceTree = "<absolute>"; };
+ 4D69804D69804D6980000000 /* libteletone_generate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libteletone_generate.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src/libteletone_generate.h"; sourceTree = "<absolute>"; };
+ 4D74D04D74D04D74D0000000 /* libteletone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libteletone.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src/libteletone.h"; sourceTree = "<absolute>"; };
+ 4D7FA04D7FA04D7FA0000000 /* switch_odbc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = switch_odbc.h; path = "/Users/shaneburrell/freeswitch-svn-real/src/include/switch_odbc.h"; sourceTree = "<absolute>"; };
+ 4E26604E26604E2660000000 /* libfreeswitch_la.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libfreeswitch_la.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4E37F04E37F04E37F0000000 /* filterkit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = filterkit.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/src/filterkit.c"; sourceTree = "<absolute>"; };
+ 4E42704E42704E4270000000 /* resamplesubs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = resamplesubs.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/src/resamplesubs.c"; sourceTree = "<absolute>"; };
+ 4E43004E43004E4300000000 /* libresample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libresample.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/include/libresample.h"; sourceTree = "<absolute>"; };
+ 4EE3404EE3404EE340000000 /* libresample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libresample.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4F9DA04F9DA04F9DA0000000 /* libteletone.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libteletone.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4FA4804FA4804FA480000000 /* pcre_compile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_compile.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_compile.c"; sourceTree = "<absolute>"; };
+ 4FABD04FABD04FABD0000000 /* pcre_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_tables.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_tables.c"; sourceTree = "<absolute>"; };
+ 4FB6904FB6904FB690000000 /* pcre_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_config.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_config.c"; sourceTree = "<absolute>"; };
+ 600100600100600100000000 /* pcre_try_flipped.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_try_flipped.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_try_flipped.c"; sourceTree = "<absolute>"; };
+ 601010601010601010000000 /* pcre_dfa_exec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_dfa_exec.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_dfa_exec.c"; sourceTree = "<absolute>"; };
+ 6016C06016C06016C0000000 /* pcre_ucp_searchfuncs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_ucp_searchfuncs.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_ucp_searchfuncs.c"; sourceTree = "<absolute>"; };
+ 602600602600602600000000 /* pcre_exec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_exec.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_exec.c"; sourceTree = "<absolute>"; };
+ 602C70602C70602C70000000 /* pcre_valid_utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_valid_utf8.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_valid_utf8.c"; sourceTree = "<absolute>"; };
+ 603740603740603740000000 /* pcre_fullinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_fullinfo.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_fullinfo.c"; sourceTree = "<absolute>"; };
+ 604220604220604220000000 /* pcre_version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_version.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_version.c"; sourceTree = "<absolute>"; };
+ 604690604690604690000000 /* dftables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dftables.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/dftables.c"; sourceTree = "<absolute>"; };
+ 605790605790605790000000 /* pcre_get.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_get.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_get.c"; sourceTree = "<absolute>"; };
+ 606230606230606230000000 /* pcre_xclass.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_xclass.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_xclass.c"; sourceTree = "<absolute>"; };
+ 606CF0606CF0606CF0000000 /* pcre_globals.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_globals.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_globals.c"; sourceTree = "<absolute>"; };
+ 6077B06077B06077B0000000 /* pcre_info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_info.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_info.c"; sourceTree = "<absolute>"; };
+ 608270608270608270000000 /* pcrecpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcrecpp.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcrecpp.h"; sourceTree = "<absolute>"; };
+ 608D30608D30608D30000000 /* pcre_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcre_internal.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_internal.h"; sourceTree = "<absolute>"; };
+ 609810609810609810000000 /* pcre_maketables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_maketables.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_maketables.c"; sourceTree = "<absolute>"; };
+ 60A2E060A2E060A2E0000000 /* pcrecpparg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcrecpparg.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcrecpparg.h"; sourceTree = "<absolute>"; };
+ 60ADA060ADA060ADA0000000 /* pcre_ord2utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_ord2utf8.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_ord2utf8.c"; sourceTree = "<absolute>"; };
+ 60BD2060BD2060BD20000000 /* pcredemo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcredemo.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcredemo.c"; sourceTree = "<absolute>"; };
+ 60C3A060C3A060C3A0000000 /* pcre_refcount.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_refcount.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_refcount.c"; sourceTree = "<absolute>"; };
+ 60CE5060CE5060CE50000000 /* pcregrep.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcregrep.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcregrep.c"; sourceTree = "<absolute>"; };
+ 60D91060D91060D910000000 /* pcreposix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcreposix.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcreposix.c"; sourceTree = "<absolute>"; };
+ 60E3D060E3D060E3D0000000 /* pcre_scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcre_scanner.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_scanner.h"; sourceTree = "<absolute>"; };
+ 60EE9060EE9060EE90000000 /* pcreposix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcreposix.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcreposix.h"; sourceTree = "<absolute>"; };
+ 60F96060F96060F960000000 /* pcre_scanner_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pcre_scanner_unittest.cc; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_scanner_unittest.cc"; sourceTree = "<absolute>"; };
+ 6108B06108B06108B0000000 /* pcretest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcretest.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcretest.c"; sourceTree = "<absolute>"; };
+ 610F30610F30610F30000000 /* pcre_stringpiece.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcre_stringpiece.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_stringpiece.h"; sourceTree = "<absolute>"; };
+ 6114A06114A06114A0000000 /* pcre_stringpiece.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode; name = pcre_stringpiece.h.in; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_stringpiece.h.in"; sourceTree = "<absolute>"; };
+ 612930612930612930000000 /* ucp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ucp.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/ucp.h"; sourceTree = "<absolute>"; };
+ 612FB0612FB0612FB0000000 /* pcre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pcre.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre.h"; sourceTree = "<absolute>"; };
+ 613A60613A60613A60000000 /* ucpinternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ucpinternal.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/ucpinternal.h"; sourceTree = "<absolute>"; };
+ 613ED0613ED0613ED0000000 /* pcre_chartables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pcre_chartables.c; path = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/pcre_chartables.c"; sourceTree = "<absolute>"; };
+ 61E47061E47061E470000000 /* libpcre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libpcre.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 61F2B061F2B061F2B0000000 /* stfu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stfu.h; path = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/stfu.h"; sourceTree = "<absolute>"; };
+ 628790628790628790000000 /* libstfu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libstfu.a; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
/* Begin PBXGroup section */
- 27FC39A70CDBA14A00BC5B29 = {
+ 486D20486D20486D20000000 = {
isa = PBXGroup;
children = (
+ 486FE0486FE0486FE0000000 /* Sources */,
+ 487420487420487420000000 /* Resources */,
+ 4877E04877E04877E0000000 /* Products */,
);
sourceTree = "<group>";
};
+ 486FE0486FE0486FE0000000 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 4879C04879C04879C0000000 /* freeswitch */,
+ 4888D04888D04888D0000000 /* freeswitch_la */,
+ 487880487880487880000000 /* resample */,
+ 48CB2048CB2048CB20000000 /* teletone */,
+ 48DA9048DA9048DA90000000 /* pcre */,
+ 48DA2048DA2048DA20000000 /* stfu */,
+ );
+ name = Sources;
+ sourceTree = "<group>";
+ };
+ 487420487420487420000000 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 4877E04877E04877E0000000 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 4A2F104A2F104A2F10000000 /* freeswitch */,
+ 4E26604E26604E2660000000 /* libfreeswitch_la.a */,
+ 4EE3404EE3404EE340000000 /* libresample.a */,
+ 4F9DA04F9DA04F9DA0000000 /* libteletone.a */,
+ 61E47061E47061E470000000 /* libpcre.a */,
+ 628790628790628790000000 /* libstfu.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 487880487880487880000000 /* resample */ = {
+ isa = PBXGroup;
+ children = (
+ 48C1D048C1D048C1D0000000 /* Source Files */,
+ 48C75048C75048C750000000 /* Header Files */,
+ );
+ name = resample;
+ sourceTree = "<group>";
+ };
+ 4879C04879C04879C0000000 /* freeswitch */ = {
+ isa = PBXGroup;
+ children = (
+ 487E20487E20487E20000000 /* Source Files */,
+ 4882E04882E04882E0000000 /* Header Files */,
+ );
+ name = freeswitch;
+ sourceTree = "<group>";
+ };
+ 487E20487E20487E20000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 499250499250499250000000 /* switch.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 4882E04882E04882E0000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4999A04999A04999A0000000 /* switch.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
+ 4888D04888D04888D0000000 /* freeswitch_la */ = {
+ isa = PBXGroup;
+ children = (
+ 488C80488C80488C80000000 /* Source Files */,
+ 48A97048A97048A970000000 /* Header Files */,
+ );
+ name = freeswitch_la;
+ sourceTree = "<group>";
+ };
+ 488C80488C80488C80000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4A36304A36304A3630000000 /* switch_apr.c */,
+ 4A3DB04A3DB04A3DB0000000 /* switch_buffer.c */,
+ 4A48704A48704A4870000000 /* switch_caller.c */,
+ 4A53304A53304A5330000000 /* switch_channel.c */,
+ 4A5DF04A5DF04A5DF0000000 /* switch_console.c */,
+ 4A68D04A68D04A68D0000000 /* switch_core_media_bug.c */,
+ 4A78304A78304A7830000000 /* switch_core_timer.c */,
+ 4A7E704A7E704A7E70000000 /* switch_core_asr.c */,
+ 4A89304A89304A8930000000 /* switch_core_event_hook.c */,
+ 4A98604A98604A9860000000 /* switch_core_speech.c */,
+ 4AA3804AA3804AA380000000 /* switch_core_memory.c */,
+ 4AAE304AAE304AAE30000000 /* switch_core_codec.c */,
+ 4AB4704AB4704AB470000000 /* switch_core_file.c */,
+ 4ABF304ABF304ABF30000000 /* switch_core_hash.c */,
+ 4AC9F04AC9F04AC9F0000000 /* switch_core_sqldb.c */,
+ 4AD4B04AD4B04AD4B0000000 /* switch_core_session.c */,
+ 4AE3E04AE3E04AE3E0000000 /* switch_core_directory.c */,
+ 4AEF504AEF504AEF50000000 /* switch_core_state_machine.c */,
+ 4AEFC04AEFC04AEFC0000000 /* switch_core_io.c */,
+ 4B00304B00304B0030000000 /* switch_core_rwlock.c */,
+ 4B0F604B0F604B0F60000000 /* switch_core_port_allocator.c */,
+ 4B0FD04B0FD04B0FD0000000 /* switch_core.c */,
+ 4B20604B20604B2060000000 /* switch_scheduler.c */,
+ 4B2B204B2B204B2B20000000 /* switch_core_db.c */,
+ 4B35E04B35E04B35E0000000 /* switch_dso.c */,
+ 4B40A04B40A04B40A0000000 /* switch_loadable_module.c */,
+ 4B4FC04B4FC04B4FC0000000 /* switch_utils.c */,
+ 4B56404B56404B5640000000 /* switch_event.c */,
+ 4B61004B61004B6100000000 /* switch_resample.c */,
+ 4B6BC04B6BC04B6BC0000000 /* switch_regex.c */,
+ 4B76804B76804B7680000000 /* switch_rtp.c */,
+ 4B81404B81404B8140000000 /* switch_ivr_bridge.c */,
+ 4B8C004B8C004B8C00000000 /* switch_ivr_originate.c */,
+ 4AEED04AEED04AEED0000000 /* switch_ivr_async.c */,
+ 4BA2904BA2904BA290000000 /* switch_ivr_play_say.c */,
+ 4BB1C04BB1C04BB1C0000000 /* switch_ivr_menu.c */,
+ 4BB8004BB8004BB800000000 /* switch_ivr.c */,
+ 4BC2C04BC2C04BC2C0000000 /* switch_stun.c */,
+ 4BCD804BCD804BCD80000000 /* switch_log.c */,
+ 4BD8404BD8404BD840000000 /* switch_xml.c */,
+ 4BE3004BE3004BE300000000 /* switch_config.c */,
+ 4BEDC04BEDC04BEDC0000000 /* switch_time.c */,
+ 4BF8804BF8804BF880000000 /* stfu.c */,
+ 4C03404C03404C0340000000 /* switch_cpp.cpp */,
+ 4C0E004C0E004C0E00000000 /* g711.c */,
+ 4C1CB04C1CB04C1CB0000000 /* switch_pcm.c */,
+ 4C23004C23004C2300000000 /* libteletone_detect.c */,
+ 4C27704C27704C2770000000 /* libteletone_generate.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 48A97048A97048A970000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4C32C04C32C04C32C0000000 /* switch_am_config.h */,
+ 4999A04999A04999A0000000 /* switch.h */,
+ 4C4F504C4F504C4F50000000 /* switch_apr.h */,
+ 4C56004C56004C5600000000 /* switch_buffer.h */,
+ 4C60D04C60D04C60D0000000 /* switch_caller.h */,
+ 4C6BB04C6BB04C6BB0000000 /* switch_channel.h */,
+ 4C7AD04C7AD04C7AD0000000 /* switch_console.h */,
+ 4C85B04C85B04C85B0000000 /* switch_core_event_hook.h */,
+ 4C86404C86404C8640000000 /* switch_scheduler.h */,
+ 4C9BB04C9BB04C9BB0000000 /* switch_core.h */,
+ 4CA2604CA2604CA260000000 /* switch_core_db.h */,
+ 4CB1704CB1704CB170000000 /* switch_config.h */,
+ 4CB7F04CB7F04CB7F0000000 /* switch_event.h */,
+ 4CC2C04CC2C04CC2C0000000 /* switch_frame.h */,
+ 4CCD904CCD904CCD90000000 /* switch_ivr.h */,
+ 4CD8504CD8504CD850000000 /* switch_dso.h */,
+ 4CE3104CE3104CE310000000 /* switch_loadable_module.h */,
+ 4CE7804CE7804CE780000000 /* switch_module_interfaces.h */,
+ 4CF3004CF3004CF300000000 /* switch_platform.h */,
+ 4D08504D08504D0850000000 /* switch_resample.h */,
+ 4D13304D13304D1330000000 /* switch_regex.h */,
+ 4D19B04D19B04D19B0000000 /* switch_types.h */,
+ 4D24804D24804D2480000000 /* switch_utils.h */,
+ 4D2F504D2F504D2F50000000 /* switch_rtp.h */,
+ 4D3A104D3A104D3A10000000 /* switch_stun.h */,
+ 4D44D04D44D04D44D0000000 /* switch_log.h */,
+ 4D4F904D4F904D4F90000000 /* switch_xml.h */,
+ 4D5A504D5A504D5A50000000 /* switch_cpp.h */,
+ 4D65104D65104D6510000000 /* libteletone_detect.h */,
+ 4D69804D69804D6980000000 /* libteletone_generate.h */,
+ 4D74D04D74D04D74D0000000 /* libteletone.h */,
+ 4D7FA04D7FA04D7FA0000000 /* switch_odbc.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
+ 48C1D048C1D048C1D0000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4CF2804CF2804CF280000000 /* resample.c */,
+ 4E37F04E37F04E37F0000000 /* filterkit.c */,
+ 4E42704E42704E4270000000 /* resamplesubs.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 48C75048C75048C750000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4E43004E43004E4300000000 /* libresample.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
+ 48CB2048CB2048CB20000000 /* teletone */ = {
+ isa = PBXGroup;
+ children = (
+ 48CF6048CF6048CF60000000 /* Header Files */,
+ 48D3D048D3D048D3D0000000 /* Source Files */,
+ );
+ name = teletone;
+ sourceTree = "<group>";
+ };
+ 48CF6048CF6048CF60000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4D74D04D74D04D74D0000000 /* libteletone.h */,
+ 4D65104D65104D6510000000 /* libteletone_detect.h */,
+ 4D69804D69804D6980000000 /* libteletone_generate.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
+ 48D3D048D3D048D3D0000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4C23004C23004C2300000000 /* libteletone_detect.c */,
+ 4C27704C27704C2770000000 /* libteletone_generate.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 48DA2048DA2048DA20000000 /* stfu */ = {
+ isa = PBXGroup;
+ children = (
+ 48FA9048FA9048FA90000000 /* Source Files */,
+ 48FEE048FEE048FEE0000000 /* Header Files */,
+ );
+ name = stfu;
+ sourceTree = "<group>";
+ };
+ 48DA9048DA9048DA90000000 /* pcre */ = {
+ isa = PBXGroup;
+ children = (
+ 48DEB048DEB048DEB0000000 /* Source Files */,
+ 48E9F048E9F048E9F0000000 /* Header Files */,
+ );
+ name = pcre;
+ sourceTree = "<group>";
+ };
+ 48DEB048DEB048DEB0000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4FA4804FA4804FA480000000 /* pcre_compile.c */,
+ 4FABD04FABD04FABD0000000 /* pcre_tables.c */,
+ 4FB6904FB6904FB690000000 /* pcre_config.c */,
+ 600100600100600100000000 /* pcre_try_flipped.c */,
+ 601010601010601010000000 /* pcre_dfa_exec.c */,
+ 6016C06016C06016C0000000 /* pcre_ucp_searchfuncs.c */,
+ 602600602600602600000000 /* pcre_exec.c */,
+ 602C70602C70602C70000000 /* pcre_valid_utf8.c */,
+ 603740603740603740000000 /* pcre_fullinfo.c */,
+ 604220604220604220000000 /* pcre_version.c */,
+ 604690604690604690000000 /* dftables.c */,
+ 605790605790605790000000 /* pcre_get.c */,
+ 606230606230606230000000 /* pcre_xclass.c */,
+ 606CF0606CF0606CF0000000 /* pcre_globals.c */,
+ 6077B06077B06077B0000000 /* pcre_info.c */,
+ 609810609810609810000000 /* pcre_maketables.c */,
+ 60ADA060ADA060ADA0000000 /* pcre_ord2utf8.c */,
+ 60BD2060BD2060BD20000000 /* pcredemo.c */,
+ 60C3A060C3A060C3A0000000 /* pcre_refcount.c */,
+ 60CE5060CE5060CE50000000 /* pcregrep.c */,
+ 60D91060D91060D910000000 /* pcreposix.c */,
+ 60F96060F96060F960000000 /* pcre_scanner_unittest.cc */,
+ 6108B06108B06108B0000000 /* pcretest.c */,
+ 613ED0613ED0613ED0000000 /* pcre_chartables.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 48E9F048E9F048E9F0000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 608270608270608270000000 /* pcrecpp.h */,
+ 608D30608D30608D30000000 /* pcre_internal.h */,
+ 60A2E060A2E060A2E0000000 /* pcrecpparg.h */,
+ 60E3D060E3D060E3D0000000 /* pcre_scanner.h */,
+ 60EE9060EE9060EE90000000 /* pcreposix.h */,
+ 610F30610F30610F30000000 /* pcre_stringpiece.h */,
+ 6114A06114A06114A0000000 /* pcre_stringpiece.h.in */,
+ 612930612930612930000000 /* ucp.h */,
+ 612FB0612FB0612FB0000000 /* pcre.h */,
+ 613A60613A60613A60000000 /* ucpinternal.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
+ 48FA9048FA9048FA90000000 /* Source Files */ = {
+ isa = PBXGroup;
+ children = (
+ 4BF8804BF8804BF880000000 /* stfu.c */,
+ );
+ name = "Source Files";
+ sourceTree = "<group>";
+ };
+ 48FEE048FEE048FEE0000000 /* Header Files */ = {
+ isa = PBXGroup;
+ children = (
+ 61F2B061F2B061F2B0000000 /* stfu.h */,
+ );
+ name = "Header Files";
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
+/* Begin PBXNativeTarget section */
+ 49B9E049B9E049B9E0000000 /* freeswitch */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 49BDD049BDD049BDD0000000 /* Build configuration list for PBXNativeTarget "freeswitch" */;
+ buildPhases = (
+ 49ABD049ABD049ABD0000000 /* CMake ReRun */,
+ 49A46049A46049A460000000 /* Sources */,
+ 49B28049B28049B280000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 62B83062B83062B830000000 /* PBXTargetDependency */,
+ 62A1F062A1F062A1F0000000 /* PBXTargetDependency */,
+ 62A96062A96062A960000000 /* PBXTargetDependency */,
+ 629A30629A30629A30000000 /* PBXTargetDependency */,
+ 62B0E062B0E062B0E0000000 /* PBXTargetDependency */,
+ );
+ name = freeswitch;
+ productName = freeswitch;
+ productReference = 4A2F104A2F104A2F10000000 /* freeswitch */;
+ productType = "com.apple.product-type.tool";
+ };
+ 4DA6F04DA6F04DA6F0000000 /* libfreeswitch_la.a */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4DAAD04DAAD04DAAD0000000 /* Build configuration list for PBXNativeTarget "libfreeswitch_la.a" */;
+ buildPhases = (
+ 4D98F04D98F04D98F0000000 /* CMake ReRun */,
+ 4D90604D90604D9060000000 /* Sources */,
+ 4D9FA04D9FA04D9FA0000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = libfreeswitch_la.a;
+ productName = libfreeswitch_la.a;
+ productReference = 4E26604E26604E2660000000 /* libfreeswitch_la.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 4E68704E68704E6870000000 /* libresample.a */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4E6D204E6D204E6D20000000 /* Build configuration list for PBXNativeTarget "libresample.a" */;
+ buildPhases = (
+ 4E5B104E5B104E5B10000000 /* CMake ReRun */,
+ 4E4DC04E4DC04E4DC0000000 /* Sources */,
+ 4E61C04E61C04E61C0000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = libresample.a;
+ productName = libresample.a;
+ productReference = 4EE3404EE3404EE340000000 /* libresample.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 4F22D04F22D04F22D0000000 /* libteletone.a */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4F27804F27804F2780000000 /* Build configuration list for PBXNativeTarget "libteletone.a" */;
+ buildPhases = (
+ 4F15704F15704F1570000000 /* CMake ReRun */,
+ 4EF2904EF2904EF290000000 /* Sources */,
+ 4F1C204F1C204F1C20000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = libteletone.a;
+ productName = libteletone.a;
+ productReference = 4F9DA04F9DA04F9DA0000000 /* libteletone.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 616770616770616770000000 /* libpcre.a */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6169F06169F06169F0000000 /* Build configuration list for PBXNativeTarget "libpcre.a" */;
+ buildPhases = (
+ 6157E06157E06157E0000000 /* CMake ReRun */,
+ 614FC0614FC0614FC0000000 /* Sources */,
+ 615E90615E90615E90000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = libpcre.a;
+ productName = libpcre.a;
+ productReference = 61E47061E47061E470000000 /* libpcre.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 621070621070621070000000 /* libstfu.a */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6212F06212F06212F0000000 /* Build configuration list for PBXNativeTarget "libstfu.a" */;
+ buildPhases = (
+ 6200D06200D06200D0000000 /* CMake ReRun */,
+ 61F38061F38061F380000000 /* Sources */,
+ 6207B06207B06207B0000000 /* CMake PostBuild Rules */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = libstfu.a;
+ productName = libstfu.a;
+ productReference = 628790628790628790000000 /* libstfu.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
/* Begin PBXProject section */
- 27FC39A90CDBA14A00BC5B29 /* Project object */ = {
+ 4904E04904E04904E0000000 /* Project object */ = {
isa = PBXProject;
- buildConfigurationList = 27FC39AC0CDBA14A00BC5B29 /* Build configuration list for PBXProject "freeswitch" */;
+ buildConfigurationList = 490AA0490AA0490AA0000000 /* Build configuration list for PBXProject "freeswitch" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 0;
- mainGroup = 27FC39A70CDBA14A00BC5B29;
+ mainGroup = 486D20486D20486D20000000;
projectDirPath = "";
- projectRoot = "";
+ projectRoot = "/Users/shaneburrell/freeswitch-svn-real";
targets = (
+ 492050492050492050000000 /* ALL_BUILD */,
+ 49B9E049B9E049B9E0000000 /* freeswitch */,
+ 4DA6F04DA6F04DA6F0000000 /* libfreeswitch_la.a */,
+ 4E68704E68704E6870000000 /* libresample.a */,
+ 4F22D04F22D04F22D0000000 /* libteletone.a */,
+ 616770616770616770000000 /* libpcre.a */,
+ 621070621070621070000000 /* libstfu.a */,
);
};
/* End PBXProject section */
+/* Begin PBXShellScriptBuildPhase section */
+ 492230492230492230000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 492920492920492920000000 /* CMake Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ALL_BUILD_cmakeRulesBuildPhase.make$CONFIGURATION all";
+ };
+ 49ABD049ABD049ABD0000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 49B28049B28049B280000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/freeswitch_postBuildPhase.make$CONFIGURATION all";
+ };
+ 4D98F04D98F04D98F0000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 4D9FA04D9FA04D9FA0000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real/src -f /Users/shaneburrell/freeswitch-svn-real/src/CMakeScripts/freeswitch_la_postBuildPhase.make$CONFIGURATION all";
+ };
+ 4E5B104E5B104E5B10000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 4E61C04E61C04E61C0000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real/libs/libresample -f /Users/shaneburrell/freeswitch-svn-real/libs/libresample/CMakeScripts/resample_postBuildPhase.make$CONFIGURATION all";
+ };
+ 4F15704F15704F1570000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 4F1C204F1C204F1C20000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real/libs/libteletone -f /Users/shaneburrell/freeswitch-svn-real/libs/libteletone/CMakeScripts/teletone_postBuildPhase.make$CONFIGURATION all";
+ };
+ 6157E06157E06157E0000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 615E90615E90615E90000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real/libs/pcre -f /Users/shaneburrell/freeswitch-svn-real/libs/pcre/CMakeScripts/pcre_postBuildPhase.make$CONFIGURATION all";
+ };
+ 6200D06200D06200D0000000 /* CMake ReRun */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake ReRun";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real -f /Users/shaneburrell/freeswitch-svn-real/CMakeScripts/ReRunCMake.make";
+ };
+ 6207B06207B06207B0000000 /* CMake PostBuild Rules */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "CMake PostBuild Rules";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "make -C /Users/shaneburrell/freeswitch-svn-real/libs/stfu -f /Users/shaneburrell/freeswitch-svn-real/libs/stfu/CMakeScripts/stfu_postBuildPhase.make$CONFIGURATION all";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 49A46049A46049A460000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 499420499420499420000000 /* switch.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4D90604D90604D9060000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4A38304A38304A3830000000 /* switch_apr.c in Sources */,
+ 4A42704A42704A4270000000 /* switch_buffer.c in Sources */,
+ 4A4D304A4D304A4D30000000 /* switch_caller.c in Sources */,
+ 4A58104A58104A5810000000 /* switch_channel.c in Sources */,
+ 4A62D04A62D04A62D0000000 /* switch_console.c in Sources */,
+ 4A6DE04A6DE04A6DE0000000 /* switch_core_media_bug.c in Sources */,
+ 4A79004A79004A7900000000 /* switch_core_timer.c in Sources */,
+ 4A83504A83504A8350000000 /* switch_core_asr.c in Sources */,
+ 4A8EA04A8EA04A8EA0000000 /* switch_core_event_hook.c in Sources */,
+ 4A9A104A9A104A9A10000000 /* switch_core_speech.c in Sources */,
+ 4AA4504AA4504AA450000000 /* switch_core_memory.c in Sources */,
+ 4AAF004AAF004AAF00000000 /* switch_core_codec.c in Sources */,
+ 4AB9504AB9504AB950000000 /* switch_core_file.c in Sources */,
+ 4AC4104AC4104AC410000000 /* switch_core_hash.c in Sources */,
+ 4ACED04ACED04ACED0000000 /* switch_core_sqldb.c in Sources */,
+ 4AD9904AD9904AD990000000 /* switch_core_session.c in Sources */,
+ 4AE5404AE5404AE540000000 /* switch_core_directory.c in Sources */,
+ 4AF0304AF0304AF030000000 /* switch_core_state_machine.c in Sources */,
+ 4AFA904AFA904AFA90000000 /* switch_core_io.c in Sources */,
+ 4B05104B05104B0510000000 /* switch_core_rwlock.c in Sources */,
+ 4B10404B10404B1040000000 /* switch_core_port_allocator.c in Sources */,
+ 4B1B204B1B204B1B20000000 /* switch_core.c in Sources */,
+ 4B25404B25404B2540000000 /* switch_scheduler.c in Sources */,
+ 4B30004B30004B3000000000 /* switch_core_db.c in Sources */,
+ 4B3B204B3B204B3B20000000 /* switch_dso.c in Sources */,
+ 4B45904B45904B4590000000 /* switch_loadable_module.c in Sources */,
+ 4B50904B50904B5090000000 /* switch_utils.c in Sources */,
+ 4B5B204B5B204B5B20000000 /* switch_event.c in Sources */,
+ 4B65E04B65E04B65E0000000 /* switch_resample.c in Sources */,
+ 4B70A04B70A04B70A0000000 /* switch_regex.c in Sources */,
+ 4B7BC04B7BC04B7BC0000000 /* switch_rtp.c in Sources */,
+ 4B86204B86204B8620000000 /* switch_ivr_bridge.c in Sources */,
+ 4B90C04B90C04B90C0000000 /* switch_ivr_originate.c in Sources */,
+ 4B9CE04B9CE04B9CE0000000 /* switch_ivr_async.c in Sources */,
+ 4BA7704BA7704BA770000000 /* switch_ivr_play_say.c in Sources */,
+ 4BB2904BB2904BB290000000 /* switch_ivr_menu.c in Sources */,
+ 4BBD404BBD404BBD40000000 /* switch_ivr.c in Sources */,
+ 4BC8004BC8004BC800000000 /* switch_stun.c in Sources */,
+ 4BD2C04BD2C04BD2C0000000 /* switch_log.c in Sources */,
+ 4BDD804BDD804BDD80000000 /* switch_xml.c in Sources */,
+ 4BE7E04BE7E04BE7E0000000 /* switch_config.c in Sources */,
+ 4BF3004BF3004BF300000000 /* switch_time.c in Sources */,
+ 4BFDC04BFDC04BFDC0000000 /* stfu.c in Sources */,
+ 4C08204C08204C0820000000 /* switch_cpp.cpp in Sources */,
+ 4C12A04C12A04C12A0000000 /* g711.c in Sources */,
+ 4C1DA04C1DA04C1DA0000000 /* switch_pcm.c in Sources */,
+ 4C28004C28004C2800000000 /* libteletone_detect.c in Sources */,
+ 4C33304C33304C3330000000 /* libteletone_generate.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4E4DC04E4DC04E4DC0000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4E2E004E2E004E2E00000000 /* resample.c in Sources */,
+ 4E38C04E38C04E38C0000000 /* filterkit.c in Sources */,
+ 4E43704E43704E4370000000 /* resamplesubs.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4EF2904EF2904EF290000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4EF3004EF3004EF300000000 /* libteletone_detect.c in Sources */,
+ 4EFF804EFF804EFF80000000 /* libteletone_generate.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 614FC0614FC0614FC0000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4FA6604FA6604FA660000000 /* pcre_compile.c in Sources */,
+ 4FB0F04FB0F04FB0F0000000 /* pcre_tables.c in Sources */,
+ 4FBB504FBB504FBB50000000 /* pcre_config.c in Sources */,
+ 600670600670600670000000 /* pcre_try_flipped.c in Sources */,
+ 601100601100601100000000 /* pcre_dfa_exec.c in Sources */,
+ 601C70601C70601C70000000 /* pcre_ucp_searchfuncs.c in Sources */,
+ 6026C06026C06026C0000000 /* pcre_exec.c in Sources */,
+ 603130603130603130000000 /* pcre_valid_utf8.c in Sources */,
+ 603C90603C90603C90000000 /* pcre_fullinfo.c in Sources */,
+ 6047C06047C06047C0000000 /* pcre_version.c in Sources */,
+ 605220605220605220000000 /* dftables.c in Sources */,
+ 605CB0605CB0605CB0000000 /* pcre_get.c in Sources */,
+ 606780606780606780000000 /* pcre_xclass.c in Sources */,
+ 607240607240607240000000 /* pcre_globals.c in Sources */,
+ 607C60607C60607C60000000 /* pcre_info.c in Sources */,
+ 609CD0609CD0609CD0000000 /* pcre_maketables.c in Sources */,
+ 60B26060B26060B260000000 /* pcre_ord2utf8.c in Sources */,
+ 60BDE060BDE060BDE0000000 /* pcredemo.c in Sources */,
+ 60C8C060C8C060C8C0000000 /* pcre_refcount.c in Sources */,
+ 60D30060D30060D300000000 /* pcregrep.c in Sources */,
+ 60DDC060DDC060DDC0000000 /* pcreposix.c in Sources */,
+ 60FE1060FE1060FE10000000 /* pcre_scanner_unittest.cc in Sources */,
+ 610930610930610930000000 /* pcretest.c in Sources */,
+ 614A00614A00614A00000000 /* pcre_chartables.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 61F38061F38061F380000000 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 60B8B060B8B060B8B0000000 /* stfu.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 629320629320629320000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 49B9E049B9E049B9E0000000 /* freeswitch */;
+ targetProxy = 628E90628E90628E90000000 /* PBXContainerItemProxy */;
+ };
+ 629A30629A30629A30000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4DA6F04DA6F04DA6F0000000 /* libfreeswitch_la.a */;
+ targetProxy = 6295B06295B06295B0000000 /* PBXContainerItemProxy */;
+ };
+ 62A1F062A1F062A1F0000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 616770616770616770000000 /* libpcre.a */;
+ targetProxy = 629CF0629CF0629CF0000000 /* PBXContainerItemProxy */;
+ };
+ 62A96062A96062A960000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4E68704E68704E6870000000 /* libresample.a */;
+ targetProxy = 62A46062A46062A460000000 /* PBXContainerItemProxy */;
+ };
+ 62B0E062B0E062B0E0000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 621070621070621070000000 /* libstfu.a */;
+ targetProxy = 62ABF062ABF062ABF0000000 /* PBXContainerItemProxy */;
+ };
+ 62B83062B83062B830000000 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4F22D04F22D04F22D0000000 /* libteletone.a */;
+ targetProxy = 62B37062B37062B370000000 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin XCBuildConfiguration section */
- 27FC39AA0CDBA14A00BC5B29 /* Debug */ = {
+ 490B80490B80490B80000000 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- COPY_PHASE_STRIP = NO;
};
name = Debug;
};
- 27FC39AB0CDBA14A00BC5B29 /* Release */ = {
+ 490D40490D40490D40000000 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- COPY_PHASE_STRIP = YES;
};
name = Release;
};
+ 490EF0490EF0490EF0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = MinSizeRel;
+ };
+ 491170491170491170000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = RelWithDebInfo;
+ };
+ 4935F04935F04935F0000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = ALL_BUILD;
+ SECTORDER_FLAGS = "";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 4948E04948E04948E0000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = ALL_BUILD;
+ SECTORDER_FLAGS = "";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 495AF0495AF0495AF0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = ALL_BUILD;
+ SECTORDER_FLAGS = "";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 496C70496C70496C70000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = ALL_BUILD;
+ SECTORDER_FLAGS = "";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 49C11049C11049C110000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-Wl,-search_paths_first",
+ "-headerpad_max_install_names",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/Debug/libteletone.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/Debug/libpcre.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/Debug/libresample.a",
+ "/Users/shaneburrell/freeswitch-svn-real/src/Debug/libfreeswitch_la.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/Debug/libstfu.a",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ );
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 49D81049D81049D810000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = (
+ "-Wl,-search_paths_first",
+ "-headerpad_max_install_names",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/Release/libteletone.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/Release/libpcre.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/Release/libresample.a",
+ "/Users/shaneburrell/freeswitch-svn-real/src/Release/libfreeswitch_la.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/Release/libstfu.a",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ );
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 49EDE049EDE049EDE0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = (
+ "-Wl,-search_paths_first",
+ "-headerpad_max_install_names",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/MinSizeRel/libteletone.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/MinSizeRel/libpcre.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/MinSizeRel/libresample.a",
+ "/Users/shaneburrell/freeswitch-svn-real/src/MinSizeRel/libfreeswitch_la.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/MinSizeRel/libstfu.a",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ );
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 4A03A04A03A04A03A0000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-Wl,-search_paths_first",
+ "-headerpad_max_install_names",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/RelWithDebInfo/libteletone.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/RelWithDebInfo/libpcre.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/RelWithDebInfo/libresample.a",
+ "/Users/shaneburrell/freeswitch-svn-real/src/RelWithDebInfo/libfreeswitch_la.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/RelWithDebInfo/libstfu.a",
+ "-Llibs/apr/.libs",
+ "-lapr-1",
+ "-L/libs/apr-util/.libs",
+ "-laprutil-1",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src/.libs/libsndfile.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libcryptomath.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/.libs/libsrtp.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite/.libs/libsqlite3.a",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src/.libs/libvoipcodecs.a",
+ );
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 4DAE504DAE504DAE50000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/libresample/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_CPLUSPLUSFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch_la;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/src";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 4DC6D04DC6D04DC6D0000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/libresample/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_CPLUSPLUSFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch_la;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/src";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 4DDED04DDED04DDED0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = s;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/libresample/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_CPLUSPLUSFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch_la;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/src";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 4DF6704DF6704DF670000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 2;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_4 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/libresample/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/src/../libs/srtp/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_CPLUSPLUSFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = freeswitch_la;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/src";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 4E70604E70604E7060000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = resample;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 4E88204E88204E8820000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = resample;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 4E9E404E9E404E9E40000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = resample;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 4EB4D04EB4D04EB4D0000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libresample/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = resample;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libresample";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 4F2AC04F2AC04F2AC0000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = teletone;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 4F42804F42804F4280000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = teletone;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 4F58A04F58A04F58A0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = teletone;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 4F6F304F6F304F6F30000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = teletone;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 616D20616D20616D20000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_CPLUSPLUSFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = pcre;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 6185B06185B06185B0000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_CPLUSPLUSFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = pcre;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 619CD0619CD0619CD0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = s;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_CPLUSPLUSFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = pcre;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 61B45061B45061B450000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 2;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/pcre/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_CPLUSPLUSFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = pcre;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/pcre";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
+ 621620621620621620000000 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = stfu;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Debug;
+ };
+ 622DA0622DA0622DA0000000 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = stfu;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Release;
+ };
+ 6243B06243B06243B0000000 /* MinSizeRel */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DNDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = stfu;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = MinSizeRel;
+ };
+ 6259F06259F06259F0000000 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ EXECUTABLE_SUFFIX = .a;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2)",
+ "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_1 = "'CMAKE_INTDIR=\"$(CONFIGURATION)\"'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_2 = "'MACOSX'";
+ GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_TARGET_3 = "'HAVE_NETDB_H'";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ HEADER_SEARCH_PATHS = (
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libsndfile/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/srtp/crypto/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/sqlite",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/voipcodecs/src",
+ "/Users/shaneburrell/freeswitch-svn-real/src/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/libteletone/src",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/apr-util/include",
+ "/Users/shaneburrell/freeswitch-svn-real/libs/stfu/include",
+ );
+ INSTALL_PATH = "";
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = stfu;
+ SECTORDER_FLAGS = "";
+ SYMROOT = "/Users/shaneburrell/freeswitch-svn-real/libs/stfu";
+ USE_HEADERMAP = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = RelWithDebInfo;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 27FC39AC0CDBA14A00BC5B29 /* Build configuration list for PBXProject "freeswitch" */ = {
+ 490AA0490AA0490AA0000000 /* Build configuration list for PBXProject "freeswitch" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 27FC39AA0CDBA14A00BC5B29 /* Debug */,
- 27FC39AB0CDBA14A00BC5B29 /* Release */,
+ 490B80490B80490B80000000 /* Debug */,
+ 490D40490D40490D40000000 /* Release */,
+ 490EF0490EF0490EF0000000 /* MinSizeRel */,
+ 491170491170491170000000 /* RelWithDebInfo */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
+ defaultConfigurationName = Debug;
};
+ 493290493290493290000000 /* Build configuration list for PBXAggregateTarget "ALL_BUILD" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4935F04935F04935F0000000 /* Debug */,
+ 4948E04948E04948E0000000 /* Release */,
+ 495AF0495AF0495AF0000000 /* MinSizeRel */,
+ 496C70496C70496C70000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 49BDD049BDD049BDD0000000 /* Build configuration list for PBXNativeTarget "freeswitch" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 49C11049C11049C110000000 /* Debug */,
+ 49D81049D81049D810000000 /* Release */,
+ 49EDE049EDE049EDE0000000 /* MinSizeRel */,
+ 4A03A04A03A04A03A0000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 4DAAD04DAAD04DAAD0000000 /* Build configuration list for PBXNativeTarget "libfreeswitch_la.a" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4DAE504DAE504DAE50000000 /* Debug */,
+ 4DC6D04DC6D04DC6D0000000 /* Release */,
+ 4DDED04DDED04DDED0000000 /* MinSizeRel */,
+ 4DF6704DF6704DF670000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 4E6D204E6D204E6D20000000 /* Build configuration list for PBXNativeTarget "libresample.a" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4E70604E70604E7060000000 /* Debug */,
+ 4E88204E88204E8820000000 /* Release */,
+ 4E9E404E9E404E9E40000000 /* MinSizeRel */,
+ 4EB4D04EB4D04EB4D0000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 4F27804F27804F2780000000 /* Build configuration list for PBXNativeTarget "libteletone.a" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4F2AC04F2AC04F2AC0000000 /* Debug */,
+ 4F42804F42804F4280000000 /* Release */,
+ 4F58A04F58A04F58A0000000 /* MinSizeRel */,
+ 4F6F304F6F304F6F30000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 6169F06169F06169F0000000 /* Build configuration list for PBXNativeTarget "libpcre.a" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 616D20616D20616D20000000 /* Debug */,
+ 6185B06185B06185B0000000 /* Release */,
+ 619CD0619CD0619CD0000000 /* MinSizeRel */,
+ 61B45061B45061B450000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 6212F06212F06212F0000000 /* Build configuration list for PBXNativeTarget "libstfu.a" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 621620621620621620000000 /* Debug */,
+ 622DA0622DA0622DA0000000 /* Release */,
+ 6243B06243B06243B0000000 /* MinSizeRel */,
+ 6259F06259F06259F0000000 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
/* End XCConfigurationList section */
};
- rootObject = 27FC39A90CDBA14A00BC5B29 /* Project object */;
+ rootObject = 4904E04904E04904E0000000 /* Project object */;
}
Property changes: freeswitch/branches/seven/libs
Name: svn:ignore
- libpri*
wanpipe*
*.zip
*.tar
*.tar.gz
*.tgz
apr-iconv
apr-util
curl
howl
iksemel
include
js
libetpan
libeXosip2
libresample
libsndfile
openldap
osip
pcre
PortAudio
speex
sqlite
xmlrpc
apr
libeXosip2-2.2.3
libosip2-2.2.2
libosip2-2.2.3
apr-1.2.6
pcre-6.4
pcre-6.7
apr-util-1.2.6
libeXosip2-2.2.3-pre1
iksemel-1.2
xmlrpc-c-1.03.14
libsndfile-1.0.12
libresample-0.1.3
curl-7.15.2
sqlite-3.3.5
portaudio
libetpan-0.45
howl-1.0.0
openldap-2.3.19
speex-1.1.11.1
mozilla
apr-1.2.7
apr-util-1.2.7
apr-iconv-1.1.1
js20051231
mono-1.1.13.8
php-5.1.6
portaudio_v18_1
pthreads-w32-2-7-0-release
sofia-sip
libeXosip2-2.2.2
libsndfile-1.0.16
nspr-4.6.1.winnt5.release
sqlite-source-3_3_6
VSDependancies
nspr-4.6.1.winnt5.debug
libg729
zlib-1.2.3
speex-1.1.12
sqlite-3.3.6
sofia-sip-1.12.1
sofia-sip-1.12.1
libresample
libsangoma
sqlite-3.2.8
sofia-sip-1*
ruby-1*
Python-2*
resip.build.sh
jitterbuffer
pjproject*
sipsak*
jrtplib*
iovm
sipXtackLib
sipx
cppunit-1*
resiprocate*
sipXportLib
new
unixODBC*
libshout*
lame*
glib-2.12.3
pkg-config-0.21
gettext-0.15
mono-1.2.3.1
sphinxbase-0.4.99
pocketsphinx-0.5.99
iax
flite-1.3.9
Communicator_semi_40.cd_semi_6000
en
lib
music
sounds
libogg-1.1.3
flite-1.3.99
mpg123
+ libpri*
wanpipe*
*.zip
*.tar
*.tar.gz
*.tgz
apr-iconv
apr-util
curl
howl
iksemel
include
js
libetpan
libeXosip2
libresample
libsndfile
openldap
osip
pcre
PortAudio
speex
sqlite
xmlrpc
apr
libeXosip2-2.2.3
libosip2-2.2.2
libosip2-2.2.3
apr-1.2.6
pcre-6.4
pcre-6.7
apr-util-1.2.6
libeXosip2-2.2.3-pre1
iksemel-1.2
xmlrpc-c-1.03.14
libsndfile-1.0.12
libresample-0.1.3
curl-7.15.2
sqlite-3.3.5
portaudio
libetpan-0.45
howl-1.0.0
openldap-2.3.19
speex-1.1.11.1
mozilla
apr-1.2.7
apr-util-1.2.7
apr-iconv-1.1.1
js20051231
mono-1.1.13.8
php-5.1.6
portaudio_v18_1
pthreads-w32-2-7-0-release
sofia-sip
libeXosip2-2.2.2
libsndfile-1.0.16
nspr-4.6.1.winnt5.release
sqlite-source-3_3_6
VSDependancies
nspr-4.6.1.winnt5.debug
libg729
zlib-1.2.3
speex-1.1.12
sqlite-3.3.6
sofia-sip-1.12.1
sofia-sip-1.12.1
libresample
libsangoma
sqlite-3.2.8
sofia-sip-1*
ruby-1*
Python-2*
resip.build.sh
jitterbuffer
pjproject*
sipsak*
jrtplib*
iovm
sipXtackLib
sipx
cppunit-1*
resiprocate*
sipXportLib
new
unixODBC*
libshout*
lame*
glib-2.12.3
pkg-config-0.21
gettext-0.15
mono-1.2.3.1
sphinxbase-0.4.99
pocketsphinx-0.5.99
iax
flite-1.3.9
Communicator_semi_40.cd_semi_6000
en
lib
music
sounds
libogg-1.1.3
flite-1.3.99
mpg123
tiff
tiff-3.8.2
celt-0.5.1
openzap
stuff
Property changes: freeswitch/branches/seven/libs/apr
Name: svn:ignore
- apr-1-config
exports.c
config.log
.complete
.libs
Makefile
config.nice
apr.pc
config.status
.make.dirs
apr-config.out
export_vars.c
libtool
apr.exp
configure
+ apr-1-config
exports.c
config.log
.complete
.libs
Makefile
config.nice
apr.pc
config.status
.make.dirs
apr-config.out
export_vars.c
libtool
apr.exp
configure
autom4te.cache
aclocal.m4
configure.lineno
Modified: freeswitch/branches/seven/libs/apr/.update (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/.update 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/.update 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1 +1 @@
-Fri Mar 16 17:12:07 EDT 2007
+Mon Jun 8 11:30:01 EDT 2009
Copied: freeswitch/branches/seven/libs/apr/CMakeLists.txt (from rev 14471, freeswitch/trunk/libs/apr/CMakeLists.txt) (0 => 14472)
--- freeswitch/branches/seven/libs/apr/CMakeLists.txt (rev 0)
+++ freeswitch/branches/seven/libs/apr/CMakeLists.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,110 @@
+cmake_minimum_required(VERSION 2.6)
+
+INCLUDE_DIRECTORIES(include/)
+
+add_definitions(-DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK)
+INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/libs/apr/include/arch/unix/ ./include)
+
+SET (apr_SRCS
+ passwd/apr_getpass.c
+ strings/apr_cpystrn.c
+ strings/apr_strnatcmp.c
+ strings/apr_strings.c
+ strings/apr_strtok.c
+ strings/apr_fnmatch.c
+ strings/apr_snprintf.c
+ tables/apr_tables.c
+ tables/apr_hash.c
+ atomic/unix/apr_atomic.c
+ dso/unix/dso.c
+ file_io/unix/flock.c
+ file_io/unix/readwrite.c
+ file_io/unix/filepath_util.c
+ file_io/unix/seek.c
+ file_io/unix/dir.c
+ file_io/unix/mktemp.c
+ file_io/unix/filedup.c
+ file_io/unix/tempdir.c
+ file_io/unix/filepath.c
+ file_io/unix/pipe.c
+ file_io/unix/open.c
+ file_io/unix/filestat.c
+ file_io/unix/copy.c
+ file_io/unix/fileacc.c
+ file_io/unix/fullrw.c
+ locks/unix/thread_rwlock.c
+ locks/unix/thread_mutex.c
+ locks/unix/thread_cond.c
+ locks/unix/proc_mutex.c
+ locks/unix/global_mutex.c
+ memory/unix/apr_pools.c
+ misc/unix/charset.c
+ misc/unix/env.c
+ misc/unix/version.c
+ misc/unix/rand.c
+ misc/unix/start.c
+ misc/unix/errorcodes.c
+ misc/unix/getopt.c
+ misc/unix/otherchild.c
+ mmap/unix/mmap.c
+ mmap/unix/common.c
+ network_io/unix/sockaddr.c
+ network_io/unix/sockopt.c
+ network_io/unix/sendrecv.c
+ network_io/unix/multicast.c
+ network_io/unix/sockets.c
+ network_io/unix/inet_ntop.c
+ network_io/unix/inet_pton.c
+ poll/unix/epoll.c
+ poll/unix/select.c
+ poll/unix/poll.c
+ poll/unix/port.c
+ poll/unix/kqueue.c
+ random/unix/sha2.c
+ random/unix/apr_random.c
+ random/unix/sha2_glue.c
+ shmem/unix/shm.c
+ support/unix/waitio.c
+ threadproc/unix/procsup.c
+ threadproc/unix/thread.c
+ threadproc/unix/signals.c
+ threadproc/unix/proc.c
+ threadproc/unix/threadpriv.c
+ time/unix/time.c
+ time/unix/timestr.c
+ user/unix/userinfo.c
+ user/unix/groupinfo.c)
+
+
+ADD_LIBRARY(apr STATIC ${apr_SRCS})
+
+
+#/bin/sh /Users/shaneburrell/freeswitch-svn-real/libs/apr/libtool --silent --mode=link gcc -g -O2 -DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I./include -I/Users/shaneburrell/freeswitch-svn-real/arch/unix -I./include/arch/unix -I/Users/shaneburrell/freeswitch-svn-real -version-info 2:8:2 -o libapr-1.la -rpath /usr/local/freeswitch/lib passwd/apr_getpass.lo strings/apr_cpystrn.lo strings/apr_strnatcmp.lo strings/apr_strings.lo strings/apr_strtok.lo strings/apr_fnmatch.lo strings/apr_snprintf.lo tables/apr_tables.lo tables/apr_hash.lo atomic/unix/apr_atomic.lo dso/unix/dso.lo file_io/unix/flock.lo file_io/unix/readwrite.lo file_io/unix/filepath_util.lo file_io/unix/seek.lo file_io/unix/dir.lo file_io/unix/mktemp.lo file_io/unix/filedup.lo file_io/unix/tempdir.lo file_io/unix/filepath.lo file_io/unix/pipe.lo file_io/unix/open.lo file_io/unix/filestat.lo file_io/unix/copy.lo file_io/unix/fileacc.lo file_io/unix/fullrw.lo locks/unix/thread_rwlock.lo locks/unix/thread_mutex.lo locks/unix/thread_cond.lo locks/unix/proc_mutex.lo locks/unix/global_mutex.lo memory/unix/apr_pools.lo misc/unix/charset.lo misc/unix/env.lo misc/unix/version.lo misc/unix/rand.lo misc/unix/start.lo misc/unix/errorcodes.lo misc/unix/getopt.lo misc/unix/otherchild.lo mmap/unix/mmap.lo mmap/unix/common.lo network_io/unix/sockaddr.lo network_io/unix/sockopt.lo network_io/unix/sendrecv.lo network_io/unix/multicast.lo network_io/unix/sockets.lo network_io/unix/inet_ntop.lo network_io/unix/inet_pton.lo poll/unix/epoll.lo poll/unix/select.lo poll/unix/poll.lo poll/unix/port.lo poll/unix/kqueue.lo random/unix/sha2.lo random/unix/apr_random.lo random/unix/sha2_glue.lo shmem/unix/shm.lo support/unix/waitio.lo threadproc/unix/procsup.lo threadproc/unix/thread.lo threadproc/unix/signals.lo threadproc/unix/proc.lo threadproc/unix/threadpriv.lo time/unix/time.lo time/unix/timestr.lo user/unix/userinfo.lo user/unix/groupinfo.lo -ldl -lpthread
+
+#awk -f /Users/shaneburrell/freeswitch-svn-real/libs/apr/build/make_var_export.awk /Users/shaneburrell/freeswitch-svn-real/apr_thread_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_env.h /Users/shaneburrell/freeswitch-svn-real/apr_poll.h /Users/shaneburrell/freeswitch-svn-real/apr_fnmatch.h /Users/shaneburrell/freeswitch-svn-real/apr_global_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_pools.h /Users/shaneburrell/freeswitch-svn-real/apr_want.h /Users/shaneburrell/freeswitch-svn-real/apr_file_io.h /Users/shaneburrell/freeswitch-svn-real/apr_version.h /Users/shaneburrell/freeswitch-svn-real/apr_mmap.h /Users/shaneburrell/freeswitch-svn-real/apr_dso.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_proc.h /Users/shaneburrell/freeswitch-svn-real/apr_errno.h /Users/shaneburrell/freeswitch-svn-real/apr_shm.h /Users/shaneburrell/freeswitch-svn-real/apr_network_io.h /Users/shaneburrell/freeswitch-svn-real/apr_signal.h /Users/shaneburrell/freeswitch-svn-real/apr_user.h /Users/shaneburrell/freeswitch-svn-real/apr_support.h /Users/shaneburrell/freeswitch-svn-real/apr_atomic.h /Users/shaneburrell/freeswitch-svn-real/apr_random.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_cond.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_rwlock.h /Users/shaneburrell/freeswitch-svn-real/apr_getopt.h /Users/shaneburrell/freeswitch-svn-real/apr_inherit.h /Users/shaneburrell/freeswitch-svn-real/apr_strings.h /Users/shaneburrell/freeswitch-svn-real/apr_general.h /Users/shaneburrell/freeswitch-svn-real/apr_proc_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_tables.h /Users/shaneburrell/freeswitch-svn-real/apr_ring.h /Users/shaneburrell/freeswitch-svn-real/apr_file_info.h /Users/shaneburrell/freeswitch-svn-real/apr_allocator.h /Users/shaneburrell/freeswitch-svn-real/apr_portable.h /Users/shaneburrell/freeswitch-svn-real/apr_hash.h /Users/shaneburrell/freeswitch-svn-real/apr_time.h /Users/shaneburrell/freeswitch-svn-real/apr_lib.h > export_vars.c
+
+#awk -f /Users/shaneburrell/freeswitch-svn-real/libs/apr/build/make_exports.awk /Users/shaneburrell/freeswitch-svn-real/apr_thread_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_env.h /Users/shaneburrell/freeswitch-svn-real/apr_poll.h /Users/shaneburrell/freeswitch-svn-real/apr_fnmatch.h /Users/shaneburrell/freeswitch-svn-real/apr_global_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_pools.h /Users/shaneburrell/freeswitch-svn-real/apr_want.h /Users/shaneburrell/freeswitch-svn-real/apr_file_io.h /Users/shaneburrell/freeswitch-svn-real/apr_version.h /Users/shaneburrell/freeswitch-svn-real/apr_mmap.h /Users/shaneburrell/freeswitch-svn-real/apr_dso.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_proc.h /Users/shaneburrell/freeswitch-svn-real/apr_errno.h /Users/shaneburrell/freeswitch-svn-real/apr_shm.h /Users/shaneburrell/freeswitch-svn-real/apr_network_io.h /Users/shaneburrell/freeswitch-svn-real/apr_signal.h /Users/shaneburrell/freeswitch-svn-real/apr_user.h /Users/shaneburrell/freeswitch-svn-real/apr_support.h /Users/shaneburrell/freeswitch-svn-real/apr_atomic.h /Users/shaneburrell/freeswitch-svn-real/apr_random.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_cond.h /Users/shaneburrell/freeswitch-svn-real/apr_thread_rwlock.h /Users/shaneburrell/freeswitch-svn-real/apr_getopt.h /Users/shaneburrell/freeswitch-svn-real/apr_inherit.h /Users/shaneburrell/freeswitch-svn-real/apr_strings.h /Users/shaneburrell/freeswitch-svn-real/apr_general.h /Users/shaneburrell/freeswitch-svn-real/apr_proc_mutex.h /Users/shaneburrell/freeswitch-svn-real/apr_tables.h /Users/shaneburrell/freeswitch-svn-real/apr_ring.h /Users/shaneburrell/freeswitch-svn-real/apr_file_info.h /Users/shaneburrell/freeswitch-svn-real/apr_allocator.h /Users/shaneburrell/freeswitch-svn-real/apr_portable.h /Users/shaneburrell/freeswitch-svn-real/apr_hash.h /Users/shaneburrell/freeswitch-svn-real/apr_time.h /Users/shaneburrell/freeswitch-svn-real/apr_lib.h > exports.c
+#gcc -E -DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I./include -I/Users/shaneburrell/freeswitch-svn-real/arch/unix -I./include/arch/unix -I/Users/shaneburrell/freeswitch-svn-real exports.c | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$/\1/' >> apr.exp
+#gcc -E -DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I./include -I/Users/shaneburrell/freeswitch-svn-real/arch/unix -I./include/arch/unix -I/Users/shaneburrell/freeswitch-svn-real export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$/d' >> apr.exp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Property changes: freeswitch/branches/seven/libs/apr/build
Name: svn:ignore
- apr_rules.out
apr_rules.mk
config.guess
ltmain.sh
libtool.m4
+ apr_rules.out
apr_rules.mk
config.guess
ltmain.sh
libtool.m4
config.sub
install-sh
Modified: freeswitch/branches/seven/libs/apr/build/apr_common.m4 (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/build/apr_common.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/build/apr_common.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -461,7 +461,9 @@
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([#include <stdio.h>
$1
-main()
+#include <stdlib.h>
+
+int main(void)
{
FILE *f=fopen("conftestval","w");
if (!f) exit(1);
@@ -517,7 +519,7 @@
#include <errno.h>
#include <string.h>
#include <stdio.h>
-main()
+int main(void)
{
char buf[1024];
if (strerror_r(ERANGE, buf, sizeof buf) < 1) {
@@ -942,7 +944,7 @@
dnl <sys/types.h> should be available everywhere!
cat > conftest.c <<EOF
#include <sys/types.h>
- int main() { return 0; }
+ int main(void) { return 0; }
EOF
MKDEP="true"
for i in "$CC -MM" "$CC -M" "$CPP -MM" "$CPP -M" "cpp -M"; do
Modified: freeswitch/branches/seven/libs/apr/build/apr_hints.m4 (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/build/apr_hints.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/build/apr_hints.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -35,7 +35,7 @@
dnl Generally, we force the setting of CC, and add flags
dnl to CFLAGS, CPPFLAGS, LIBS and LDFLAGS.
dnl
-AC_DEFUN(APR_PRELOAD, [
+AC_DEFUN([APR_PRELOAD], [
if test "x$apr_preload_done" != "xyes" ; then
apr_preload_done="yes"
@@ -431,7 +431,7 @@
dnl
dnl Allows us to provide a default choice of compiler which
dnl the user can override.
-AC_DEFUN(APR_CC_HINTS, [
+AC_DEFUN([APR_CC_HINTS], [
case "$host" in
*-apple-aux3*)
APR_SETIFNULL(CC, [gcc])
Modified: freeswitch/branches/seven/libs/apr/build/apr_network.m4 (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/build/apr_network.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/build/apr_network.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -25,7 +25,7 @@
dnl can't use getaddrinfo() because we can't get strings
dnl describing the error codes.
dnl
-AC_DEFUN(APR_CHECK_WORKING_GETADDRINFO,[
+AC_DEFUN([APR_CHECK_WORKING_GETADDRINFO],[
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
AC_TRY_RUN( [
#ifdef HAVE_NETDB_H
@@ -41,7 +41,7 @@
#include <sys/socket.h>
#endif
-void main(void) {
+int main(void) {
struct addrinfo hints, *ai;
int error;
@@ -74,7 +74,7 @@
])
dnl Check whether the AI_ADDRCONFIG flag can be used with getaddrinfo
-AC_DEFUN(APR_CHECK_GETADDRINFO_ADDRCONFIG, [
+AC_DEFUN([APR_CHECK_GETADDRINFO_ADDRCONFIG], [
AC_CACHE_CHECK(for working AI_ADDRCONFIG, apr_cv_gai_addrconfig, [
AC_TRY_RUN([
#ifdef HAVE_NETDB_H
@@ -110,7 +110,7 @@
dnl
dnl check for working getnameinfo()
dnl
-AC_DEFUN(APR_CHECK_WORKING_GETNAMEINFO,[
+AC_DEFUN([APR_CHECK_WORKING_GETNAMEINFO],[
AC_CACHE_CHECK(for working getnameinfo, ac_cv_working_getnameinfo,[
AC_TRY_RUN( [
#ifdef HAVE_NETDB_H
@@ -129,7 +129,7 @@
#include <netinet/in.h>
#endif
-void main(void) {
+int main(void) {
struct sockaddr_in sa;
char hbuf[256];
int error;
@@ -165,14 +165,14 @@
dnl
dnl check for negative error codes for getaddrinfo()
dnl
-AC_DEFUN(APR_CHECK_NEGATIVE_EAI,[
+AC_DEFUN([APR_CHECK_NEGATIVE_EAI],[
AC_CACHE_CHECK(for negative error codes for getaddrinfo, ac_cv_negative_eai,[
AC_TRY_RUN( [
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
-void main(void) {
+int main(void) {
if (EAI_ADDRFAMILY < 0) {
exit(0);
}
@@ -197,7 +197,7 @@
dnl
dnl Note that this test is executed too early to see if we have all of
dnl the headers.
-AC_DEFUN(APR_CHECK_GETHOSTBYNAME_R_STYLE,[
+AC_DEFUN([APR_CHECK_GETHOSTBYNAME_R_STYLE],[
dnl Try and compile a glibc2 gethostbyname_r piece of code, and set the
dnl style of the routines to glibc2 on success
@@ -257,7 +257,7 @@
dnl
dnl see if TCP_NODELAY setting is inherited from listening sockets
dnl
-AC_DEFUN(APR_CHECK_TCP_NODELAY_INHERITED,[
+AC_DEFUN([APR_CHECK_TCP_NODELAY_INHERITED],[
AC_CACHE_CHECK(if TCP_NODELAY setting is inherited from listening sockets, ac_cv_tcp_nodelay_inherited,[
AC_TRY_RUN( [
#include <stdio.h>
@@ -425,7 +425,7 @@
dnl
dnl see if O_NONBLOCK setting is inherited from listening sockets
dnl
-AC_DEFUN(APR_CHECK_O_NONBLOCK_INHERITED,[
+AC_DEFUN([APR_CHECK_O_NONBLOCK_INHERITED],[
AC_CACHE_CHECK(if O_NONBLOCK setting is inherited from listening sockets, ac_cv_o_nonblock_inherited,[
AC_TRY_RUN( [
#include <stdio.h>
@@ -538,7 +538,7 @@
dnl
dnl check for socklen_t, fall back to unsigned int
dnl
-AC_DEFUN(APR_CHECK_SOCKLEN_T,[
+AC_DEFUN([APR_CHECK_SOCKLEN_T],[
AC_CACHE_CHECK(for socklen_t, ac_cv_socklen_t,[
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
@@ -562,7 +562,7 @@
])
-AC_DEFUN(APR_CHECK_INET_ADDR,[
+AC_DEFUN([APR_CHECK_INET_ADDR],[
AC_CACHE_CHECK(for inet_addr, ac_cv_func_inet_addr,[
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
@@ -588,7 +588,7 @@
])
-AC_DEFUN(APR_CHECK_INET_NETWORK,[
+AC_DEFUN([APR_CHECK_INET_NETWORK],[
AC_CACHE_CHECK(for inet_network, ac_cv_func_inet_network,[
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
@@ -614,7 +614,7 @@
])
dnl Check for presence of struct sockaddr_storage.
-AC_DEFUN(APR_CHECK_SOCKADDR_STORAGE,[
+AC_DEFUN([APR_CHECK_SOCKADDR_STORAGE],[
AC_CACHE_CHECK(for sockaddr_storage, apr_cv_define_sockaddr_storage,[
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
@@ -636,7 +636,7 @@
])
dnl Check for presence of struct sockaddr_in6.
-AC_DEFUN(APR_CHECK_SOCKADDR_IN6,[
+AC_DEFUN([APR_CHECK_SOCKADDR_IN6],[
AC_CACHE_CHECK(for sockaddr_in6, ac_cv_define_sockaddr_in6,[
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
@@ -664,7 +664,7 @@
dnl
dnl APR_H_ERRNO_COMPILE_CHECK
dnl
-AC_DEFUN(APR_H_ERRNO_COMPILE_CHECK,[
+AC_DEFUN([APR_H_ERRNO_COMPILE_CHECK],[
if test x$1 != x; then
CPPFLAGS="-D$1 $CPPFLAGS"
fi
@@ -750,7 +750,7 @@
dnl
dnl checks which flags are necessary for <netdb.h> to define h_errno
dnl
-AC_DEFUN(APR_CHECK_H_ERRNO_FLAG,[
+AC_DEFUN([APR_CHECK_H_ERRNO_FLAG],[
AC_MSG_CHECKING([for h_errno in netdb.h])
AC_CACHE_VAL(ac_cv_h_errno_cppflags,[
APR_H_ERRNO_COMPILE_CHECK
@@ -778,7 +778,7 @@
])
-AC_DEFUN(APR_EBCDIC,[
+AC_DEFUN([APR_EBCDIC],[
AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[
AC_TRY_RUN( [
int main(void) {
Modified: freeswitch/branches/seven/libs/apr/build/apr_threads.m4 (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/build/apr_threads.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/build/apr_threads.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -26,7 +26,7 @@
dnl pthreads is not available.
dnl Turn off warnings if we're using gcc.
dnl
-AC_DEFUN(APR_CHECK_PTHREADS_H, [
+AC_DEFUN([APR_CHECK_PTHREADS_H], [
if test "$GCC" = "yes"; then
SAVE_FL="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -w"
@@ -41,7 +41,7 @@
dnl
dnl APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS
dnl
-AC_DEFUN(APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS, [
+AC_DEFUN([APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS], [
AC_CACHE_CHECK(whether pthread_getspecific takes two arguments, ac_cv_pthread_getspecific_two_args,[
AC_TRY_COMPILE([
#include <pthread.h>
@@ -65,7 +65,7 @@
dnl
dnl APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG
dnl
-AC_DEFUN(APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG, [
+AC_DEFUN([APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG], [
AC_CACHE_CHECK(whether pthread_attr_getdetachstate takes one argument, ac_cv_pthread_attr_getdetachstate_one_arg,[
AC_TRY_COMPILE([
#include <pthread.h>
@@ -91,7 +91,7 @@
dnl Try running a program which uses pthreads, executing the
dnl actions-if-success commands on success.
dnl
-AC_DEFUN(APR_PTHREADS_TRY_RUN, [
+AC_DEFUN([APR_PTHREADS_TRY_RUN], [
AC_TRY_RUN( [
#include <pthread.h>
#include <stddef.h>
@@ -100,7 +100,7 @@
return data;
}
-int main() {
+int main(void) {
pthread_t thd;
pthread_mutexattr_t mattr;
pthread_once_t once_init = PTHREAD_ONCE_INIT;
@@ -122,7 +122,7 @@
dnl Try to find a way to enable POSIX threads. Sets the
dnl pthreads_working variable to "yes" on success.
dnl
-AC_DEFUN(APR_PTHREADS_CHECK,[
+AC_DEFUN([APR_PTHREADS_CHECK],[
AC_CACHE_CHECK([for CFLAGS needed for pthreads], [apr_cv_pthreads_cflags],
[apr_ptc_cflags=$CFLAGS
@@ -182,12 +182,12 @@
dnl the checks for threading support so that they can restored if the
dnl result is not what the caller wanted.
dnl
-AC_DEFUN(APR_PTHREADS_CHECK_SAVE, [
+AC_DEFUN([APR_PTHREADS_CHECK_SAVE], [
apr_pthsv_CFLAGS="$CFLAGS"
apr_pthsv_LIBS="$LIBS"
])dnl
-AC_DEFUN(APR_PTHREADS_CHECK_RESTORE, [
+AC_DEFUN([APR_PTHREADS_CHECK_RESTORE], [
CFLAGS="$apr_pthsv_CFLAGS"
LIBS="$apr_pthsv_LIBS"
])dnl
@@ -195,7 +195,7 @@
dnl
dnl APR_CHECK_SIGWAIT_ONE_ARG
dnl
-AC_DEFUN(APR_CHECK_SIGWAIT_ONE_ARG,[
+AC_DEFUN([APR_CHECK_SIGWAIT_ONE_ARG],[
AC_CACHE_CHECK(whether sigwait takes one argument,ac_cv_sigwait_one_arg,[
AC_TRY_COMPILE([
#if defined(__NETBSD__) || defined(DARWIN)
@@ -224,11 +224,15 @@
dnl Check for recursive mutex support (per SUSv3).
AC_DEFUN([APR_CHECK_PTHREAD_RECURSIVE_MUTEX], [
AC_CACHE_CHECK([for recursive mutex support], [apr_cv_mutex_recursive],
-[AC_TRY_RUN([#include <sys/types.h>
+[AC_TRY_RUN([
+#ifndef __sun
+#define _XOPEN_SOURCE 600
+#endif
+#include <sys/types.h>
#include <pthread.h>
#include <stdlib.h>
-int main() {
+int main(void) {
pthread_mutexattr_t attr;
pthread_mutex_t m;
Deleted: freeswitch/branches/seven/libs/apr/build/config.sub
Modified: freeswitch/branches/seven/libs/apr/configure.in (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/configure.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/configure.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -200,8 +200,8 @@
if test "x$use_libtool" = "xyes"; then
lt_compile='$(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -o $@ -c $< && touch $@'
- LT_VERSION="-version-info `$get_version libtool $version_hdr APR`"
- link="\$(LIBTOOL) \$(LTFLAGS) --mode=link \$(LT_LDFLAGS) \$(COMPILE) ${LT_VERSION} \$(ALL_LDFLAGS) -o \$@"
+ lt_version="-version-info `$get_version libtool $version_hdr APR`"
+ link="\$(LIBTOOL) \$(LTFLAGS) --mode=link \$(LT_LDFLAGS) \$(COMPILE) ${lt_version} \$(ALL_LDFLAGS) -o \$@"
so_ext='lo'
lib_target='-rpath $(libdir) $(OBJECTS)'
export_lib_target='-rpath \$(libdir) \$(OBJECTS)'
@@ -455,7 +455,7 @@
#include <stdio.h>
#include <unistd.h>
-void main(void)
+int main(void)
{
int fd, ret = 0;
struct stat64 st;
Modified: freeswitch/branches/seven/libs/apr/include/apr_pools.h (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/include/apr_pools.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/include/apr_pools.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -411,7 +411,18 @@
*/
APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag);
+#if APR_HAS_THREADS
+/**
+ * Add a mutex to a pool to make it suitable to use from multiple threads.
+ * @param pool The pool to add the mutex to
+ * @param mutex The mutex
+ * @remark The mutex does not protect the destroy operation just the low level allocs.
+ */
+APR_DECLARE(void) apr_pool_mutex_set(apr_pool_t *pool,
+ apr_thread_mutex_t *mutex);
+#endif
+
/*
* User data management
*/
@@ -435,6 +446,7 @@
* key names is a typical way to help ensure this uniqueness.
*
*/
+
APR_DECLARE(apr_status_t) apr_pool_userdata_set(
const void *data,
const char *key,
Modified: freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_proc_mutex.h (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_proc_mutex.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_proc_mutex.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -17,6 +17,12 @@
#ifndef PROC_MUTEX_H
#define PROC_MUTEX_H
+#ifndef __sun
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+#endif
+#endif
+
#include "apr.h"
#include "apr_private.h"
#include "apr_general.h"
Modified: freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_thread_mutex.h (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_thread_mutex.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/include/arch/unix/apr_arch_thread_mutex.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -17,6 +17,12 @@
#ifndef THREAD_MUTEX_H
#define THREAD_MUTEX_H
+#ifndef __sun
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+#endif
+#endif
+
#include "apr.h"
#include "apr_private.h"
#include "apr_general.h"
Modified: freeswitch/branches/seven/libs/apr/memory/unix/apr_pools.c (14471 => 14472)
--- freeswitch/branches/seven/libs/apr/memory/unix/apr_pools.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr/memory/unix/apr_pools.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -449,7 +449,9 @@
apr_abortfunc_t abort_fn;
apr_hash_t *user_data;
const char *tag;
-
+#if APR_HAS_THREADS
+ apr_thread_mutex_t *user_mutex;
+#endif
#if !APR_POOL_DEBUG
apr_memnode_t *active;
apr_memnode_t *self; /* The node containing the pool itself */
@@ -471,6 +473,7 @@
#endif /* APR_POOL_DEBUG */
#ifdef NETWARE
apr_os_proc_t owner_proc;
+
#endif /* defined(NETWARE) */
};
@@ -594,9 +597,11 @@
APR_DECLARE(void *) apr_palloc(apr_pool_t *pool, apr_size_t size)
{
apr_memnode_t *active, *node;
- void *mem;
+ void *mem = NULL;
apr_size_t free_index;
-
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_lock(pool->user_mutex);
+#endif
size = APR_ALIGN_DEFAULT(size);
active = pool->active;
@@ -605,7 +610,7 @@
mem = active->first_avail;
active->first_avail += size;
- return mem;
+ goto end;
}
node = active->next;
@@ -617,7 +622,8 @@
if (pool->abort_fn)
pool->abort_fn(APR_ENOMEM);
- return NULL;
+ mem = NULL;
+ goto end;
}
}
@@ -636,7 +642,7 @@
active->free_index = (APR_UINT32_TRUNC_CAST)free_index;
node = active->next;
if (free_index >= node->free_index)
- return mem;
+ goto end;
do {
node = node->next;
@@ -646,6 +652,10 @@
list_remove(active);
list_insert(active, node);
+ end:
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_unlock(pool->user_mutex);
+#endif
return mem;
}
@@ -678,7 +688,9 @@
APR_DECLARE(void) apr_pool_clear(apr_pool_t *pool)
{
apr_memnode_t *active;
-
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_lock(pool->user_mutex);
+#endif
/* Destroy the subpools. The subpools will detach themselves from
* this pool thus this loop is safe and easy.
*/
@@ -704,14 +716,27 @@
active->first_avail = pool->self_first_avail;
if (active->next == active)
- return;
+ goto end;
*active->ref = NULL;
allocator_free(pool->allocator, active->next);
active->next = active;
active->ref = &active->next;
+
+ end:
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_unlock(pool->user_mutex);
+#endif
}
+#if APR_HAS_THREADS
+APR_DECLARE(void) apr_pool_mutex_set(apr_pool_t *pool,
+ apr_thread_mutex_t *mutex)
+{
+ pool->user_mutex = mutex;
+}
+#endif
+
APR_DECLARE(void) apr_pool_destroy(apr_pool_t *pool)
{
apr_memnode_t *active;
@@ -820,7 +845,9 @@
pool->subprocesses = NULL;
pool->user_data = NULL;
pool->tag = NULL;
-
+#if APR_HAS_THREADS
+ pool->user_mutex = NULL;
+#endif
#ifdef NETWARE
pool->owner_proc = (apr_os_proc_t)getnlmhandle();
#endif /* defined(NETWARE) */
@@ -963,6 +990,10 @@
apr_memnode_t *active, *node;
apr_size_t free_index;
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_lock(pool->user_mutex);
+#endif
+
ps.node = active = pool->active;
ps.pool = pool;
ps.vbuff.curpos = ps.node->first_avail;
@@ -981,7 +1012,8 @@
pool->abort_fn(APR_ENOMEM);
}
- return NULL;
+ strp = NULL;
+ goto end;
}
}
@@ -989,7 +1021,8 @@
if (pool->abort_fn)
pool->abort_fn(APR_ENOMEM);
- return NULL;
+ strp = NULL;
+ goto end;
}
strp = ps.vbuff.curpos;
@@ -1006,8 +1039,8 @@
/*
* Link the node in if it's a new one
*/
- if (!ps.got_a_new_node)
- return strp;
+ if (!ps.got_a_new_node)
+ goto end;
active = pool->active;
node = ps.node;
@@ -1025,7 +1058,7 @@
node = active->next;
if (free_index >= node->free_index)
- return strp;
+ goto end;
do {
node = node->next;
@@ -1035,6 +1068,12 @@
list_remove(active);
list_insert(active, node);
+ end:
+
+#if APR_HAS_THREADS
+ if (pool->user_mutex) apr_thread_mutex_unlock(pool->user_mutex);
+#endif
+
return strp;
}
Property changes: freeswitch/branches/seven/libs/apr-util
Name: svn:ignore
- a.out.dSYM
configure
autom4te.cache
exports.c
config.log
.complete
apu-config.out
apr-util.pc
.libs
Makefile
config.nice
export_vars.sh
apu-1-config
config.status
.make.dirs
export_vars.c
aprutil.exp
+ a.out.dSYM
configure
autom4te.cache
exports.c
config.log
.complete
apu-config.out
apr-util.pc
.libs
Makefile
config.nice
export_vars.sh
apu-1-config
config.status
.make.dirs
export_vars.c
aprutil.exp
configure.lineno
Modified: freeswitch/branches/seven/libs/apr-util/.update (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/.update 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/.update 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1 +1 @@
-Thu May 8 18:41:57 EDT 2008
+Wed May 13 10:54:08 CDT 2009
Copied: freeswitch/branches/seven/libs/apr-util/CMakeLists.txt (from rev 14471, freeswitch/trunk/libs/apr-util/CMakeLists.txt) (0 => 14472)
--- freeswitch/branches/seven/libs/apr-util/CMakeLists.txt (rev 0)
+++ freeswitch/branches/seven/libs/apr-util/CMakeLists.txt 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 2.6)
+
+INCLUDE_DIRECTORIES(include/)
+
+add_definitions(-DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK)
+INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/libs/apr-util/include ${CMAKE_SOURCE_DIR}/libs/apr-util/include/private ${CMAKE_SOURCE_DIR}/libs/apr/include)
+
+
+SET (apr-util_SRCS
+crypto/apr_md5.c
+crypto/uuid.c
+crypto/apr_sha1.c
+crypto/getuuid.c
+crypto/apr_md4.c
+encoding/apr_base64.c
+hooks/apr_hooks.c
+misc/apr_reslist.c
+misc/apr_rmm.c
+misc/apr_date.c
+misc/apu_version.c
+misc/apr_queue.c
+uri/apr_uri.c
+strmatch/apr_strmatch.c
+xlate/xlate.c
+)
+
+LINK_LIBRARIES ("-liconv -ldl -lpthread")
+
+ADD_LIBRARY(apr-util STATIC ${apr-util_SRCS})
+
+
+
+
+
+
+
Modified: freeswitch/branches/seven/libs/apr-util/build-outputs.mk (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/build-outputs.mk 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/build-outputs.mk 2009-08-09 18:53:22 UTC (rev 14472)
@@ -13,10 +13,11 @@
misc/apu_version.lo: misc/apu_version.c .make.dirs include/apu_version.h
misc/apr_queue.lo: misc/apr_queue.c .make.dirs include/apr_queue.h
uri/apr_uri.lo: uri/apr_uri.c .make.dirs include/apr_uri.h
+xml/apr_xml.lo: xml/apr_xml.c .make.dirs include/apr_xml.h include/apr_xlate.h
strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apr_strmatch.h
xlate/xlate.lo: xlate/xlate.c .make.dirs include/apr_xlate.h
-OBJECTS_all = crypto/apr_md5.lo crypto/uuid.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/apr_md4.lo encoding/apr_base64.lo hooks/apr_hooks.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apr_date.lo misc/apu_version.lo misc/apr_queue.lo uri/apr_uri.lo strmatch/apr_strmatch.lo xlate/xlate.lo
+OBJECTS_all = crypto/apr_md5.lo crypto/uuid.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/apr_md4.lo encoding/apr_base64.lo hooks/apr_hooks.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apr_date.lo misc/apu_version.lo misc/apr_queue.lo uri/apr_uri.lo xml/apr_xml.lo strmatch/apr_strmatch.lo xlate/xlate.lo
OBJECTS_unix = $(OBJECTS_all)
@@ -28,11 +29,11 @@
OBJECTS_os390 = $(OBJECTS_all)
-HEADERS = $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_sha1.h
+HEADERS = $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_xml.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_sha1.h
-SOURCE_DIRS = encoding hooks misc crypto uri strmatch xlate $(EXTRA_SOURCE_DIRS)
+SOURCE_DIRS = xml encoding hooks misc crypto uri strmatch xlate $(EXTRA_SOURCE_DIRS)
-BUILD_DIRS = crypto encoding hooks misc strmatch uri xlate
+BUILD_DIRS = crypto encoding hooks misc strmatch uri xlate xml
.make.dirs: $(srcdir)/build-outputs.mk
@for d in $(BUILD_DIRS); do test -d $$d || mkdir $$d; done
Modified: freeswitch/branches/seven/libs/apr-util/build.conf (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/build.conf 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/build.conf 2009-08-09 18:53:22 UTC (rev 14472)
@@ -15,10 +15,10 @@
ldap/*.c
misc/*.c
uri/apr_uri.c
+ xml/*.c
strmatch/*.c
xlate/*.c
dbd/*.c
-# xml/*.c
# we have no platform-specific subdirs
platform_dirs =
Modified: freeswitch/branches/seven/libs/apr-util/configure.gnu (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/configure.gnu 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/configure.gnu 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,3 @@
#! /bin/sh
-./configure "$@" --with-apr=../apr --disable-shared --with-pic --without-sqlite2 --without-sqlite3
+./configure "$@" --with-apr=../apr --disable-shared --with-pic --without-sqlite2 --without-sqlite3 --with-expat=builtin
Modified: freeswitch/branches/seven/libs/apr-util/configure.in (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/configure.in 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/configure.in 2009-08-09 18:53:22 UTC (rev 14472)
@@ -122,7 +122,7 @@
APU_CHECK_DBD_MYSQL
APU_CHECK_DBD_SQLITE3
APU_CHECK_DBD_SQLITE2
-#APU_FIND_EXPAT
+APU_FIND_EXPAT
APU_FIND_ICONV
AC_SEARCH_LIBS(crypt, crypt ufc)
Modified: freeswitch/branches/seven/libs/apr-util/xml/expat/buildconf.sh (14471 => 14472)
--- freeswitch/branches/seven/libs/apr-util/xml/expat/buildconf.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/apr-util/xml/expat/buildconf.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -58,6 +58,8 @@
${AUTOHEADER:-autoheader} 2>&1 | grep -v "$cross_compile_warning"
echo "Creating configure ..."
+${ACLOCAL:-aclocal}
+
### do some work to toss config.cache?
${AUTOCONF:-autoconf} 2>&1 | grep -v "$cross_compile_warning"
Property changes: freeswitch/branches/seven/libs/curl
Name: svn:ignore
- autom4te.cache
Makefile.in
configure
config.log
.complete
libcurl.pc
config.status
libtool
curl-config
Makefile
depcomp
compile
config.guess
ltmain.sh
config.sub
missing
aclocal.m4
install-sh
docs
tests
+ autom4te.cache
Makefile.in
configure
config.log
.complete
libcurl.pc
config.status
libtool
curl-config
Makefile
depcomp
compile
config.guess
ltmain.sh
config.sub
missing
aclocal.m4
install-sh
docs
tests
configure.lineno
Deleted: freeswitch/branches/seven/libs/curl/mkinstalldirs
Property changes: freeswitch/branches/seven/libs/esl
Name: svn:ignore
- Debug
*.user
Release
+ Debug
*.user
Release
fs_cli
testserver
testclient
x64
Copied: freeswitch/branches/seven/libs/esl/ESL.i (from rev 14471, freeswitch/trunk/libs/esl/ESL.i) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ESL.i (rev 0)
+++ freeswitch/branches/seven/libs/esl/ESL.i 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,14 @@
+%{
+#include "esl.h"
+#include "esl_oop.h"
+%}
+
+%newobject ESLconnection::sendRecv;
+%newobject ESLconnection::api;
+%newobject ESLconnection::bgapi;
+%newobject ESLconnection::getInfo;
+%newobject ESLconnection::filter;
+%newobject ESLconnection::recvEvent;
+%newobject ESLconnection::recvEventTimed;
+
+%include "esl_oop.h"
Modified: freeswitch/branches/seven/libs/esl/Makefile (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/Makefile 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,16 +1,22 @@
-INCS=-Isrc/include
+PWD=$(shell pwd)
+INCS=-I$(PWD)/src/include
LIBEDIT_DIR=../../libs/libedit
DEBUG=-g -ggdb
+BASE_FLAGS=$(INCS) -DHAVE_EDITLINE $(DEBUG) -I$(LIBEDIT_DIR)/src/ -fPIC
PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
-CFLAGS=$(INCS) -DHAVE_EDITLINE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY)
+CFLAGS=$(BASE_FLAGS) $(PICKY)
+CXXFLAGS=$(BASE_FLAGS) -Wall -Werror -Wno-unused-variable
MYLIB=libesl.a
LIBS=-lncurses -lpthread -lesl
LDFLAGS=-L.
OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o
-SRC=src/esl.c src/esl_event.c src/esl_threadmutex.c src/esl_config.c
-HEADERS=src/include/esl_config.h src/include/esl_event.h src/include/esl.h src/include/esl_threadmutex.h
+SRC=src/esl.c src/esl_event.c src/esl_threadmutex.c src/esl_config.c src/esl_oop.cpp
+HEADERS=src/include/esl_config.h src/include/esl_event.h src/include/esl.h src/include/esl_threadmutex.h src/include/esl_oop.h
+SOLINK=-shared -Xlinker -x
+# comment the next line to disable c++ (no swig mods for you then)
+OBJS += src/esl_oop.o
-all: $(MYLIB) fs_cli testclient testserver
+all: $(MYLIB) fs_cli testclient testserver ivrd
$(MYLIB): $(OBJS) $(HEADERS) $(SRC)
ar rcs $(MYLIB) $(OBJS)
@@ -19,6 +25,9 @@
testserver: $(MYLIB) testserver.c
$(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS)
+ivrd: $(MYLIB) ivrd.c
+ $(CC) $(CC_CFLAGS) $(CFLAGS) ivrd.c -o ivrd $(LDFLAGS) $(LIBS)
+
testclient: $(MYLIB) testclient.c
$(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient $(LDFLAGS) $(LIBS)
@@ -28,6 +37,53 @@
%.o: %.c
$(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@
+%.o: %.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) -c $< -o $@
+
clean:
- rm -f *.o src/*.o testclient testserver fs_cli libesl.a *~ src/*~ src/include/*~
+ rm -f *.o src/*.o testclient testserver ivrd fs_cli libesl.a *~ src/*~ src/include/*~
+ $(MAKE) -C perl clean
+ $(MAKE) -C php clean
+ $(MAKE) -C lua clean
+ $(MAKE) -C python clean
+ $(MAKE) -C ruby clean
+ $(MAKE) -C java clean
+reswig: swigclean
+ $(MAKE) -C perl reswig
+ $(MAKE) -C php reswig
+ $(MAKE) -C lua reswig
+ $(MAKE) -C python reswig
+ $(MAKE) -C ruby reswig
+ $(MAKE) -C java reswig
+
+swigclean: clean
+ $(MAKE) -C perl swigclean
+ $(MAKE) -C php swigclean
+ $(MAKE) -C lua swigclean
+ $(MAKE) -C python swigclean
+ $(MAKE) -C ruby swigclean
+ $(MAKE) -C java swigclean
+
+perlmod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C perl
+
+phpmod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C php
+
+luamod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C lua
+
+pymod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C python
+
+rubymod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C ruby
+
+javamod: $(MYLIB)
+ $(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C java
+
+phpmod-install: phpmod
+ $(MAKE) -C php install
+
+everymod: perlmod phpmod luamod pymod rubymod javamod
Modified: freeswitch/branches/seven/libs/esl/fs_cli.2008.vcproj (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/fs_cli.2008.vcproj 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/fs_cli.2008.vcproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -12,6 +12,9 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -72,7 +75,7 @@
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/fs_cli.pdb"
SubSystem="1"
- RandomizedBaseAddress="1"
+ RandomizedBaseAddress="2"
DataExecutionPrevention="0"
TargetMachine="1"
/>
@@ -99,6 +102,88 @@
/>
</Configuration>
<Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)getopt";"$(ProjectDir)src/include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ESL_DECLARE_STATIC"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4100;6053;4706"
+ EnablePREfast="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="Ws2_32.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/fs_cli.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="2"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Release|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
@@ -152,7 +237,7 @@
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
+ RandomizedBaseAddress="2"
DataExecutionPrevention="0"
TargetMachine="1"
/>
@@ -178,6 +263,86 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(ProjectDir)getopt";"$(ProjectDir)src/include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ESL_DECLARE_STATIC"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4100;6053;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="Ws2_32.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/fs_cli.pdb"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="2"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
Modified: freeswitch/branches/seven/libs/esl/fs_cli.c (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/fs_cli.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/fs_cli.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -138,6 +138,24 @@
return console_fnkey_pressed(12);
}
+static unsigned char console_eofkey(EditLine * el, int ch)
+{
+ LineInfo *line;
+ /* only exit if empty line */
+ line = (LineInfo *)el_line(el);
+ if (line->buffer == line->lastchar) {
+ printf("/exit\n\n");
+ running = thread_running = 0;
+ return CC_EOF;
+ } else {
+ if (line->cursor != line->lastchar) {
+ line->cursor++;
+ el_deletestr(el, 1);
+ }
+ return CC_REDISPLAY;
+ }
+}
+
#endif
static void handle_SIGINT(int sig)
@@ -146,6 +164,11 @@
return;
}
+static void handle_SIGQUIT(int sig)
+{
+ fprintf(stdout, "Caught SIGQUIT\n");
+ return;
+}
#ifdef WIN32
static HANDLE hStdout;
@@ -164,10 +187,10 @@
printf(" -?,-h --help Usage Information\n");
printf(" -H, --host=hostname Host to connect\n");
printf(" -P, --port=port Port to connect (1 - 65535)\n");
- printf(" -p, --password=FILENAME Password\n");
+ printf(" -p, --password=password Password\n");
printf(" -x, --execute=command Execute Command and Exit\n");
printf(" -l, --loglevel=command Log Level\n");
- printf(" -q, --quiet Disable logging\n");
+ printf(" -q, --quiet Disable logging\n");
printf(" -d, --debug=level Debug Level (0 - 7)\n\n");
return 1;
}
@@ -180,8 +203,7 @@
thread_running = 1;
while(thread_running && handle->connected) {
- esl_status_t status = esl_recv_timed(handle, 10);
-
+ esl_status_t status = esl_recv_event_timed(handle, 10, 1, NULL);
if (status == ESL_FAIL) {
esl_log(ESL_LOG_WARNING, "Disconnected.\n");
running = thread_running = 0;
@@ -227,7 +249,11 @@
}
if (!known) {
- printf("INCOMING DATA [%s]\n%s", type, handle->last_event->body);
+ char *foo;
+ printf("INCOMING DATA [%s]\n%s\n", type, handle->last_event->body ? handle->last_event->body : "");
+ esl_event_serialize(handle->last_event, &foo, ESL_FALSE);
+ printf("RECV EVENT\n%s\n", foo);
+ free(foo);
}
}
}
@@ -379,7 +405,8 @@
"* FreeSWITCH (http://www.freeswitch.org) *\n"
"* Brought to you by ClueCon http://www.cluecon.com/ *\n"
"*****************************************************\n"
- "\n\n"
+ "\n"
+ "Type /help <enter> to see a list of commands\n\n\n"
);
}
@@ -462,7 +489,9 @@
}
signal(SIGINT, handle_SIGINT);
-
+#ifdef SIGQUIT
+ signal(SIGQUIT, handle_SIGQUIT);
+#endif
esl_global_set_default_logger(6); /* default debug level to 6 (info) */
for(;;) {
@@ -619,7 +648,7 @@
}
if (esl_connect(&handle, profile->host, profile->port, profile->pass)) {
- esl_global_set_default_logger(3);
+ esl_global_set_default_logger(7);
esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err);
return -1;
}
@@ -659,6 +688,8 @@
el_set(el, EL_ADDFN, "f11-key", "F11 KEY PRESS", console_f11key);
el_set(el, EL_ADDFN, "f12-key", "F12 KEY PRESS", console_f12key);
+ el_set(el, EL_ADDFN, "EOF-key", "EOF (^D) KEY PRESS", console_eofkey);
+
el_set(el, EL_BIND, "\033OP", "f1-key", NULL);
el_set(el, EL_BIND, "\033OQ", "f2-key", NULL);
el_set(el, EL_BIND, "\033OR", "f3-key", NULL);
@@ -678,6 +709,7 @@
el_set(el, EL_BIND, "\033[23~", "f11-key", NULL);
el_set(el, EL_BIND, "\033[24~", "f12-key", NULL);
+ el_set(el, EL_BIND, "\004", "EOF-key", NULL);
if (myhistory == 0) {
esl_log(ESL_LOG_ERROR, "history could not be initialized\n");
@@ -688,6 +720,7 @@
el_set(el, EL_HIST, history, myhistory);
history(myhistory, &ev, H_LOAD, hfile);
+ el_source(el, NULL);
#endif
#ifdef WIN32
@@ -705,6 +738,7 @@
print_banner(stdout);
esl_log(ESL_LOG_INFO, "FS CLI Ready.\nenter /help for a list of commands.\n");
+ printf("%s\n", handle.last_sr_reply);
while (running) {
Copied: freeswitch/branches/seven/libs/esl/ivrd.c (from rev 14471, freeswitch/trunk/libs/esl/ivrd.c) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ivrd.c (rev 0)
+++ freeswitch/branches/seven/libs/esl/ivrd.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2009, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <esl.h>
+
+
+static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr)
+{
+ esl_handle_t handle = {{0}};
+ char path_buffer[1024] = { 0 };
+ const char *path;
+
+ if (fork()) {
+ close(client_sock);
+ return;
+ }
+
+
+ esl_attach_handle(&handle, client_sock, addr);
+
+ if (!(path = esl_event_get_header(handle.info_event, "variable_ivr_path"))) {
+ esl_disconnect(&handle);
+ esl_log(ESL_LOG_ERROR, "Missing ivr_path param!\n");
+ exit(0);
+ }
+
+ strncpy(path_buffer, path, sizeof(path_buffer) - 1);
+
+ /* hotwire the socket to STDIN/STDOUT */
+ dup2(client_sock, STDIN_FILENO);
+ dup2(client_sock, STDOUT_FILENO);
+
+ /* close the handle but leak the socket on purpose cos the child will need it open */
+ handle.sock = -1;
+ esl_disconnect(&handle);
+
+ execl(path_buffer, path_buffer, NULL);
+ //system(path_buffer);
+ close(client_sock);
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+ char *ip = NULL;
+ int port = 0;
+
+ for (i = 1; i + 1 < argc; ) {
+ if (!strcasecmp(argv[i], "-h")) {
+ ip = argv[++i];
+ } else if (!strcasecmp(argv[i], "-p")) {
+ port = atoi(argv[++i]);
+ } else {
+ i++;
+ }
+ }
+
+ if (!(ip && port)) {
+ fprintf(stderr, "Usage %s -h <host> -p <port>\n", argv[0]);
+ return -1;
+ }
+
+ signal(SIGCHLD, SIG_IGN);
+
+ esl_listen(ip, port, mycallback);
+
+ return 0;
+}
Copied: freeswitch/branches/seven/libs/esl/java (from rev 14471, freeswitch/trunk/libs/esl/java)
Deleted: freeswitch/branches/seven/libs/esl/java/Makefile
Copied: freeswitch/branches/seven/libs/esl/java/Makefile (from rev 14471, freeswitch/trunk/libs/esl/java/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,25 @@
+LOCAL_CFLAGS=-I../src/include -I/usr/java/jdk1.6.0_14/include -I/usr/java/jdk1.6.0_14/include/linux
+GCC_WARNING_JUNK=-w
+CLASSES=org/freeswitch/esl/*
+
+all: esl.jar
+
+esl_wrap.cpp:
+ swig -module esl -java -c++ $(LOCAL_CFLAGS) -package org.freeswitch.esl -outdir org/freeswitch/esl -o esl_wrap.cpp ../ESL.i
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(LOCAL_CFLAGS) $(CXXFLAGS) $(GCC_WARNING_JUNK) $(PERL_INC) -c esl_wrap.cpp -o esl_wrap.o
+
+esl.jar: esl_wrap.o
+ mkdir -p classes
+ javac -sourcepath org -d classes $(CLASSES)
+ jar cf esl.jar -C classes org
+
+clean:
+ rm -f *.o *.so *~ *.jar
+
+swigclean:
+ rm -f esl_wrap.*
+
+reswig: swigclean esl_wrap.cpp
+
Copied: freeswitch/branches/seven/libs/esl/java/classes (from rev 14471, freeswitch/trunk/libs/esl/java/classes)
Deleted: freeswitch/branches/seven/libs/esl/java/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/java/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/java/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1034 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+
+/* Fix for jlong on some versions of gcc on Windows */
+#if defined(__GNUC__) && !defined(__INTELC__)
+ typedef long long __int64;
+#endif
+
+/* Fix for jlong on 64-bit x86 Solaris */
+#if defined(__x86_64)
+# ifdef _LP64
+# undef _LP64
+# endif
+#endif
+
+#include <jni.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Support for throwing Java exceptions */
+typedef enum {
+ SWIG_JavaOutOfMemoryError = 1,
+ SWIG_JavaIOException,
+ SWIG_JavaRuntimeException,
+ SWIG_JavaIndexOutOfBoundsException,
+ SWIG_JavaArithmeticException,
+ SWIG_JavaIllegalArgumentException,
+ SWIG_JavaNullPointerException,
+ SWIG_JavaDirectorPureVirtual,
+ SWIG_JavaUnknownError
+} SWIG_JavaExceptionCodes;
+
+typedef struct {
+ SWIG_JavaExceptionCodes code;
+ const char *java_exception;
+} SWIG_JavaExceptions_t;
+
+
+static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
+ jclass excep;
+ static const SWIG_JavaExceptions_t java_exceptions[] = {
+ { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
+ { SWIG_JavaIOException, "java/io/IOException" },
+ { SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
+ { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
+ { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
+ { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
+ { SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
+ { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" },
+ { SWIG_JavaUnknownError, "java/lang/UnknownError" },
+ { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } };
+ const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
+
+ while (except_ptr->code != code && except_ptr->code)
+ except_ptr++;
+
+ jenv->ExceptionClear();
+ excep = jenv->FindClass(except_ptr->java_exception);
+ if (excep)
+ jenv->ThrowNew(excep, msg);
+}
+
+
+/* Contract support */
+
+#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1event_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = *(esl_event_t **)&jarg2;
+ if (arg1) (arg1)->event = arg2;
+
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1event_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jlong jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (esl_event_t *) ((arg1)->event);
+ *(esl_event_t **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1serialized_1string_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ {
+ if (arg1->serialized_string) delete [] arg1->serialized_string;
+ if (arg2) {
+ arg1->serialized_string = (char *) (new char[strlen((const char *)arg2)+1]);
+ strcpy((char *)arg1->serialized_string, (const char *)arg2);
+ } else {
+ arg1->serialized_string = 0;
+ }
+ }
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1serialized_1string_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (char *) ((arg1)->serialized_string);
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ return jresult;
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1mine_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = (int)jarg2;
+ if (arg1) (arg1)->mine = arg2;
+
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1mine_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jint jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (int) ((arg1)->mine);
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_new_1ESLevent_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jstring jarg1, jstring jarg2) {
+ jlong jresult = 0 ;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = 0;
+ if (jarg1) {
+ arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0);
+ if (!arg1) return 0;
+ }
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);
+ *(ESLevent **)&jresult = result;
+ if (arg1) jenv->ReleaseStringUTFChars(jarg1, (const char *)arg1);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_new_1ESLevent_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(esl_event_t **)&jarg1;
+ arg2 = (int)jarg2;
+ result = (ESLevent *)new ESLevent(arg1,arg2);
+ *(ESLevent **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_new_1ESLevent_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jlong jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (ESLevent *)new ESLevent(arg1);
+ *(ESLevent **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_delete_1ESLevent(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(ESLevent **)&jarg1;
+ delete arg1;
+
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1serialize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1setPriority(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) {
+ jboolean jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ esl_priority_t *argp2 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ argp2 = *(esl_priority_t **)&jarg2;
+ if (!argp2) {
+ SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null esl_priority_t");
+ return 0;
+ }
+ arg2 = *argp2;
+ result = (bool)(arg1)->setPriority(arg2);
+ jresult = (jboolean)result;
+ return jresult;
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getBody(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (char *)(arg1)->getBody();
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ return jresult;
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getType(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (char *)(arg1)->getType();
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ return jresult;
+}
+
+
+SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1addBody(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jboolean jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ jresult = (jboolean)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1addHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ jboolean jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ jresult = (jboolean)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1delHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jboolean jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ jresult = (jboolean)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1firstHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (char *)(arg1)->firstHeader();
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ return jresult;
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1nextHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jstring jresult = 0 ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLevent **)&jarg1;
+ result = (char *)(arg1)->nextHeader();
+ if(result) jresult = jenv->NewStringUTF((const char *)result);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_new_1ESLconnection_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jstring jarg1, jstring jarg2, jstring jarg3) {
+ jlong jresult = 0 ;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = 0;
+ if (jarg1) {
+ arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0);
+ if (!arg1) return 0;
+ }
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);
+ *(ESLconnection **)&jresult = result;
+ if (arg1) jenv->ReleaseStringUTFChars(jarg1, (const char *)arg1);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_new_1ESLconnection_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jint jarg1) {
+ jlong jresult = 0 ;
+ int arg1 ;
+ ESLconnection *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (int)jarg1;
+ result = (ESLconnection *)new ESLconnection(arg1);
+ *(ESLconnection **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_delete_1ESLconnection(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(ESLconnection **)&jarg1;
+ delete arg1;
+
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1socketDescriptor(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ result = (int)(arg1)->socketDescriptor();
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1connected(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ result = (int)(arg1)->connected();
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1getInfo(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ result = (ESLevent *)(arg1)->getInfo();
+ *(ESLevent **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1send(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (int)(arg1)->send((char const *)arg2);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1sendRecv(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ *(ESLevent **)&jresult = result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1api(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ *(ESLevent **)&jresult = result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1bgapi(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ *(ESLevent **)&jresult = result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1sendEvent(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ (void)jarg2_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = *(ESLevent **)&jarg2;
+ result = (int)(arg1)->sendEvent(arg2);
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1recvEvent(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ result = (ESLevent *)(arg1)->recvEvent();
+ *(ESLevent **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1recvEventTimed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = (int)jarg2;
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ *(ESLevent **)&jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1filter(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ jlong jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ *(ESLevent **)&jresult = result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1events(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1execute(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
+ if (!arg4) return 0;
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1executeAsync(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return 0;
+ }
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
+ if (!arg4) return 0;
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1setAsyncExecute(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1setEventLock(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return 0;
+ }
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ jresult = (jint)result;
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ return jresult;
+}
+
+
+SWIGEXPORT jint JNICALL Java_org_freeswitch_esl_eslJNI_ESLconnection_1disconnect(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
+ jint jresult = 0 ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(ESLconnection **)&jarg1;
+ result = (int)(arg1)->disconnect();
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_esl_eslJNI_eslSetLogLevel(JNIEnv *jenv, jclass jcls, jint jarg1) {
+ int arg1 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (int)jarg1;
+ eslSetLogLevel(arg1);
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
Copied: freeswitch/branches/seven/libs/esl/java/org (from rev 14471, freeswitch/trunk/libs/esl/java/org)
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch)
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl)
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLconnection.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLconnection.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/ESLconnection.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLconnection.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLconnection.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,119 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+public class ESLconnection {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+ protected ESLconnection(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ protected static long getCPtr(ESLconnection obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+ protected void finalize() {
+ delete();
+ }
+
+ public synchronized void delete() {
+ if(swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ eslJNI.delete_ESLconnection(swigCPtr);
+ }
+ swigCPtr = 0;
+ }
+
+ public ESLconnection(String host, String port, String password) {
+ this(eslJNI.new_ESLconnection__SWIG_0(host, port, password), true);
+ }
+
+ public ESLconnection(int socket) {
+ this(eslJNI.new_ESLconnection__SWIG_1(socket), true);
+ }
+
+ public int socketDescriptor() {
+ return eslJNI.ESLconnection_socketDescriptor(swigCPtr, this);
+ }
+
+ public int connected() {
+ return eslJNI.ESLconnection_connected(swigCPtr, this);
+ }
+
+ public ESLevent getInfo() {
+ long cPtr = eslJNI.ESLconnection_getInfo(swigCPtr, this);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public int send(String cmd) {
+ return eslJNI.ESLconnection_send(swigCPtr, this, cmd);
+ }
+
+ public ESLevent sendRecv(String cmd) {
+ long cPtr = eslJNI.ESLconnection_sendRecv(swigCPtr, this, cmd);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public ESLevent api(String cmd, String arg) {
+ long cPtr = eslJNI.ESLconnection_api(swigCPtr, this, cmd, arg);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public ESLevent bgapi(String cmd, String arg) {
+ long cPtr = eslJNI.ESLconnection_bgapi(swigCPtr, this, cmd, arg);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public int sendEvent(ESLevent send_me) {
+ return eslJNI.ESLconnection_sendEvent(swigCPtr, this, ESLevent.getCPtr(send_me), send_me);
+ }
+
+ public ESLevent recvEvent() {
+ long cPtr = eslJNI.ESLconnection_recvEvent(swigCPtr, this);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public ESLevent recvEventTimed(int ms) {
+ long cPtr = eslJNI.ESLconnection_recvEventTimed(swigCPtr, this, ms);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public ESLevent filter(String header, String value) {
+ long cPtr = eslJNI.ESLconnection_filter(swigCPtr, this, header, value);
+ return (cPtr == 0) ? null : new ESLevent(cPtr, true);
+ }
+
+ public int events(String etype, String value) {
+ return eslJNI.ESLconnection_events(swigCPtr, this, etype, value);
+ }
+
+ public int execute(String app, String arg, String uuid) {
+ return eslJNI.ESLconnection_execute(swigCPtr, this, app, arg, uuid);
+ }
+
+ public int executeAsync(String app, String arg, String uuid) {
+ return eslJNI.ESLconnection_executeAsync(swigCPtr, this, app, arg, uuid);
+ }
+
+ public int setAsyncExecute(String val) {
+ return eslJNI.ESLconnection_setAsyncExecute(swigCPtr, this, val);
+ }
+
+ public int setEventLock(String val) {
+ return eslJNI.ESLconnection_setEventLock(swigCPtr, this, val);
+ }
+
+ public int disconnect() {
+ return eslJNI.ESLconnection_disconnect(swigCPtr, this);
+ }
+
+}
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLevent.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLevent.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/ESLevent.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLevent.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/ESLevent.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,113 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+public class ESLevent {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+ protected ESLevent(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ protected static long getCPtr(ESLevent obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+ protected void finalize() {
+ delete();
+ }
+
+ public synchronized void delete() {
+ if(swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ eslJNI.delete_ESLevent(swigCPtr);
+ }
+ swigCPtr = 0;
+ }
+
+ public void setEvent(SWIGTYPE_p_esl_event_t value) {
+ eslJNI.ESLevent_event_set(swigCPtr, this, SWIGTYPE_p_esl_event_t.getCPtr(value));
+ }
+
+ public SWIGTYPE_p_esl_event_t getEvent() {
+ long cPtr = eslJNI.ESLevent_event_get(swigCPtr, this);
+ return (cPtr == 0) ? null : new SWIGTYPE_p_esl_event_t(cPtr, false);
+ }
+
+ public void setSerialized_string(String value) {
+ eslJNI.ESLevent_serialized_string_set(swigCPtr, this, value);
+ }
+
+ public String getSerialized_string() {
+ return eslJNI.ESLevent_serialized_string_get(swigCPtr, this);
+ }
+
+ public void setMine(int value) {
+ eslJNI.ESLevent_mine_set(swigCPtr, this, value);
+ }
+
+ public int getMine() {
+ return eslJNI.ESLevent_mine_get(swigCPtr, this);
+ }
+
+ public ESLevent(String type, String subclass_name) {
+ this(eslJNI.new_ESLevent__SWIG_0(type, subclass_name), true);
+ }
+
+ public ESLevent(SWIGTYPE_p_esl_event_t wrap_me, int free_me) {
+ this(eslJNI.new_ESLevent__SWIG_1(SWIGTYPE_p_esl_event_t.getCPtr(wrap_me), free_me), true);
+ }
+
+ public ESLevent(ESLevent me) {
+ this(eslJNI.new_ESLevent__SWIG_2(ESLevent.getCPtr(me), me), true);
+ }
+
+ public String serialize(String format) {
+ return eslJNI.ESLevent_serialize(swigCPtr, this, format);
+ }
+
+ public boolean setPriority(SWIGTYPE_p_esl_priority_t priority) {
+ return eslJNI.ESLevent_setPriority(swigCPtr, this, SWIGTYPE_p_esl_priority_t.getCPtr(priority));
+ }
+
+ public String getHeader(String header_name) {
+ return eslJNI.ESLevent_getHeader(swigCPtr, this, header_name);
+ }
+
+ public String getBody() {
+ return eslJNI.ESLevent_getBody(swigCPtr, this);
+ }
+
+ public String getType() {
+ return eslJNI.ESLevent_getType(swigCPtr, this);
+ }
+
+ public boolean addBody(String value) {
+ return eslJNI.ESLevent_addBody(swigCPtr, this, value);
+ }
+
+ public boolean addHeader(String header_name, String value) {
+ return eslJNI.ESLevent_addHeader(swigCPtr, this, header_name, value);
+ }
+
+ public boolean delHeader(String header_name) {
+ return eslJNI.ESLevent_delHeader(swigCPtr, this, header_name);
+ }
+
+ public String firstHeader() {
+ return eslJNI.ESLevent_firstHeader(swigCPtr, this);
+ }
+
+ public String nextHeader() {
+ return eslJNI.ESLevent_nextHeader(swigCPtr, this);
+ }
+
+}
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_event_t.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_event_t.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_event_t.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_event_t.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_event_t.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,26 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+public class SWIGTYPE_p_esl_event_t {
+ private long swigCPtr;
+
+ protected SWIGTYPE_p_esl_event_t(long cPtr, boolean futureUse) {
+ swigCPtr = cPtr;
+ }
+
+ protected SWIGTYPE_p_esl_event_t() {
+ swigCPtr = 0;
+ }
+
+ protected static long getCPtr(SWIGTYPE_p_esl_event_t obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+}
+
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_priority_t.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_priority_t.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_priority_t.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_priority_t.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/SWIGTYPE_p_esl_priority_t.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,26 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+public class SWIGTYPE_p_esl_priority_t {
+ private long swigCPtr;
+
+ protected SWIGTYPE_p_esl_priority_t(long cPtr, boolean futureUse) {
+ swigCPtr = cPtr;
+ }
+
+ protected SWIGTYPE_p_esl_priority_t() {
+ swigCPtr = 0;
+ }
+
+ protected static long getCPtr(SWIGTYPE_p_esl_priority_t obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+}
+
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/esl.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/esl.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/esl.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/esl.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/esl.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+public class esl {
+ public static void eslSetLogLevel(int level) {
+ eslJNI.eslSetLogLevel(level);
+ }
+
+}
Deleted: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/eslJNI.java
Copied: freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/eslJNI.java (from rev 14471, freeswitch/trunk/libs/esl/java/org/freeswitch/esl/eslJNI.java) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/eslJNI.java (rev 0)
+++ freeswitch/branches/seven/libs/esl/java/org/freeswitch/esl/eslJNI.java 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,53 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.freeswitch.esl;
+
+class eslJNI {
+ public final static native void ESLevent_event_set(long jarg1, ESLevent jarg1_, long jarg2);
+ public final static native long ESLevent_event_get(long jarg1, ESLevent jarg1_);
+ public final static native void ESLevent_serialized_string_set(long jarg1, ESLevent jarg1_, String jarg2);
+ public final static native String ESLevent_serialized_string_get(long jarg1, ESLevent jarg1_);
+ public final static native void ESLevent_mine_set(long jarg1, ESLevent jarg1_, int jarg2);
+ public final static native int ESLevent_mine_get(long jarg1, ESLevent jarg1_);
+ public final static native long new_ESLevent__SWIG_0(String jarg1, String jarg2);
+ public final static native long new_ESLevent__SWIG_1(long jarg1, int jarg2);
+ public final static native long new_ESLevent__SWIG_2(long jarg1, ESLevent jarg1_);
+ public final static native void delete_ESLevent(long jarg1);
+ public final static native String ESLevent_serialize(long jarg1, ESLevent jarg1_, String jarg2);
+ public final static native boolean ESLevent_setPriority(long jarg1, ESLevent jarg1_, long jarg2);
+ public final static native String ESLevent_getHeader(long jarg1, ESLevent jarg1_, String jarg2);
+ public final static native String ESLevent_getBody(long jarg1, ESLevent jarg1_);
+ public final static native String ESLevent_getType(long jarg1, ESLevent jarg1_);
+ public final static native boolean ESLevent_addBody(long jarg1, ESLevent jarg1_, String jarg2);
+ public final static native boolean ESLevent_addHeader(long jarg1, ESLevent jarg1_, String jarg2, String jarg3);
+ public final static native boolean ESLevent_delHeader(long jarg1, ESLevent jarg1_, String jarg2);
+ public final static native String ESLevent_firstHeader(long jarg1, ESLevent jarg1_);
+ public final static native String ESLevent_nextHeader(long jarg1, ESLevent jarg1_);
+ public final static native long new_ESLconnection__SWIG_0(String jarg1, String jarg2, String jarg3);
+ public final static native long new_ESLconnection__SWIG_1(int jarg1);
+ public final static native void delete_ESLconnection(long jarg1);
+ public final static native int ESLconnection_socketDescriptor(long jarg1, ESLconnection jarg1_);
+ public final static native int ESLconnection_connected(long jarg1, ESLconnection jarg1_);
+ public final static native long ESLconnection_getInfo(long jarg1, ESLconnection jarg1_);
+ public final static native int ESLconnection_send(long jarg1, ESLconnection jarg1_, String jarg2);
+ public final static native long ESLconnection_sendRecv(long jarg1, ESLconnection jarg1_, String jarg2);
+ public final static native long ESLconnection_api(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3);
+ public final static native long ESLconnection_bgapi(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3);
+ public final static native int ESLconnection_sendEvent(long jarg1, ESLconnection jarg1_, long jarg2, ESLevent jarg2_);
+ public final static native long ESLconnection_recvEvent(long jarg1, ESLconnection jarg1_);
+ public final static native long ESLconnection_recvEventTimed(long jarg1, ESLconnection jarg1_, int jarg2);
+ public final static native long ESLconnection_filter(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3);
+ public final static native int ESLconnection_events(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3);
+ public final static native int ESLconnection_execute(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3, String jarg4);
+ public final static native int ESLconnection_executeAsync(long jarg1, ESLconnection jarg1_, String jarg2, String jarg3, String jarg4);
+ public final static native int ESLconnection_setAsyncExecute(long jarg1, ESLconnection jarg1_, String jarg2);
+ public final static native int ESLconnection_setEventLock(long jarg1, ESLconnection jarg1_, String jarg2);
+ public final static native int ESLconnection_disconnect(long jarg1, ESLconnection jarg1_);
+ public final static native void eslSetLogLevel(int jarg1);
+}
Copied: freeswitch/branches/seven/libs/esl/lua (from rev 14471, freeswitch/trunk/libs/esl/lua)
Deleted: freeswitch/branches/seven/libs/esl/lua/Makefile
Copied: freeswitch/branches/seven/libs/esl/lua/Makefile (from rev 14471, freeswitch/trunk/libs/esl/lua/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/lua/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/lua/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+LOCAL_CFLAGS=
+LOCAL_LDFLAGS=-llua
+WRAP_GCC_WARNING_SILENCE=-Wno-unused-function
+
+all: ESL.so
+
+esl_wrap.cpp:
+ swig -module ESL -lua -c++ -DMULTIPLICITY -I../src/include -o esl_wrap.cpp ../ESL.i
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) $(WRAP_GCC_WARNING_SILENCE) -c esl_wrap.cpp -o esl_wrap.o
+
+ESL.so: esl_wrap.o
+ $(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o ESL.so -L. $(LIBS)
+
+clean:
+ rm -f *.o *.so *~
+
+swigclean:
+ rm -f esl_wrap.* ESL.so
+
+reswig: swigclean esl_wrap.cpp
+
Deleted: freeswitch/branches/seven/libs/esl/lua/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/lua/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/lua/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/lua/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/lua/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3181 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic CAPI SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+ or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+ creating a static or dynamic library from the swig runtime code.
+ In 99.9% of the cases, swig just needs to declare them as 'static'.
+
+ But only do this if is strictly necessary, ie, if you have problems
+ with your compiler or so.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/* Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN 0x1
+#define SWIG_CAST_NEW_MEMORY 0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN 0x1
+
+
+/*
+ Flags/methods for returning states.
+
+ The swig conversion methods, as ConvertPtr, return and integer
+ that tells if the conversion was successful or not. And if not,
+ an error code can be returned (see swigerrors.swg for the codes).
+
+ Use the following macros/flags to set or process the returning
+ states.
+
+ In old swig versions, you usually write code as:
+
+ if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+ // success code
+ } else {
+ //fail code
+ }
+
+ Now you can be more explicit as:
+
+ int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ // fail code
+ }
+
+ that seems to be the same, but now you can also do
+
+ Type *ptr;
+ int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ if (SWIG_IsNewObj(res) {
+ ...
+ delete *ptr;
+ } else {
+ ...
+ }
+ } else {
+ // fail code
+ }
+
+ I.e., now SWIG_ConvertPtr can return new objects and you can
+ identify the case and take care of the deallocation. Of course that
+ requires also to SWIG_ConvertPtr to return new result values, as
+
+ int SWIG_ConvertPtr(obj, ptr,...) {
+ if (<obj is ok>) {
+ if (<need new object>) {
+ *ptr = <ptr to new allocated object>;
+ return SWIG_NEWOBJ;
+ } else {
+ *ptr = <ptr to old object>;
+ return SWIG_OLDOBJ;
+ }
+ } else {
+ return SWIG_BADOBJ;
+ }
+ }
+
+ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+ more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+ swig errors code.
+
+ Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+ allows to return the 'cast rank', for example, if you have this
+
+ int food(double)
+ int fooi(int);
+
+ and you call
+
+ food(1) // cast rank '1' (1 -> 1.0)
+ fooi(1) // cast rank '0'
+
+ just use the SWIG_AddCast()/SWIG_CheckState()
+
+
+ */
+#define SWIG_OK (0)
+#define SWIG_ERROR (-1)
+#define SWIG_IsOK(r) (r >= 0)
+#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ (SWIG_ERROR)
+#define SWIG_OLDOBJ (SWIG_OK)
+#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+# ifndef SWIG_TypeRank
+# define SWIG_TypeRank unsigned long
+# endif
+# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
+# define SWIG_MAXCASTRANK (2)
+# endif
+# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
+# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+ return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+ return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+# define SWIG_AddCast
+# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+ const char *name; /* mangled name of this type */
+ const char *str; /* human readable name of this type */
+ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
+ struct swig_cast_info *cast; /* linked list of types that can cast into this type */
+ void *clientdata; /* language specific type data */
+ int owndata; /* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+ swig_type_info *type; /* pointer to type that is equivalent to this type */
+ swig_converter_func converter; /* function to cast the void pointers */
+ struct swig_cast_info *next; /* pointer to next cast in linked list */
+ struct swig_cast_info *prev; /* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+ swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
+ size_t size; /* Number of types in this module */
+ struct swig_module_info *next; /* Pointer to next element in circularly linked list */
+ swig_type_info **type_initial; /* Array of initially generated type structures */
+ swig_cast_info **cast_initial; /* Array of initially generated casting structures */
+ void *clientdata; /* Language specific module data */
+} swig_module_info;
+
+/*
+ Compare two type names skipping the space characters, therefore
+ "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+ Return 0 when the two name types are equivalent, as in
+ strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+ const char *f2, const char *l2) {
+ for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+ while ((*f1 == ' ') && (f1 != l1)) ++f1;
+ while ((*f2 == ' ') && (f2 != l2)) ++f2;
+ if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+ }
+ return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+
+/* think of this as a c++ template<> or a scheme macro */
+#define SWIG_TypeCheck_Template(comparison, ty) \
+ if (ty) { \
+ swig_cast_info *iter = ty->cast; \
+ while (iter) { \
+ if (comparison) { \
+ if (iter == ty->cast) return iter; \
+ /* Move iter to the top of the linked list */ \
+ iter->prev->next = iter->next; \
+ if (iter->next) \
+ iter->next->prev = iter->prev; \
+ iter->next = ty->cast; \
+ iter->prev = 0; \
+ if (ty->cast) ty->cast->prev = iter; \
+ ty->cast = iter; \
+ return iter; \
+ } \
+ iter = iter->next; \
+ } \
+ } \
+ return 0
+
+/*
+ Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
+}
+
+/* Same as previous function, except strcmp is replaced with a pointer comparison */
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
+ SWIG_TypeCheck_Template(iter->type == from, into);
+}
+
+/*
+ Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+ return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+ Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+ swig_type_info *lastty = ty;
+ if (!ty || !ty->dcast) return ty;
+ while (ty && (ty->dcast)) {
+ ty = (*ty->dcast)(ptr);
+ if (ty) lastty = ty;
+ }
+ return lastty;
+}
+
+/*
+ Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+ return ty->name;
+}
+
+/*
+ Return the pretty name associated with this type,
+ that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+ /* The "str" field contains the equivalent pretty names of the
+ type, separated by vertical-bar characters. We choose
+ to print the last name, as it is often (?) the most
+ specific. */
+ if (!type) return NULL;
+ if (type->str != NULL) {
+ const char *last_name = type->str;
+ const char *s;
+ for (s = type->str; *s; s++)
+ if (*s == '|') last_name = s+1;
+ return last_name;
+ }
+ else
+ return type->name;
+}
+
+/*
+ Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+ swig_cast_info *cast = ti->cast;
+ /* if (ti->clientdata == clientdata) return; */
+ ti->clientdata = clientdata;
+
+ while (cast) {
+ if (!cast->converter) {
+ swig_type_info *tc = cast->type;
+ if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+ }
+ }
+ cast = cast->next;
+ }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+ SWIG_TypeClientData(ti, clientdata);
+ ti->owndata = 1;
+}
+
+/*
+ Search for a swig_type_info structure only by mangled name
+ Search is a O(log #types)
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ swig_module_info *iter = start;
+ do {
+ if (iter->size) {
+ register size_t l = 0;
+ register size_t r = iter->size - 1;
+ do {
+ /* since l+r >= 0, we can (>> 1) instead (/ 2) */
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+ register int compare = strcmp(name, iname);
+ if (compare == 0) {
+ return iter->types[i];
+ } else if (compare < 0) {
+ if (i) {
+ r = i - 1;
+ } else {
+ break;
+ }
+ } else if (compare > 0) {
+ l = i + 1;
+ }
+ } else {
+ break; /* should never happen */
+ }
+ } while (l <= r);
+ }
+ iter = iter->next;
+ } while (iter != end);
+ return 0;
+}
+
+/*
+ Search for a swig_type_info structure for either a mangled name or a human readable name.
+ It first searches the mangled names of the types, which is a O(log #types)
+ If a type is not found it then searches the human readable names, which is O(#types).
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ /* STEP 1: Search the name field using binary search */
+ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+ if (ret) {
+ return ret;
+ } else {
+ /* STEP 2: If the type hasn't been found, do a complete search
+ of the str field (the human readable name) */
+ swig_module_info *iter = start;
+ do {
+ register size_t i = 0;
+ for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+ return iter->types[i];
+ }
+ iter = iter->next;
+ } while (iter != end);
+ }
+
+ /* neither found a match */
+ return 0;
+}
+
+/*
+ Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+ static const char hex[17] = "0123456789abcdef";
+ register const unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register unsigned char uu = *u;
+ *(c++) = hex[(uu & 0xf0) >> 4];
+ *(c++) = hex[uu & 0xf];
+ }
+ return c;
+}
+
+/*
+ Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+ register unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register char d = *(c++);
+ register unsigned char uu;
+ if ((d >= '0') && (d <= '9'))
+ uu = ((d - '0') << 4);
+ else if ((d >= 'a') && (d <= 'f'))
+ uu = ((d - ('a'-10)) << 4);
+ else
+ return (char *) 0;
+ d = *(c++);
+ if ((d >= '0') && (d <= '9'))
+ uu |= (d - '0');
+ else if ((d >= 'a') && (d <= 'f'))
+ uu |= (d - ('a'-10));
+ else
+ return (char *) 0;
+ *u = uu;
+ }
+ return c;
+}
+
+/*
+ Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+ char *r = buff;
+ if ((2*sizeof(void *) + 2) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,&ptr,sizeof(void *));
+ if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+ strcpy(r,name);
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ *ptr = (void *) 0;
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+ char *r = buff;
+ size_t lname = (name ? strlen(name) : 0);
+ if ((2*sz + 2 + lname) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ if (lname) {
+ strncpy(r,name,lname+1);
+ } else {
+ *r = 0;
+ }
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ memset(ptr,0,sz);
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * luarun.swg
+ *
+ * This file contains the runtime support for Lua modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "lua.h"
+#include "lauxlib.h"
+#include <stdlib.h> /* for malloc */
+#include <assert.h> /* for a few sanity tests */
+
+/* -----------------------------------------------------------------------------
+ * global swig types
+ * ----------------------------------------------------------------------------- */
+/* Constant table */
+#define SWIG_LUA_INT 1
+#define SWIG_LUA_FLOAT 2
+#define SWIG_LUA_STRING 3
+#define SWIG_LUA_POINTER 4
+#define SWIG_LUA_BINARY 5
+#define SWIG_LUA_CHAR 6
+
+/* Structure for variable linking table */
+typedef struct {
+ const char *name;
+ lua_CFunction get;
+ lua_CFunction set;
+} swig_lua_var_info;
+
+/* Constant information structure */
+typedef struct {
+ int type;
+ char *name;
+ long lvalue;
+ double dvalue;
+ void *pvalue;
+ swig_type_info **ptype;
+} swig_lua_const_info;
+
+typedef struct {
+ const char *name;
+ lua_CFunction method;
+} swig_lua_method;
+
+typedef struct {
+ const char *name;
+ lua_CFunction getmethod;
+ lua_CFunction setmethod;
+} swig_lua_attribute;
+
+typedef struct swig_lua_class {
+ const char *name;
+ swig_type_info **type;
+ lua_CFunction constructor;
+ void (*destructor)(void *);
+ swig_lua_method *methods;
+ swig_lua_attribute *attributes;
+ struct swig_lua_class **bases;
+ const char **base_names;
+} swig_lua_class;
+
+/* this is the struct for wrappering all pointers in SwigLua
+*/
+typedef struct {
+ swig_type_info *type;
+ int own; /* 1 if owned & must be destroyed */
+ void *ptr;
+} swig_lua_userdata;
+
+/* this is the struct for wrapping arbitary packed binary data
+(currently it is only used for member function pointers)
+the data ordering is similar to swig_lua_userdata, but it is currently not possible
+to tell the two structures apart within Swig, other than by looking at the type
+*/
+typedef struct {
+ swig_type_info *type;
+ int own; /* 1 if owned & must be destroyed */
+ char data[1]; /* arbitary amount of data */
+} swig_lua_rawdata;
+
+/* Common SWIG API */
+#define SWIG_NewPointerObj(L, ptr, type, owner) SWIG_Lua_NewPointerObj(L, (void *)ptr, type, owner)
+#define SWIG_ConvertPtr(L,idx, ptr, type, flags) SWIG_Lua_ConvertPtr(L,idx,ptr,type,flags)
+#define SWIG_MustGetPtr(L,idx, type,flags, argnum,fnname) SWIG_Lua_MustGetPtr(L,idx, type,flags, argnum,fnname)
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(L, idx, ptr, sz, ty) SWIG_Lua_ConvertPacked(L, idx, ptr, sz, ty)
+#define SWIG_NewMemberObj(L, ptr, sz, type) SWIG_Lua_NewPackedObj(L, ptr, sz, type)
+
+/* Runtime API */
+#define SWIG_GetModule(clientdata) SWIG_Lua_GetModule((lua_State*)(clientdata))
+#define SWIG_SetModule(clientdata, pointer) SWIG_Lua_SetModule((lua_State*) (clientdata), pointer)
+#define SWIG_MODULE_CLIENTDATA_TYPE lua_State*
+
+/* Contract support */
+#define SWIG_contract_assert(expr, msg) \
+ if (!(expr)) { lua_pushstring(L, (char *) msg); goto fail; } else
+
+/* helper #defines */
+#define SWIG_fail {goto fail;}
+#define SWIG_fail_arg(func_name,argnum,type) \
+ {lua_pushfstring(L,"Error in %s (arg %d), expected '%s' got '%s'",\
+ func_name,argnum,type,SWIG_Lua_typename(L,argnum));\
+ goto fail;}
+#define SWIG_fail_ptr(func_name,argnum,type) \
+ SWIG_fail_arg(func_name,argnum,(type && type->str)?type->str:"void*")
+#define SWIG_check_num_args(func_name,a,b) \
+ if (lua_gettop(L)<a || lua_gettop(L)>b) \
+ {lua_pushfstring(L,"Error in %s expected %d..%d args, got %d",func_name,a,b,lua_gettop(L));\
+ goto fail;}
+
+
+#define SWIG_Lua_get_table(L,n) \
+ (lua_pushstring(L, n), lua_rawget(L,-2))
+
+#define SWIG_Lua_add_function(L,n,f) \
+ (lua_pushstring(L, n), \
+ lua_pushcfunction(L, f), \
+ lua_rawset(L,-3))
+
+/* special helper for allowing 'nil' for usertypes */
+#define SWIG_isptrtype(L,I) (lua_isuserdata(L,I) || lua_isnil(L,I))
+
+#ifdef __cplusplus
+/* Special helper for member function pointers
+it gets the address, casts it, then dereferences it */
+//#define SWIG_mem_fn_as_voidptr(a) (*((char**)&(a)))
+#endif
+
+/* storing/access of swig_module_info */
+SWIGRUNTIME swig_module_info *
+SWIG_Lua_GetModule(lua_State* L) {
+ swig_module_info *ret = 0;
+ lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
+ lua_rawget(L,LUA_REGISTRYINDEX);
+ if (lua_islightuserdata(L,-1))
+ ret=(swig_module_info*)lua_touserdata(L,-1);
+ lua_pop(L,1); /* tidy */
+ return ret;
+}
+
+SWIGRUNTIME void
+SWIG_Lua_SetModule(lua_State* L, swig_module_info *module) {
+ /* add this all into the Lua registry: */
+ lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
+ lua_pushlightuserdata(L,(void*)module);
+ lua_rawset(L,LUA_REGISTRYINDEX);
+}
+
+/* -----------------------------------------------------------------------------
+ * global variable support code: modules
+ * ----------------------------------------------------------------------------- */
+
+/* this function is called when trying to set an immutable.
+default value is to print an error.
+This can removed with a compile flag SWIGLUA_IGNORE_SET_IMMUTABLE */
+SWIGINTERN int SWIG_Lua_set_immutable(lua_State* L)
+{
+/* there should be 1 param passed in: the new value */
+#ifndef SWIGLUA_IGNORE_SET_IMMUTABLE
+ lua_pop(L,1); /* remove it */
+ lua_pushstring(L,"This variable is immutable");
+ lua_error(L);
+#endif
+ return 0; /* should not return anything */
+}
+
+/* the module.get method used for getting linked data */
+SWIGINTERN int SWIG_Lua_module_get(lua_State* L)
+{
+/* there should be 2 params passed in
+ (1) table (not the meta table)
+ (2) string name of the attribute
+ printf("SWIG_Lua_module_get %p(%s) '%s'\n",
+ lua_topointer(L,1),lua_typename(L,lua_type(L,1)),
+ lua_tostring(L,2));
+*/
+ /* get the metatable */
+ assert(lua_istable(L,1)); /* just in case */
+ lua_getmetatable(L,1); /* get the metatable */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_get_table(L,".get"); /* get the .get table */
+ lua_remove(L,3); /* remove metatable */
+ if (lua_istable(L,-1))
+ {
+ /* look for the key in the .get table */
+ lua_pushvalue(L,2); /* key */
+ lua_rawget(L,-2);
+ lua_remove(L,3); /* remove .get */
+ if (lua_iscfunction(L,-1))
+ { /* found it so call the fn & return its value */
+ lua_call(L,0,1);
+ return 1;
+ }
+ lua_pop(L,1); /* remove the top */
+ }
+ lua_pop(L,1); /* remove the .get */
+ lua_pushnil(L); /* return a nil */
+ return 1;
+}
+
+/* the module.set method used for setting linked data */
+SWIGINTERN int SWIG_Lua_module_set(lua_State* L)
+{
+/* there should be 3 params passed in
+ (1) table (not the meta table)
+ (2) string name of the attribute
+ (3) any for the new value
+*/
+ /* get the metatable */
+ assert(lua_istable(L,1)); /* just in case */
+ lua_getmetatable(L,1); /* get the metatable */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_get_table(L,".set"); /* get the .set table */
+ lua_remove(L,4); /* remove metatable */
+ if (lua_istable(L,-1))
+ {
+ /* look for the key in the .set table */
+ lua_pushvalue(L,2); /* key */
+ lua_rawget(L,-2);
+ lua_remove(L,4); /* remove .set */
+ if (lua_iscfunction(L,-1))
+ { /* found it so call the fn & return its value */
+ lua_pushvalue(L,3); /* value */
+ lua_call(L,1,0);
+ return 0;
+ }
+ }
+ lua_settop(L,3); /* reset back to start */
+ /* we now have the table, key & new value, so just set directly */
+ lua_rawset(L,1); /* add direct */
+ return 0;
+}
+
+/* registering a module in lua */
+SWIGINTERN void SWIG_Lua_module_begin(lua_State* L,const char* name)
+{
+ assert(lua_istable(L,-1)); /* just in case */
+ lua_pushstring(L,name);
+ lua_newtable(L); /* the table */
+ /* add meta table */
+ lua_newtable(L); /* the meta table */
+ SWIG_Lua_add_function(L,"__index",SWIG_Lua_module_get);
+ SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_module_set);
+ lua_pushstring(L,".get");
+ lua_newtable(L); /* the .get table */
+ lua_rawset(L,-3); /* add .get into metatable */
+ lua_pushstring(L,".set");
+ lua_newtable(L); /* the .set table */
+ lua_rawset(L,-3); /* add .set into metatable */
+ lua_setmetatable(L,-2); /* sets meta table in module */
+ lua_rawset(L,-3); /* add module into parent */
+ SWIG_Lua_get_table(L,name); /* get the table back out */
+}
+
+/* ending the register */
+SWIGINTERN void SWIG_Lua_module_end(lua_State* L)
+{
+ lua_pop(L,1); /* tidy stack (remove module) */
+}
+
+/* adding a linked variable to the module */
+SWIGINTERN void SWIG_Lua_module_add_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn)
+{
+ assert(lua_istable(L,-1)); /* just in case */
+ lua_getmetatable(L,-1); /* get the metatable */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_get_table(L,".get"); /* find the .get table */
+ assert(lua_istable(L,-1)); /* should be a table: */
+ SWIG_Lua_add_function(L,name,getFn);
+ lua_pop(L,1); /* tidy stack (remove table) */
+ if (setFn) /* if there is a set fn */
+ {
+ SWIG_Lua_get_table(L,".set"); /* find the .set table */
+ assert(lua_istable(L,-1)); /* should be a table: */
+ SWIG_Lua_add_function(L,name,setFn);
+ lua_pop(L,1); /* tidy stack (remove table) */
+ }
+ lua_pop(L,1); /* tidy stack (remove meta) */
+}
+
+/* adding a function module */
+SWIGINTERN void SWIG_Lua_module_add_function(lua_State* L,const char* name,lua_CFunction fn)
+{
+ SWIG_Lua_add_function(L,name,fn);
+}
+
+/* -----------------------------------------------------------------------------
+ * global variable support code: classes
+ * ----------------------------------------------------------------------------- */
+
+/* the class.get method, performs the lookup of class attributes */
+SWIGINTERN int SWIG_Lua_class_get(lua_State* L)
+{
+/* there should be 2 params passed in
+ (1) userdata (not the meta table)
+ (2) string name of the attribute
+*/
+ assert(lua_isuserdata(L,-2)); /* just in case */
+ lua_getmetatable(L,-2); /* get the meta table */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_get_table(L,".get"); /* find the .get table */
+ assert(lua_istable(L,-1)); /* just in case */
+ /* look for the key in the .get table */
+ lua_pushvalue(L,2); /* key */
+ lua_rawget(L,-2);
+ lua_remove(L,-2); /* stack tidy, remove .get table */
+ if (lua_iscfunction(L,-1))
+ { /* found it so call the fn & return its value */
+ lua_pushvalue(L,1); /* the userdata */
+ lua_call(L,1,1); /* 1 value in (userdata),1 out (result) */
+ lua_remove(L,-2); /* stack tidy, remove metatable */
+ return 1;
+ }
+ lua_pop(L,1); /* remove whatever was there */
+ /* ok, so try the .fn table */
+ SWIG_Lua_get_table(L,".fn"); /* find the .get table */
+ assert(lua_istable(L,-1)); /* just in case */
+ lua_pushvalue(L,2); /* key */
+ lua_rawget(L,-2); /* look for the fn */
+ lua_remove(L,-2); /* stack tidy, remove .fn table */
+ if (lua_isfunction(L,-1)) /* note: if its a C function or lua function */
+ { /* found it so return the fn & let lua call it */
+ lua_remove(L,-2); /* stack tidy, remove metatable */
+ return 1;
+ }
+ lua_pop(L,1); /* remove whatever was there */
+ /* NEW: looks for the __getitem() fn
+ this is a user provided get fn */
+ SWIG_Lua_get_table(L,"__getitem"); /* find the __getitem fn */
+ if (lua_iscfunction(L,-1)) /* if its there */
+ { /* found it so call the fn & return its value */
+ lua_pushvalue(L,1); /* the userdata */
+ lua_pushvalue(L,2); /* the parameter */
+ lua_call(L,2,1); /* 2 value in (userdata),1 out (result) */
+ lua_remove(L,-2); /* stack tidy, remove metatable */
+ return 1;
+ }
+ return 0; /* sorry not known */
+}
+
+/* the class.set method, performs the lookup of class attributes */
+SWIGINTERN int SWIG_Lua_class_set(lua_State* L)
+{
+/* there should be 3 params passed in
+ (1) table (not the meta table)
+ (2) string name of the attribute
+ (3) any for the new value
+printf("SWIG_Lua_class_set %p(%s) '%s' %p(%s)\n",
+ lua_topointer(L,1),lua_typename(L,lua_type(L,1)),
+ lua_tostring(L,2),
+ lua_topointer(L,3),lua_typename(L,lua_type(L,3)));*/
+
+ assert(lua_isuserdata(L,1)); /* just in case */
+ lua_getmetatable(L,1); /* get the meta table */
+ assert(lua_istable(L,-1)); /* just in case */
+
+ SWIG_Lua_get_table(L,".set"); /* find the .set table */
+ if (lua_istable(L,-1))
+ {
+ /* look for the key in the .set table */
+ lua_pushvalue(L,2); /* key */
+ lua_rawget(L,-2);
+ if (lua_iscfunction(L,-1))
+ { /* found it so call the fn & return its value */
+ lua_pushvalue(L,1); /* userdata */
+ lua_pushvalue(L,3); /* value */
+ lua_call(L,2,0);
+ return 0;
+ }
+ lua_pop(L,1); /* remove the value */
+ }
+ lua_pop(L,1); /* remove the value .set table */
+ /* NEW: looks for the __setitem() fn
+ this is a user provided set fn */
+ SWIG_Lua_get_table(L,"__setitem"); /* find the fn */
+ if (lua_iscfunction(L,-1)) /* if its there */
+ { /* found it so call the fn & return its value */
+ lua_pushvalue(L,1); /* the userdata */
+ lua_pushvalue(L,2); /* the parameter */
+ lua_pushvalue(L,3); /* the value */
+ lua_call(L,3,0); /* 3 values in ,0 out */
+ lua_remove(L,-2); /* stack tidy, remove metatable */
+ return 1;
+ }
+ return 0;
+}
+
+/* the class.destruct method called by the interpreter */
+SWIGINTERN int SWIG_Lua_class_destruct(lua_State* L)
+{
+/* there should be 1 params passed in
+ (1) userdata (not the meta table) */
+ swig_lua_userdata* usr;
+ swig_lua_class* clss;
+ assert(lua_isuserdata(L,-1)); /* just in case */
+ usr=(swig_lua_userdata*)lua_touserdata(L,-1); /* get it */
+ /* if must be destroyed & has a destructor */
+ if (usr->own) /* if must be destroyed */
+ {
+ clss=(swig_lua_class*)usr->type->clientdata; /* get the class */
+ if (clss && clss->destructor) /* there is a destroy fn */
+ {
+ clss->destructor(usr->ptr); /* bye bye */
+ }
+ }
+ return 0;
+}
+
+/* gets the swig class registry (or creates it) */
+SWIGINTERN void SWIG_Lua_get_class_registry(lua_State* L)
+{
+ /* add this all into the swig registry: */
+ lua_pushstring(L,"SWIG");
+ lua_rawget(L,LUA_REGISTRYINDEX); /* get the registry */
+ if (!lua_istable(L,-1)) /* not there */
+ { /* must be first time, so add it */
+ lua_pop(L,1); /* remove the result */
+ lua_pushstring(L,"SWIG");
+ lua_newtable(L);
+ lua_rawset(L,LUA_REGISTRYINDEX);
+ /* then get it */
+ lua_pushstring(L,"SWIG");
+ lua_rawget(L,LUA_REGISTRYINDEX);
+ }
+}
+
+/* helper fn to get the classes metatable from the register */
+SWIGINTERN void SWIG_Lua_get_class_metatable(lua_State* L,const char* cname)
+{
+ SWIG_Lua_get_class_registry(L); /* get the registry */
+ lua_pushstring(L,cname); /* get the name */
+ lua_rawget(L,-2); /* get it */
+ lua_remove(L,-2); /* tidy up (remove registry) */
+}
+
+/* helper add a variable to a registered class */
+SWIGINTERN void SWIG_Lua_add_class_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn)
+{
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_get_table(L,".get"); /* find the .get table */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_add_function(L,name,getFn);
+ lua_pop(L,1); /* tidy stack (remove table) */
+ if (setFn)
+ {
+ SWIG_Lua_get_table(L,".set"); /* find the .set table */
+ assert(lua_istable(L,-1)); /* just in case */
+ SWIG_Lua_add_function(L,name,setFn);
+ lua_pop(L,1); /* tidy stack (remove table) */
+ }
+}
+
+/* helper to recursively add class details (attributes & operations) */
+SWIGINTERN void SWIG_Lua_add_class_details(lua_State* L,swig_lua_class* clss)
+{
+ int i;
+ /* call all the base classes first: we can then override these later: */
+ for(i=0;clss->bases[i];i++)
+ {
+ SWIG_Lua_add_class_details(L,clss->bases[i]);
+ }
+ /* add fns */
+ for(i=0;clss->attributes[i].name;i++){
+ SWIG_Lua_add_class_variable(L,clss->attributes[i].name,clss->attributes[i].getmethod,clss->attributes[i].setmethod);
+ }
+ /* add methods to the metatable */
+ SWIG_Lua_get_table(L,".fn"); /* find the .fn table */
+ assert(lua_istable(L,-1)); /* just in case */
+ for(i=0;clss->methods[i].name;i++){
+ SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method);
+ }
+ lua_pop(L,1); /* tidy stack (remove table) */
+ /* add operator overloads
+ these look ANY method which start with "__" and assume they
+ are operator overloads & add them to the metatable
+ (this might mess up is someone defines a method __gc (the destructor)*/
+ for(i=0;clss->methods[i].name;i++){
+ if (clss->methods[i].name[0]=='_' && clss->methods[i].name[1]=='_'){
+ SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method);
+ }
+ }
+}
+
+/* set up the base classes pointers.
+Each class structure has a list of pointers to the base class structures.
+This function fills them.
+It cannot be done at compile time, as this will not work with hireachies
+spread over more than one swig file.
+Therefore it must be done at runtime, querying the SWIG type system.
+*/
+SWIGINTERN void SWIG_Lua_init_base_class(lua_State* L,swig_lua_class* clss)
+{
+ int i=0;
+ swig_module_info* module=SWIG_GetModule(L);
+ for(i=0;clss->base_names[i];i++)
+ {
+ if (clss->bases[i]==0) /* not found yet */
+ {
+ /* lookup and cache the base class */
+ swig_type_info *info = SWIG_TypeQueryModule(module,module,clss->base_names[i]);
+ if (info) clss->bases[i] = (swig_lua_class *) info->clientdata;
+ }
+ }
+}
+
+/* performs the entire class registration process */
+SWIGINTERN void SWIG_Lua_class_register(lua_State* L,swig_lua_class* clss)
+{
+ /* add its constructor to module with the name of the class
+ so you can do MyClass(...) as well as new_MyClass(...)
+ BUT only if a constructor is defined
+ (this overcomes the problem of pure virtual classes without constructors)*/
+ if (clss->constructor)
+ SWIG_Lua_add_function(L,clss->name,clss->constructor);
+
+ SWIG_Lua_get_class_registry(L); /* get the registry */
+ lua_pushstring(L,clss->name); /* get the name */
+ lua_newtable(L); /* create the metatable */
+ /* add string of class name called ".type" */
+ lua_pushstring(L,".type");
+ lua_pushstring(L,clss->name);
+ lua_rawset(L,-3);
+ /* add a table called ".get" */
+ lua_pushstring(L,".get");
+ lua_newtable(L);
+ lua_rawset(L,-3);
+ /* add a table called ".set" */
+ lua_pushstring(L,".set");
+ lua_newtable(L);
+ lua_rawset(L,-3);
+ /* add a table called ".fn" */
+ lua_pushstring(L,".fn");
+ lua_newtable(L);
+ lua_rawset(L,-3);
+ /* add accessor fns for using the .get,.set&.fn */
+ SWIG_Lua_add_function(L,"__index",SWIG_Lua_class_get);
+ SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_class_set);
+ SWIG_Lua_add_function(L,"__gc",SWIG_Lua_class_destruct);
+ /* add it */
+ lua_rawset(L,-3); /* metatable into registry */
+ lua_pop(L,1); /* tidy stack (remove registry) */
+
+ SWIG_Lua_get_class_metatable(L,clss->name);
+ SWIG_Lua_add_class_details(L,clss); /* recursive adding of details (atts & ops) */
+ lua_pop(L,1); /* tidy stack (remove class metatable) */
+}
+
+/* -----------------------------------------------------------------------------
+ * Class/structure conversion fns
+ * ----------------------------------------------------------------------------- */
+
+/* helper to add metatable to new lua object */
+SWIGINTERN void _SWIG_Lua_AddMetatable(lua_State* L,swig_type_info *type)
+{
+ if (type->clientdata) /* there is clientdata: so add the metatable */
+ {
+ SWIG_Lua_get_class_metatable(L,((swig_lua_class*)(type->clientdata))->name);
+ if (lua_istable(L,-1))
+ {
+ lua_setmetatable(L,-2);
+ }
+ else
+ {
+ lua_pop(L,1);
+ }
+ }
+}
+
+/* pushes a new object into the lua stack */
+SWIGRUNTIME void SWIG_Lua_NewPointerObj(lua_State* L,void* ptr,swig_type_info *type, int own)
+{
+ swig_lua_userdata* usr;
+ if (!ptr){
+ lua_pushnil(L);
+ return;
+ }
+ usr=(swig_lua_userdata*)lua_newuserdata(L,sizeof(swig_lua_userdata)); /* get data */
+ usr->ptr=ptr; /* set the ptr */
+ usr->type=type;
+ usr->own=own;
+ _SWIG_Lua_AddMetatable(L,type); /* add metatable */
+}
+
+/* takes a object from the lua stack & converts it into an object of the correct type
+ (if possible) */
+SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State* L,int index,void** ptr,swig_type_info *type,int flags)
+{
+ swig_lua_userdata* usr;
+ swig_cast_info *cast;
+ if (lua_isnil(L,index)){*ptr=0; return SWIG_OK;} /* special case: lua nil => NULL pointer */
+ usr=(swig_lua_userdata*)lua_touserdata(L,index); /* get data */
+ if (usr)
+ {
+ if (flags & SWIG_POINTER_DISOWN) /* must disown the object */
+ {
+ usr->own=0;
+ }
+ if (!type) /* special cast void*, no casting fn */
+ {
+ *ptr=usr->ptr;
+ return SWIG_OK; /* ok */
+ }
+ cast=SWIG_TypeCheckStruct(usr->type,type); /* performs normal type checking */
+ if (cast)
+ {
+ int newmemory = 0;
+ *ptr=SWIG_TypeCast(cast,usr->ptr,&newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
+ return SWIG_OK; /* ok */
+ }
+ }
+ return SWIG_ERROR; /* error */
+}
+
+SWIGRUNTIME void* SWIG_Lua_MustGetPtr(lua_State* L,int index,swig_type_info *type,int flags,
+ int argnum,const char* func_name){
+ void* result;
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,index,&result,type,flags))){
+ lua_pushfstring(L,"Error in %s, expected a %s at argument number %d\n",
+ func_name,(type && type->str)?type->str:"void*",argnum);
+ lua_error(L);
+ }
+ return result;
+}
+
+/* pushes a packed userdata. user for member fn pointers only */
+SWIGRUNTIME void SWIG_Lua_NewPackedObj(lua_State* L,void* ptr,size_t size,swig_type_info *type)
+{
+ swig_lua_rawdata* raw;
+ assert(ptr); /* not acceptable to pass in a NULL value */
+ raw=(swig_lua_rawdata*)lua_newuserdata(L,sizeof(swig_lua_rawdata)-1+size); /* alloc data */
+ raw->type=type;
+ raw->own=0;
+ memcpy(raw->data,ptr,size); /* copy the data */
+ _SWIG_Lua_AddMetatable(L,type); /* add metatable */
+}
+
+/* converts a packed userdata. user for member fn pointers only */
+SWIGRUNTIME int SWIG_Lua_ConvertPacked(lua_State* L,int index,void* ptr,size_t size,swig_type_info *type)
+{
+ swig_lua_rawdata* raw;
+ raw=(swig_lua_rawdata*)lua_touserdata(L,index); /* get data */
+ if (!raw) return SWIG_ERROR; /* error */
+ if (type==0 || type==raw->type) /* void* or identical type */
+ {
+ memcpy(ptr,raw->data,size); /* copy it */
+ return SWIG_OK; /* ok */
+ }
+ return SWIG_ERROR; /* error */
+}
+
+/* a function to get the typestring of a piece of data */
+SWIGRUNTIME const char *SWIG_Lua_typename(lua_State *L, int tp)
+{
+ swig_lua_userdata* usr;
+ if (lua_isuserdata(L,tp))
+ {
+ usr=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */
+ if (usr && usr->type && usr->type->str)
+ return usr->type->str;
+ return "userdata (unknown type)";
+ }
+ return lua_typename(L,lua_type(L,tp));
+}
+
+/* lua callable function to get the userdata's type */
+SWIGRUNTIME int SWIG_Lua_type(lua_State* L)
+{
+ lua_pushstring(L,SWIG_Lua_typename(L,1));
+ return 1;
+}
+
+/* lua callable function to compare userdata's value
+the issue is that two userdata may point to the same thing
+but to lua, they are different objects */
+SWIGRUNTIME int SWIG_Lua_equal(lua_State* L)
+{
+ int result;
+ swig_lua_userdata *usr1,*usr2;
+ if (!lua_isuserdata(L,1) || !lua_isuserdata(L,2)) /* just in case */
+ return 0; /* nil reply */
+ usr1=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */
+ usr2=(swig_lua_userdata*)lua_touserdata(L,2); /* get data */
+ /*result=(usr1->ptr==usr2->ptr && usr1->type==usr2->type); only works if type is the same*/
+ result=(usr1->ptr==usr2->ptr);
+ lua_pushboolean(L,result);
+ return 1;
+}
+
+/* -----------------------------------------------------------------------------
+ * global variable support code: class/struct typemap functions
+ * ----------------------------------------------------------------------------- */
+
+/* Install Constants */
+SWIGINTERN void
+SWIG_Lua_InstallConstants(lua_State* L, swig_lua_const_info constants[]) {
+ int i;
+ for (i = 0; constants[i].type; i++) {
+ switch(constants[i].type) {
+ case SWIG_LUA_INT:
+ lua_pushstring(L,constants[i].name);
+ lua_pushnumber(L,(lua_Number)constants[i].lvalue);
+ lua_rawset(L,-3);
+ break;
+ case SWIG_LUA_FLOAT:
+ lua_pushstring(L,constants[i].name);
+ lua_pushnumber(L,(lua_Number)constants[i].dvalue);
+ lua_rawset(L,-3);
+ break;
+ case SWIG_LUA_CHAR:
+ lua_pushstring(L,constants[i].name);
+ lua_pushfstring(L,"%c",(char)constants[i].lvalue);
+ lua_rawset(L,-3);
+ break;
+ case SWIG_LUA_STRING:
+ lua_pushstring(L,constants[i].name);
+ lua_pushstring(L,(char *) constants[i].pvalue);
+ lua_rawset(L,-3);
+ break;
+ case SWIG_LUA_POINTER:
+ lua_pushstring(L,constants[i].name);
+ SWIG_NewPointerObj(L,constants[i].pvalue, *(constants[i]).ptype,0);
+ lua_rawset(L,-3);
+ break;
+ case SWIG_LUA_BINARY:
+ lua_pushstring(L,constants[i].name);
+ SWIG_NewMemberObj(L,constants[i].pvalue,constants[i].lvalue,*(constants[i]).ptype);
+ lua_rawset(L,-3);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/* -----------------------------------------------------------------------------
+ * executing lua code from within the wrapper
+ * ----------------------------------------------------------------------------- */
+
+#ifndef SWIG_DOSTRING_FAIL /* Allows redefining of error function */
+#define SWIG_DOSTRING_FAIL(S) fprintf(stderr,"%s\n",S)
+#endif
+/* Executes a C string in Lua a really simple way of calling lua from C
+Unfortunately lua keeps changing its API's, so we need a conditional compile
+In lua 5.0.X its lua_dostring()
+In lua 5.1.X its luaL_dostring()
+*/
+SWIGINTERN int
+SWIG_Lua_dostring(lua_State *L, const char* str) {
+ int ok,top;
+ if (str==0 || str[0]==0) return 0; /* nothing to do */
+ top=lua_gettop(L); /* save stack */
+#if (defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM>=501))
+ ok=luaL_dostring(L,str); /* looks like this is lua 5.1.X or later, good */
+#else
+ ok=lua_dostring(L,str); /* might be lua 5.0.x, using lua_dostring */
+#endif
+ if (ok!=0) {
+ SWIG_DOSTRING_FAIL(lua_tostring(L,-1));
+ }
+ lua_settop(L,top); /* restore the stack */
+ return ok;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* ------------------------------ end luarun.swg ------------------------------ */
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_ESLconnection swig_types[0]
+#define SWIGTYPE_p_ESLevent swig_types[1]
+#define SWIGTYPE_p_esl_event_t swig_types[2]
+#define SWIGTYPE_p_esl_priority_t swig_types[3]
+static swig_type_info *swig_types[5];
+static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#define SWIG_name "ESL"
+#define SWIG_init luaopen_ESL
+#define SWIG_init_user luaopen_ESL_user
+
+#define SWIG_LUACODE luaopen_ESL_luacode
+
+
+namespace swig {
+typedef struct{} LANGUAGE_OBJ;
+}
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+static int _wrap_ESLevent_event_set(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+
+ SWIG_check_num_args("event",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("event",1,"ESLevent *");
+ if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("event",2,"esl_event_t *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_event_set",1,SWIGTYPE_p_ESLevent);
+ }
+
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_esl_event_t,SWIG_POINTER_DISOWN))){
+ SWIG_fail_ptr("ESLevent_event_set",2,SWIGTYPE_p_esl_event_t);
+ }
+
+ if (arg1) (arg1)->event = arg2;
+
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_event_get(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+
+ SWIG_check_num_args("event",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("event",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_event_get",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (esl_event_t *) ((arg1)->event);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_esl_event_t,0); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_serialized_string_set(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ SWIG_check_num_args("serialized_string",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialized_string",1,"ESLevent *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("serialized_string",2,"char *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_serialized_string_set",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ {
+ if (arg1->serialized_string) delete [] arg1->serialized_string;
+ if (arg2) {
+ arg1->serialized_string = (char *) (new char[strlen((const char *)arg2)+1]);
+ strcpy((char *)arg1->serialized_string, (const char *)arg2);
+ } else {
+ arg1->serialized_string = 0;
+ }
+ }
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_serialized_string_get(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("serialized_string",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialized_string",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_serialized_string_get",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (char *) ((arg1)->serialized_string);
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_mine_set(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+
+ SWIG_check_num_args("mine",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("mine",1,"ESLevent *");
+ if(!lua_isnumber(L,2)) SWIG_fail_arg("mine",2,"int");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_mine_set",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (int)lua_tonumber(L, 2);
+ if (arg1) (arg1)->mine = arg2;
+
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_mine_get(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+
+ SWIG_check_num_args("mine",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("mine",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_mine_get",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (int) ((arg1)->mine);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLevent__SWIG_0(lua_State* L) {
+ int SWIG_arg = -1;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("ESLevent",1,2)
+ if(!lua_isstring(L,1)) SWIG_fail_arg("ESLevent",1,"char const *");
+ if(lua_gettop(L)>=2 && !lua_isstring(L,2)) SWIG_fail_arg("ESLevent",2,"char const *");
+ arg1 = (char *)lua_tostring(L, 1);
+ if(lua_gettop(L)>=2){
+ arg2 = (char *)lua_tostring(L, 2);
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLevent__SWIG_1(lua_State* L) {
+ int SWIG_arg = -1;
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("ESLevent",1,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ESLevent",1,"esl_event_t *");
+ if(lua_gettop(L)>=2 && !lua_isnumber(L,2)) SWIG_fail_arg("ESLevent",2,"int");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_esl_event_t,0))){
+ SWIG_fail_ptr("new_ESLevent",1,SWIGTYPE_p_esl_event_t);
+ }
+
+ if(lua_gettop(L)>=2){
+ arg2 = (int)lua_tonumber(L, 2);
+ }
+ result = (ESLevent *)new ESLevent(arg1,arg2);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLevent__SWIG_2(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("ESLevent",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ESLevent",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("new_ESLevent",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (ESLevent *)new ESLevent(arg1);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLevent(lua_State* L) {
+ int argc;
+ int argv[3]={
+ 1,2,3
+ };
+
+ argc = lua_gettop(L);
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_esl_event_t, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_1(L);
+ }
+ {
+ _v = lua_isnumber(L,argv[1]);
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_1(L);
+ }
+ }
+ }
+ if (argc == 1) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_ESLevent, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_2(L);
+ }
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ {
+ _v = lua_isstring(L,argv[0]);
+ }
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_0(L);
+ }
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_0(L);
+ }
+ }
+ }
+
+ lua_pushstring(L,"No matching function for overloaded 'new_ESLevent'");
+ lua_error(L);return 0;
+}
+
+
+static int _wrap_delete_ESLevent(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+
+ SWIG_check_num_args("ESLevent",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ESLevent",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,SWIG_POINTER_DISOWN))){
+ SWIG_fail_ptr("delete_ESLevent",1,SWIGTYPE_p_ESLevent);
+ }
+
+ delete arg1;
+
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_serialize(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("serialize",1,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialize",1,"ESLevent *");
+ if(lua_gettop(L)>=2 && !lua_isstring(L,2)) SWIG_fail_arg("serialize",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_serialize",1,SWIGTYPE_p_ESLevent);
+ }
+
+ if(lua_gettop(L)>=2){
+ arg2 = (char *)lua_tostring(L, 2);
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_setPriority(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ esl_priority_t *argp2 ;
+
+ SWIG_check_num_args("setPriority",1,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setPriority",1,"ESLevent *");
+ if(lua_gettop(L)>=2 && !lua_isuserdata(L,2)) SWIG_fail_arg("setPriority",2,"esl_priority_t");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_setPriority",1,SWIGTYPE_p_ESLevent);
+ }
+
+ if(lua_gettop(L)>=2){
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_esl_priority_t,0))){
+ SWIG_fail_ptr("ESLevent_setPriority",2,SWIGTYPE_p_esl_priority_t);
+ }
+ arg2 = *argp2;
+ }
+ result = (bool)(arg1)->setPriority(arg2);
+ SWIG_arg=0;
+ lua_pushboolean(L,(int)(result==true)); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_getHeader(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("getHeader",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getHeader",1,"ESLevent *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("getHeader",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_getHeader",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_getBody(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("getBody",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getBody",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_getBody",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (char *)(arg1)->getBody();
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_getType(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("getType",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getType",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_getType",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (char *)(arg1)->getType();
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_addBody(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+
+ SWIG_check_num_args("addBody",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("addBody",1,"ESLevent *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("addBody",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_addBody",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushboolean(L,(int)(result==true)); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_addHeader(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+
+ SWIG_check_num_args("addHeader",3,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("addHeader",1,"ESLevent *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("addHeader",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("addHeader",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_addHeader",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ lua_pushboolean(L,(int)(result==true)); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_delHeader(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+
+ SWIG_check_num_args("delHeader",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("delHeader",1,"ESLevent *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("delHeader",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_delHeader",1,SWIGTYPE_p_ESLevent);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushboolean(L,(int)(result==true)); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_firstHeader(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("firstHeader",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("firstHeader",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_firstHeader",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (char *)(arg1)->firstHeader();
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLevent_nextHeader(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("nextHeader",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("nextHeader",1,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLevent_nextHeader",1,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (char *)(arg1)->nextHeader();
+ SWIG_arg=0;
+ lua_pushstring(L,(const char*)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static void swig_delete_ESLevent(void *obj) {
+ESLevent *arg1 = (ESLevent *) obj;
+delete arg1;
+}
+static swig_lua_method swig_ESLevent_methods[] = {
+ {"serialize", _wrap_ESLevent_serialize},
+ {"setPriority", _wrap_ESLevent_setPriority},
+ {"getHeader", _wrap_ESLevent_getHeader},
+ {"getBody", _wrap_ESLevent_getBody},
+ {"getType", _wrap_ESLevent_getType},
+ {"addBody", _wrap_ESLevent_addBody},
+ {"addHeader", _wrap_ESLevent_addHeader},
+ {"delHeader", _wrap_ESLevent_delHeader},
+ {"firstHeader", _wrap_ESLevent_firstHeader},
+ {"nextHeader", _wrap_ESLevent_nextHeader},
+ {0,0}
+};
+static swig_lua_attribute swig_ESLevent_attributes[] = {
+ { "event", _wrap_ESLevent_event_get, _wrap_ESLevent_event_set},
+ { "serialized_string", _wrap_ESLevent_serialized_string_get, _wrap_ESLevent_serialized_string_set},
+ { "mine", _wrap_ESLevent_mine_get, _wrap_ESLevent_mine_set},
+ {0,0,0}
+};
+static swig_lua_class *swig_ESLevent_bases[] = {0};
+static const char *swig_ESLevent_base_names[] = {0};
+static swig_lua_class _wrap_class_ESLevent = { "ESLevent", &SWIGTYPE_p_ESLevent,_wrap_new_ESLevent, swig_delete_ESLevent, swig_ESLevent_methods, swig_ESLevent_attributes, swig_ESLevent_bases, swig_ESLevent_base_names };
+
+static int _wrap_new_ESLconnection__SWIG_0(lua_State* L) {
+ int SWIG_arg = -1;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+
+ SWIG_check_num_args("ESLconnection",3,3)
+ if(!lua_isstring(L,1)) SWIG_fail_arg("ESLconnection",1,"char const *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("ESLconnection",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("ESLconnection",3,"char const *");
+ arg1 = (char *)lua_tostring(L, 1);
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLconnection,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLconnection__SWIG_1(lua_State* L) {
+ int SWIG_arg = -1;
+ int arg1 ;
+ ESLconnection *result = 0 ;
+
+ SWIG_check_num_args("ESLconnection",1,1)
+ if(!lua_isnumber(L,1)) SWIG_fail_arg("ESLconnection",1,"int");
+ arg1 = (int)lua_tonumber(L, 1);
+ result = (ESLconnection *)new ESLconnection(arg1);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLconnection,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_new_ESLconnection(lua_State* L) {
+ int argc;
+ int argv[4]={
+ 1,2,3,4
+ };
+
+ argc = lua_gettop(L);
+ if (argc == 1) {
+ int _v;
+ {
+ _v = lua_isnumber(L,argv[0]);
+ }
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_1(L);
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ {
+ _v = lua_isstring(L,argv[0]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[2]);
+ }
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_0(L);
+ }
+ }
+ }
+ }
+
+ lua_pushstring(L,"No matching function for overloaded 'new_ESLconnection'");
+ lua_error(L);return 0;
+}
+
+
+static int _wrap_delete_ESLconnection(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+
+ SWIG_check_num_args("ESLconnection",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ESLconnection",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,SWIG_POINTER_DISOWN))){
+ SWIG_fail_ptr("delete_ESLconnection",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ delete arg1;
+
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_socketDescriptor(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ SWIG_check_num_args("socketDescriptor",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("socketDescriptor",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_socketDescriptor",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ result = (int)(arg1)->socketDescriptor();
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_connected(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ SWIG_check_num_args("connected",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("connected",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_connected",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ result = (int)(arg1)->connected();
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_getInfo(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("getInfo",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getInfo",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_getInfo",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ result = (ESLevent *)(arg1)->getInfo();
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_send(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ SWIG_check_num_args("send",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("send",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("send",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_send",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (int)(arg1)->send((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_sendRecv(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("sendRecv",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sendRecv",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("sendRecv",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_sendRecv",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_api(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("api",2,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("api",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("api",2,"char const *");
+ if(lua_gettop(L)>=3 && !lua_isstring(L,3)) SWIG_fail_arg("api",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_api",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ if(lua_gettop(L)>=3){
+ arg3 = (char *)lua_tostring(L, 3);
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_bgapi(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("bgapi",2,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("bgapi",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("bgapi",2,"char const *");
+ if(lua_gettop(L)>=3 && !lua_isstring(L,3)) SWIG_fail_arg("bgapi",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_bgapi",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ if(lua_gettop(L)>=3){
+ arg3 = (char *)lua_tostring(L, 3);
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_sendEvent(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+
+ SWIG_check_num_args("sendEvent",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sendEvent",1,"ESLconnection *");
+ if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("sendEvent",2,"ESLevent *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_sendEvent",1,SWIGTYPE_p_ESLconnection);
+ }
+
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_ESLevent,0))){
+ SWIG_fail_ptr("ESLconnection_sendEvent",2,SWIGTYPE_p_ESLevent);
+ }
+
+ result = (int)(arg1)->sendEvent(arg2);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_recvEvent(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("recvEvent",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recvEvent",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_recvEvent",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ result = (ESLevent *)(arg1)->recvEvent();
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_recvEventTimed(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("recvEventTimed",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recvEventTimed",1,"ESLconnection *");
+ if(!lua_isnumber(L,2)) SWIG_fail_arg("recvEventTimed",2,"int");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_recvEventTimed",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (int)lua_tonumber(L, 2);
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_filter(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+
+ SWIG_check_num_args("filter",3,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("filter",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("filter",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("filter",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_filter",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ SWIG_NewPointerObj(L,result,SWIGTYPE_p_ESLevent,1); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_events(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+
+ SWIG_check_num_args("events",3,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("events",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("events",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("events",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_events",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_execute(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+
+ SWIG_check_num_args("execute",2,4)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("execute",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("execute",2,"char const *");
+ if(lua_gettop(L)>=3 && !lua_isstring(L,3)) SWIG_fail_arg("execute",3,"char const *");
+ if(lua_gettop(L)>=4 && !lua_isstring(L,4)) SWIG_fail_arg("execute",4,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_execute",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ if(lua_gettop(L)>=3){
+ arg3 = (char *)lua_tostring(L, 3);
+ }
+ if(lua_gettop(L)>=4){
+ arg4 = (char *)lua_tostring(L, 4);
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_executeAsync(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+
+ SWIG_check_num_args("executeAsync",2,4)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("executeAsync",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("executeAsync",2,"char const *");
+ if(lua_gettop(L)>=3 && !lua_isstring(L,3)) SWIG_fail_arg("executeAsync",3,"char const *");
+ if(lua_gettop(L)>=4 && !lua_isstring(L,4)) SWIG_fail_arg("executeAsync",4,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_executeAsync",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ if(lua_gettop(L)>=3){
+ arg3 = (char *)lua_tostring(L, 3);
+ }
+ if(lua_gettop(L)>=4){
+ arg4 = (char *)lua_tostring(L, 4);
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_setAsyncExecute(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ SWIG_check_num_args("setAsyncExecute",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setAsyncExecute",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("setAsyncExecute",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_setAsyncExecute",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_setEventLock(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+
+ SWIG_check_num_args("setEventLock",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setEventLock",1,"ESLconnection *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("setEventLock",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_setEventLock",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_ESLconnection_disconnect(lua_State* L) {
+ int SWIG_arg = -1;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+
+ SWIG_check_num_args("disconnect",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("disconnect",1,"ESLconnection *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLconnection,0))){
+ SWIG_fail_ptr("ESLconnection_disconnect",1,SWIGTYPE_p_ESLconnection);
+ }
+
+ result = (int)(arg1)->disconnect();
+ SWIG_arg=0;
+ lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static void swig_delete_ESLconnection(void *obj) {
+ESLconnection *arg1 = (ESLconnection *) obj;
+delete arg1;
+}
+static swig_lua_method swig_ESLconnection_methods[] = {
+ {"socketDescriptor", _wrap_ESLconnection_socketDescriptor},
+ {"connected", _wrap_ESLconnection_connected},
+ {"getInfo", _wrap_ESLconnection_getInfo},
+ {"send", _wrap_ESLconnection_send},
+ {"sendRecv", _wrap_ESLconnection_sendRecv},
+ {"api", _wrap_ESLconnection_api},
+ {"bgapi", _wrap_ESLconnection_bgapi},
+ {"sendEvent", _wrap_ESLconnection_sendEvent},
+ {"recvEvent", _wrap_ESLconnection_recvEvent},
+ {"recvEventTimed", _wrap_ESLconnection_recvEventTimed},
+ {"filter", _wrap_ESLconnection_filter},
+ {"events", _wrap_ESLconnection_events},
+ {"execute", _wrap_ESLconnection_execute},
+ {"executeAsync", _wrap_ESLconnection_executeAsync},
+ {"setAsyncExecute", _wrap_ESLconnection_setAsyncExecute},
+ {"setEventLock", _wrap_ESLconnection_setEventLock},
+ {"disconnect", _wrap_ESLconnection_disconnect},
+ {0,0}
+};
+static swig_lua_attribute swig_ESLconnection_attributes[] = {
+ {0,0,0}
+};
+static swig_lua_class *swig_ESLconnection_bases[] = {0};
+static const char *swig_ESLconnection_base_names[] = {0};
+static swig_lua_class _wrap_class_ESLconnection = { "ESLconnection", &SWIGTYPE_p_ESLconnection,_wrap_new_ESLconnection, swig_delete_ESLconnection, swig_ESLconnection_methods, swig_ESLconnection_attributes, swig_ESLconnection_bases, swig_ESLconnection_base_names };
+
+static int _wrap_eslSetLogLevel(lua_State* L) {
+ int SWIG_arg = -1;
+ int arg1 ;
+
+ SWIG_check_num_args("eslSetLogLevel",1,1)
+ if(!lua_isnumber(L,1)) SWIG_fail_arg("eslSetLogLevel",1,"int");
+ arg1 = (int)lua_tonumber(L, 1);
+ eslSetLogLevel(arg1);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+static const struct luaL_reg swig_commands[] = {
+ { "eslSetLogLevel", _wrap_eslSetLogLevel},
+ {0,0}
+};
+
+static swig_lua_var_info swig_variables[] = {
+ {0,0,0}
+};
+
+static swig_lua_const_info swig_constants[] = {
+ {0,0,0,0,0,0}
+};
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_ESLconnection = {"_p_ESLconnection", "ESLconnection *", 0, 0, (void*)&_wrap_class_ESLconnection, 0};
+static swig_type_info _swigt__p_ESLevent = {"_p_ESLevent", "ESLevent *", 0, 0, (void*)&_wrap_class_ESLevent, 0};
+static swig_type_info _swigt__p_esl_event_t = {"_p_esl_event_t", "esl_event_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_priority_t = {"_p_esl_priority_t", "esl_priority_t *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_ESLconnection,
+ &_swigt__p_ESLevent,
+ &_swigt__p_esl_event_t,
+ &_swigt__p_esl_priority_t,
+};
+
+static swig_cast_info _swigc__p_ESLconnection[] = { {&_swigt__p_ESLconnection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESLevent[] = { {&_swigt__p_ESLevent, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_event_t[] = { {&_swigt__p_esl_event_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_priority_t[] = { {&_swigt__p_esl_priority_t, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_ESLconnection,
+ _swigc__p_ESLevent,
+ _swigc__p_esl_event_t,
+ _swigc__p_esl_priority_t,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ * 1) If the cast->type has already been loaded AND the type we are adding
+ * casting info to has not been loaded (it is in this module), THEN we
+ * replace the cast->type pointer with the type pointer that has already
+ * been loaded.
+ * 2) If BOTH types (the one we are adding casting info to, and the
+ * cast->type) are loaded, THEN the cast info has already been loaded by
+ * the previous module so we just ignore it.
+ * 3) Finally, if cast->type has not already been loaded, then we add that
+ * swig_cast_info to the linked list (because the cast->type) pointer will
+ * be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+ size_t i;
+ swig_module_info *module_head, *iter;
+ int found, init;
+
+ clientdata = clientdata;
+
+ /* check to see if the circular list has been setup, if not, set it up */
+ if (swig_module.next==0) {
+ /* Initialize the swig_module */
+ swig_module.type_initial = swig_type_initial;
+ swig_module.cast_initial = swig_cast_initial;
+ swig_module.next = &swig_module;
+ init = 1;
+ } else {
+ init = 0;
+ }
+
+ /* Try and load any already created modules */
+ module_head = SWIG_GetModule(clientdata);
+ if (!module_head) {
+ /* This is the first module loaded for this interpreter */
+ /* so set the swig module into the interpreter */
+ SWIG_SetModule(clientdata, &swig_module);
+ module_head = &swig_module;
+ } else {
+ /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+ found=0;
+ iter=module_head;
+ do {
+ if (iter==&swig_module) {
+ found=1;
+ break;
+ }
+ iter=iter->next;
+ } while (iter!= module_head);
+
+ /* if the is found in the list, then all is done and we may leave */
+ if (found) return;
+ /* otherwise we must add out module into the list */
+ swig_module.next = module_head->next;
+ module_head->next = &swig_module;
+ }
+
+ /* When multiple interpeters are used, a module could have already been initialized in
+ a different interpreter, but not yet have a pointer in this interpreter.
+ In this case, we do not want to continue adding types... everything should be
+ set up already */
+ if (init == 0) return;
+
+ /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+ for (i = 0; i < swig_module.size; ++i) {
+ swig_type_info *type = 0;
+ swig_type_info *ret;
+ swig_cast_info *cast;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+
+ /* if there is another module already loaded */
+ if (swig_module.next != &swig_module) {
+ type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+ }
+ if (type) {
+ /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+ if (swig_module.type_initial[i]->clientdata) {
+ type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+ }
+ } else {
+ type = swig_module.type_initial[i];
+ }
+
+ /* Insert casting types */
+ cast = swig_module.cast_initial[i];
+ while (cast->type) {
+
+ /* Don't need to add information already in the list */
+ ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+ if (swig_module.next != &swig_module) {
+ ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+ }
+ if (ret) {
+ if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+ cast->type = ret;
+ ret = 0;
+ } else {
+ /* Check for casting already in the list */
+ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+ if (!ocast) ret = 0;
+ }
+ }
+
+ if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+ if (type->cast) {
+ type->cast->prev = cast;
+ cast->next = type->cast;
+ }
+ type->cast = cast;
+ }
+ cast++;
+ }
+ /* Set entry in modules->types array equal to the type */
+ swig_module.types[i] = type;
+ }
+ swig_module.types[i] = 0;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+ for (i = 0; i < swig_module.size; ++i) {
+ int j = 0;
+ swig_cast_info *cast = swig_module.cast_initial[i];
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+ while (cast->type) {
+ printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+ cast++;
+ ++j;
+ }
+ printf("---- Total casts: %d\n",j);
+ }
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types. It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+ size_t i;
+ swig_cast_info *equiv;
+ static int init_run = 0;
+
+ if (init_run) return;
+ init_run = 1;
+
+ for (i = 0; i < swig_module.size; i++) {
+ if (swig_module.types[i]->clientdata) {
+ equiv = swig_module.types[i]->cast;
+ while (equiv) {
+ if (!equiv->converter) {
+ if (equiv->type && !equiv->type->clientdata)
+ SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+ }
+ equiv = equiv->next;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+#if 0
+{ /* c-mode */
+#endif
+}
+#endif
+
+
+
+/* Forward declaration of where the user's %init{} gets inserted */
+void SWIG_init_user(lua_State* L );
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* this is the initialization function
+ added at the very end of the code
+ the function is always called SWIG_init, but an eariler #define will rename it
+*/
+SWIGEXPORT int SWIG_init(lua_State* L)
+{
+ int i;
+ /* start with global table */
+ lua_pushvalue(L,LUA_GLOBALSINDEX);
+ /* SWIG's internal initalisation */
+ SWIG_InitializeModule((void*)L);
+ SWIG_PropagateClientData();
+ /* add a global fn */
+ SWIG_Lua_add_function(L,"swig_type",SWIG_Lua_type);
+ SWIG_Lua_add_function(L,"swig_equals",SWIG_Lua_equal);
+ /* begin the module (its a table with the same name as the module) */
+ SWIG_Lua_module_begin(L,SWIG_name);
+ /* add commands/functions */
+ for (i = 0; swig_commands[i].name; i++){
+ SWIG_Lua_module_add_function(L,swig_commands[i].name,swig_commands[i].func);
+ }
+ /* add variables */
+ for (i = 0; swig_variables[i].name; i++){
+ SWIG_Lua_module_add_variable(L,swig_variables[i].name,swig_variables[i].get,swig_variables[i].set);
+ }
+ /* set up base class pointers (the hierachy) */
+ for (i = 0; swig_types[i]; i++){
+ if (swig_types[i]->clientdata){
+ SWIG_Lua_init_base_class(L,(swig_lua_class*)(swig_types[i]->clientdata));
+ }
+ }
+ /* additional registration structs & classes in lua */
+ for (i = 0; swig_types[i]; i++){
+ if (swig_types[i]->clientdata){
+ SWIG_Lua_class_register(L,(swig_lua_class*)(swig_types[i]->clientdata));
+ }
+ }
+ /* constants */
+ SWIG_Lua_InstallConstants(L,swig_constants);
+ /* invoke user-specific initialization */
+ SWIG_init_user(L);
+ /* end module */
+ lua_pop(L,1); /* tidy stack (remove module table)*/
+ lua_pop(L,1); /* tidy stack (remove global table)*/
+ return 1;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+
+const char* SWIG_LUACODE=
+ "";
+
+void SWIG_init_user(lua_State* L)
+{
+ /* exec Lua code if applicable */
+ SWIG_Lua_dostring(L,SWIG_LUACODE);
+}
+
Copied: freeswitch/branches/seven/libs/esl/perl (from rev 14471, freeswitch/trunk/libs/esl/perl)
Copied: freeswitch/branches/seven/libs/esl/perl/ESL (from rev 14471, freeswitch/trunk/libs/esl/perl/ESL)
Deleted: freeswitch/branches/seven/libs/esl/perl/ESL/IVR.pm
Copied: freeswitch/branches/seven/libs/esl/perl/ESL/IVR.pm (from rev 14471, freeswitch/trunk/libs/esl/perl/ESL/IVR.pm) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/ESL/IVR.pm (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/ESL/IVR.pm 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,116 @@
+package ESL::IVR;
+use ESL;
+use Data::Dumper;
+
+sub new($$) {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+
+ $self->{_esl} = new ESL::ESLconnection(fileno(STDIN));
+ $self->{_info} = $self->{_esl}->getInfo();
+ $self->{_uuid} = $self->{_info}->getHeader("unique-id");
+
+ return bless($self, $class);
+
+}
+
+sub getHeader($;) {
+ my $self = shift;
+
+ return $self->{_info} ? $self->{_info}->getHeader(shift) : undef;
+}
+
+sub execute($;) {
+ my $self = shift;
+ return $self->{_esl}->execute(@_);
+}
+
+sub api($;) {
+ my $self = shift;
+ return $self->{_esl}->api(@_);
+}
+
+sub disconnect($;) {
+ my $self = shift;
+ return $self->{_esl}->disconnect(@_);
+}
+
+sub getVar($;) {
+ my $self = shift;
+ my ($var) = @_;
+ my $e = $self->api("uuid_getvar", "$self->{_uuid} $var");
+ my $input;
+
+ if ($e) {
+ $input = $e->getBody();
+ if ($input && $input eq "_undef_") {
+ $input = undef;
+ }
+ }
+
+ return $input;
+
+}
+
+sub setVar($;) {
+ my $self = shift;
+ my ($var, $val) = @_;
+ my $e = $self->api("uuid_setvar", "$self->{_uuid} $var $val");
+ my $input;
+ if ($e) {
+ $input = $e->getBody() . "\n";
+ if ($input eq "_undef_") {
+ $input = undef;
+ }
+ }
+
+ chomp $input;
+
+ return $input;
+
+}
+
+sub playAndGetDigits($;) {
+ my $self = shift;
+ my ($min, $max, $tries, $to, $term, $file, $invalid_file, $var, $regex) = @_;
+
+ if (!$self->{_esl}->connected()) {
+ return undef;
+ }
+
+ $self->execute("play_and_get_digits", "$min $max $tries $to $term $file $invalid_file $var $regex");
+
+ return $self->getVar($var);
+
+}
+
+sub read($;) {
+ my $self = shift;
+ my ($min, $max, $file, $var, $to, $term) = @_;
+
+ if (!$self->{_esl}->connected()) {
+ return undef;
+ }
+
+ $self->execute("read", "$min $max $file $var $to $term");
+
+ return $self->getVar($var);
+
+}
+
+sub playback($;) {
+ my $self = shift;
+ my ($file) = @_;
+
+ if (!$self->{_esl}->connected()) {
+ return undef;
+ }
+
+ $self->execute("playback", $file);
+ return $self->getVar("playback_terminators_used");
+
+}
+
+
+1;
Deleted: freeswitch/branches/seven/libs/esl/perl/ESL.pm
Copied: freeswitch/branches/seven/libs/esl/perl/ESL.pm (from rev 14471, freeswitch/trunk/libs/esl/perl/ESL.pm) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/ESL.pm (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/ESL.pm 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,165 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 1.3.35
+#
+# Don't modify this file, modify the SWIG interface instead.
+
+package ESL;
+require Exporter;
+require DynaLoader;
+@ISA = qw(Exporter DynaLoader);
+package ESLc;
+bootstrap ESL;
+package ESL;
+@EXPORT = qw( );
+
+# ---------- BASE METHODS -------------
+
+package ESL;
+
+sub TIEHASH {
+ my ($classname,$obj) = @_;
+ return bless $obj, $classname;
+}
+
+sub CLEAR { }
+
+sub FIRSTKEY { }
+
+sub NEXTKEY { }
+
+sub FETCH {
+ my ($self,$field) = @_;
+ my $member_func = "swig_${field}_get";
+ $self->$member_func();
+}
+
+sub STORE {
+ my ($self,$field,$newval) = @_;
+ my $member_func = "swig_${field}_set";
+ $self->$member_func($newval);
+}
+
+sub this {
+ my $ptr = shift;
+ return tied(%$ptr);
+}
+
+
+# ------- FUNCTION WRAPPERS --------
+
+package ESL;
+
+*eslSetLogLevel = *ESLc::eslSetLogLevel;
+
+############# Class : ESL::ESLevent ##############
+
+package ESL::ESLevent;
+use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
+@ISA = qw( ESL );
+%OWNER = ();
+%ITERATORS = ();
+*swig_event_get = *ESLc::ESLevent_event_get;
+*swig_event_set = *ESLc::ESLevent_event_set;
+*swig_serialized_string_get = *ESLc::ESLevent_serialized_string_get;
+*swig_serialized_string_set = *ESLc::ESLevent_serialized_string_set;
+*swig_mine_get = *ESLc::ESLevent_mine_get;
+*swig_mine_set = *ESLc::ESLevent_mine_set;
+sub new {
+ my $pkg = shift;
+ my $self = ESLc::new_ESLevent(@_);
+ bless $self, $pkg if defined($self);
+}
+
+sub DESTROY {
+ return unless $_[0]->isa('HASH');
+ my $self = tied(%{$_[0]});
+ return unless defined $self;
+ delete $ITERATORS{$self};
+ if (exists $OWNER{$self}) {
+ ESLc::delete_ESLevent($self);
+ delete $OWNER{$self};
+ }
+}
+
+*serialize = *ESLc::ESLevent_serialize;
+*setPriority = *ESLc::ESLevent_setPriority;
+*getHeader = *ESLc::ESLevent_getHeader;
+*getBody = *ESLc::ESLevent_getBody;
+*getType = *ESLc::ESLevent_getType;
+*addBody = *ESLc::ESLevent_addBody;
+*addHeader = *ESLc::ESLevent_addHeader;
+*delHeader = *ESLc::ESLevent_delHeader;
+*firstHeader = *ESLc::ESLevent_firstHeader;
+*nextHeader = *ESLc::ESLevent_nextHeader;
+sub DISOWN {
+ my $self = shift;
+ my $ptr = tied(%$self);
+ delete $OWNER{$ptr};
+}
+
+sub ACQUIRE {
+ my $self = shift;
+ my $ptr = tied(%$self);
+ $OWNER{$ptr} = 1;
+}
+
+
+############# Class : ESL::ESLconnection ##############
+
+package ESL::ESLconnection;
+use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
+@ISA = qw( ESL );
+%OWNER = ();
+%ITERATORS = ();
+sub new {
+ my $pkg = shift;
+ my $self = ESLc::new_ESLconnection(@_);
+ bless $self, $pkg if defined($self);
+}
+
+sub DESTROY {
+ return unless $_[0]->isa('HASH');
+ my $self = tied(%{$_[0]});
+ return unless defined $self;
+ delete $ITERATORS{$self};
+ if (exists $OWNER{$self}) {
+ ESLc::delete_ESLconnection($self);
+ delete $OWNER{$self};
+ }
+}
+
+*socketDescriptor = *ESLc::ESLconnection_socketDescriptor;
+*connected = *ESLc::ESLconnection_connected;
+*getInfo = *ESLc::ESLconnection_getInfo;
+*send = *ESLc::ESLconnection_send;
+*sendRecv = *ESLc::ESLconnection_sendRecv;
+*api = *ESLc::ESLconnection_api;
+*bgapi = *ESLc::ESLconnection_bgapi;
+*sendEvent = *ESLc::ESLconnection_sendEvent;
+*recvEvent = *ESLc::ESLconnection_recvEvent;
+*recvEventTimed = *ESLc::ESLconnection_recvEventTimed;
+*filter = *ESLc::ESLconnection_filter;
+*events = *ESLc::ESLconnection_events;
+*execute = *ESLc::ESLconnection_execute;
+*executeAsync = *ESLc::ESLconnection_executeAsync;
+*setAsyncExecute = *ESLc::ESLconnection_setAsyncExecute;
+*setEventLock = *ESLc::ESLconnection_setEventLock;
+*disconnect = *ESLc::ESLconnection_disconnect;
+sub DISOWN {
+ my $self = shift;
+ my $ptr = tied(%$self);
+ delete $OWNER{$ptr};
+}
+
+sub ACQUIRE {
+ my $self = shift;
+ my $ptr = tied(%$self);
+ $OWNER{$ptr} = 1;
+}
+
+
+# ------- VARIABLE STUBS --------
+
+package ESL;
+
+1;
Deleted: freeswitch/branches/seven/libs/esl/perl/Makefile
Copied: freeswitch/branches/seven/libs/esl/perl/Makefile (from rev 14471, freeswitch/trunk/libs/esl/perl/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+PERL=$(shell which perl)
+PERL_LIBDIR=-L$(shell perl -MConfig -e 'print $$Config{archlib}')/CORE
+PERL_LIBS=$(shell perl -MConfig -e 'print $$Config{libs}')
+LOCAL_CFLAGS=-w -DMULTIPLICITY $(shell $(PERL) -MExtUtils::Embed -e ccopts) -DEMBED_PERL
+LOCAL_LDFLAGS=$(shell $(PERL) -MExtUtils::Embed -e ldopts) $(shell $(PERL) -MConfig -e 'print $$Config{libs}')
+GCC_WARNING_JUNK=-w
+PERL_INC=$(shell $(PERL) -MExtUtils::Embed -e perl_inc)
+all: ESL.so
+
+esl_wrap.cpp:
+ swig -module ESL -shadow -perl5 -c++ -DMULTIPLICITY -I../src/include -o esl_wrap.cpp ../ESL.i
+
+perlxsi.c:
+ $(PERL) -MExtUtils::Embed -e xsinit -- -o perlxsi.c
+
+perlxsi.o: perlxsi.c
+ $(CC) $(CC_CFLAGS) $(CFLAGS) $(LOCAL_CFLAGS) -c perlxsi.c -o perlxsi.o
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(GCC_WARNING_JUNK) $(PERL_INC) -c esl_wrap.cpp -o esl_wrap.o
+
+ESL.so: esl_wrap.o perlxsi.o
+ $(CXX) $(SOLINK) esl_wrap.o perlxsi.o $(MYLIB) $(LOCAL_LDFLAGS) -o ESL.so -L. $(LIBS)
+
+clean:
+ rm -f *.o *.so *~
+
+swigclean:
+ rm -f esl_wrap.* ESL.so ESL.pm perlxsi.*
+
+reswig: swigclean esl_wrap.cpp perlxsi.c
+
Deleted: freeswitch/branches/seven/libs/esl/perl/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/perl/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/perl/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3862 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGPERL
+#define SWIG_CASTRANK_MODE
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic CAPI SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+ or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+ creating a static or dynamic library from the swig runtime code.
+ In 99.9% of the cases, swig just needs to declare them as 'static'.
+
+ But only do this if is strictly necessary, ie, if you have problems
+ with your compiler or so.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/* Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN 0x1
+#define SWIG_CAST_NEW_MEMORY 0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN 0x1
+
+
+/*
+ Flags/methods for returning states.
+
+ The swig conversion methods, as ConvertPtr, return and integer
+ that tells if the conversion was successful or not. And if not,
+ an error code can be returned (see swigerrors.swg for the codes).
+
+ Use the following macros/flags to set or process the returning
+ states.
+
+ In old swig versions, you usually write code as:
+
+ if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+ // success code
+ } else {
+ //fail code
+ }
+
+ Now you can be more explicit as:
+
+ int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ // fail code
+ }
+
+ that seems to be the same, but now you can also do
+
+ Type *ptr;
+ int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ if (SWIG_IsNewObj(res) {
+ ...
+ delete *ptr;
+ } else {
+ ...
+ }
+ } else {
+ // fail code
+ }
+
+ I.e., now SWIG_ConvertPtr can return new objects and you can
+ identify the case and take care of the deallocation. Of course that
+ requires also to SWIG_ConvertPtr to return new result values, as
+
+ int SWIG_ConvertPtr(obj, ptr,...) {
+ if (<obj is ok>) {
+ if (<need new object>) {
+ *ptr = <ptr to new allocated object>;
+ return SWIG_NEWOBJ;
+ } else {
+ *ptr = <ptr to old object>;
+ return SWIG_OLDOBJ;
+ }
+ } else {
+ return SWIG_BADOBJ;
+ }
+ }
+
+ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+ more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+ swig errors code.
+
+ Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+ allows to return the 'cast rank', for example, if you have this
+
+ int food(double)
+ int fooi(int);
+
+ and you call
+
+ food(1) // cast rank '1' (1 -> 1.0)
+ fooi(1) // cast rank '0'
+
+ just use the SWIG_AddCast()/SWIG_CheckState()
+
+
+ */
+#define SWIG_OK (0)
+#define SWIG_ERROR (-1)
+#define SWIG_IsOK(r) (r >= 0)
+#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ (SWIG_ERROR)
+#define SWIG_OLDOBJ (SWIG_OK)
+#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+# ifndef SWIG_TypeRank
+# define SWIG_TypeRank unsigned long
+# endif
+# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
+# define SWIG_MAXCASTRANK (2)
+# endif
+# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
+# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+ return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+ return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+# define SWIG_AddCast
+# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+ const char *name; /* mangled name of this type */
+ const char *str; /* human readable name of this type */
+ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
+ struct swig_cast_info *cast; /* linked list of types that can cast into this type */
+ void *clientdata; /* language specific type data */
+ int owndata; /* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+ swig_type_info *type; /* pointer to type that is equivalent to this type */
+ swig_converter_func converter; /* function to cast the void pointers */
+ struct swig_cast_info *next; /* pointer to next cast in linked list */
+ struct swig_cast_info *prev; /* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+ swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
+ size_t size; /* Number of types in this module */
+ struct swig_module_info *next; /* Pointer to next element in circularly linked list */
+ swig_type_info **type_initial; /* Array of initially generated type structures */
+ swig_cast_info **cast_initial; /* Array of initially generated casting structures */
+ void *clientdata; /* Language specific module data */
+} swig_module_info;
+
+/*
+ Compare two type names skipping the space characters, therefore
+ "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+ Return 0 when the two name types are equivalent, as in
+ strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+ const char *f2, const char *l2) {
+ for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+ while ((*f1 == ' ') && (f1 != l1)) ++f1;
+ while ((*f2 == ' ') && (f2 != l2)) ++f2;
+ if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+ }
+ return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+
+/* think of this as a c++ template<> or a scheme macro */
+#define SWIG_TypeCheck_Template(comparison, ty) \
+ if (ty) { \
+ swig_cast_info *iter = ty->cast; \
+ while (iter) { \
+ if (comparison) { \
+ if (iter == ty->cast) return iter; \
+ /* Move iter to the top of the linked list */ \
+ iter->prev->next = iter->next; \
+ if (iter->next) \
+ iter->next->prev = iter->prev; \
+ iter->next = ty->cast; \
+ iter->prev = 0; \
+ if (ty->cast) ty->cast->prev = iter; \
+ ty->cast = iter; \
+ return iter; \
+ } \
+ iter = iter->next; \
+ } \
+ } \
+ return 0
+
+/*
+ Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
+}
+
+/* Same as previous function, except strcmp is replaced with a pointer comparison */
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
+ SWIG_TypeCheck_Template(iter->type == from, into);
+}
+
+/*
+ Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+ return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+ Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+ swig_type_info *lastty = ty;
+ if (!ty || !ty->dcast) return ty;
+ while (ty && (ty->dcast)) {
+ ty = (*ty->dcast)(ptr);
+ if (ty) lastty = ty;
+ }
+ return lastty;
+}
+
+/*
+ Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+ return ty->name;
+}
+
+/*
+ Return the pretty name associated with this type,
+ that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+ /* The "str" field contains the equivalent pretty names of the
+ type, separated by vertical-bar characters. We choose
+ to print the last name, as it is often (?) the most
+ specific. */
+ if (!type) return NULL;
+ if (type->str != NULL) {
+ const char *last_name = type->str;
+ const char *s;
+ for (s = type->str; *s; s++)
+ if (*s == '|') last_name = s+1;
+ return last_name;
+ }
+ else
+ return type->name;
+}
+
+/*
+ Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+ swig_cast_info *cast = ti->cast;
+ /* if (ti->clientdata == clientdata) return; */
+ ti->clientdata = clientdata;
+
+ while (cast) {
+ if (!cast->converter) {
+ swig_type_info *tc = cast->type;
+ if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+ }
+ }
+ cast = cast->next;
+ }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+ SWIG_TypeClientData(ti, clientdata);
+ ti->owndata = 1;
+}
+
+/*
+ Search for a swig_type_info structure only by mangled name
+ Search is a O(log #types)
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ swig_module_info *iter = start;
+ do {
+ if (iter->size) {
+ register size_t l = 0;
+ register size_t r = iter->size - 1;
+ do {
+ /* since l+r >= 0, we can (>> 1) instead (/ 2) */
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+ register int compare = strcmp(name, iname);
+ if (compare == 0) {
+ return iter->types[i];
+ } else if (compare < 0) {
+ if (i) {
+ r = i - 1;
+ } else {
+ break;
+ }
+ } else if (compare > 0) {
+ l = i + 1;
+ }
+ } else {
+ break; /* should never happen */
+ }
+ } while (l <= r);
+ }
+ iter = iter->next;
+ } while (iter != end);
+ return 0;
+}
+
+/*
+ Search for a swig_type_info structure for either a mangled name or a human readable name.
+ It first searches the mangled names of the types, which is a O(log #types)
+ If a type is not found it then searches the human readable names, which is O(#types).
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ /* STEP 1: Search the name field using binary search */
+ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+ if (ret) {
+ return ret;
+ } else {
+ /* STEP 2: If the type hasn't been found, do a complete search
+ of the str field (the human readable name) */
+ swig_module_info *iter = start;
+ do {
+ register size_t i = 0;
+ for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+ return iter->types[i];
+ }
+ iter = iter->next;
+ } while (iter != end);
+ }
+
+ /* neither found a match */
+ return 0;
+}
+
+/*
+ Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+ static const char hex[17] = "0123456789abcdef";
+ register const unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register unsigned char uu = *u;
+ *(c++) = hex[(uu & 0xf0) >> 4];
+ *(c++) = hex[uu & 0xf];
+ }
+ return c;
+}
+
+/*
+ Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+ register unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register char d = *(c++);
+ register unsigned char uu;
+ if ((d >= '0') && (d <= '9'))
+ uu = ((d - '0') << 4);
+ else if ((d >= 'a') && (d <= 'f'))
+ uu = ((d - ('a'-10)) << 4);
+ else
+ return (char *) 0;
+ d = *(c++);
+ if ((d >= '0') && (d <= '9'))
+ uu |= (d - '0');
+ else if ((d >= 'a') && (d <= 'f'))
+ uu |= (d - ('a'-10));
+ else
+ return (char *) 0;
+ *u = uu;
+ }
+ return c;
+}
+
+/*
+ Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+ char *r = buff;
+ if ((2*sizeof(void *) + 2) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,&ptr,sizeof(void *));
+ if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+ strcpy(r,name);
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ *ptr = (void *) 0;
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+ char *r = buff;
+ size_t lname = (name ? strlen(name) : 0);
+ if ((2*sz + 2 + lname) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ if (lname) {
+ strncpy(r,name,lname+1);
+ } else {
+ *r = 0;
+ }
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ memset(ptr,0,sz);
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Errors in SWIG */
+#define SWIG_UnknownError -1
+#define SWIG_IOError -2
+#define SWIG_RuntimeError -3
+#define SWIG_IndexError -4
+#define SWIG_TypeError -5
+#define SWIG_DivisionByZero -6
+#define SWIG_OverflowError -7
+#define SWIG_SyntaxError -8
+#define SWIG_ValueError -9
+#define SWIG_SystemError -10
+#define SWIG_AttributeError -11
+#define SWIG_MemoryError -12
+#define SWIG_NullReferenceError -13
+
+
+
+#ifdef __cplusplus
+/* Needed on some windows machines---since MS plays funny games with the header files under C++ */
+#include <math.h>
+#include <stdlib.h>
+extern "C" {
+#endif
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+/* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */
+
+/* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */
+#ifndef PERL_REVISION
+# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
+# define PERL_PATCHLEVEL_H_IMPLICIT
+# include <patchlevel.h>
+# endif
+# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
+# include <could_not_find_Perl_patchlevel.h>
+# endif
+# ifndef PERL_REVISION
+# define PERL_REVISION (5)
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+# endif
+#endif
+
+#if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE)
+#define PerlIO_exportFILE(fh,fl) (FILE*)(fh)
+#endif
+
+#ifndef SvIOK_UV
+# define SvIOK_UV(sv) (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv)))
+#endif
+
+#ifndef SvUOK
+# define SvUOK(sv) SvIOK_UV(sv)
+#endif
+
+#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)))
+# define PL_sv_undef sv_undef
+# define PL_na na
+# define PL_errgv errgv
+# define PL_sv_no sv_no
+# define PL_sv_yes sv_yes
+# define PL_markstack_ptr markstack_ptr
+#endif
+
+#ifndef IVSIZE
+# ifdef LONGSIZE
+# define IVSIZE LONGSIZE
+# else
+# define IVSIZE 4 /* A bold guess, but the best we can make. */
+# endif
+#endif
+
+#ifndef INT2PTR
+# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
+# define PTRV UV
+# define INT2PTR(any,d) (any)(d)
+# else
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define INT2PTR(any,d) (any)(PTRV)(d)
+# endif
+
+# define NUM2PTR(any,d) (any)(PTRV)(d)
+# define PTR2IV(p) INT2PTR(IV,p)
+# define PTR2UV(p) INT2PTR(UV,p)
+# define PTR2NV(p) NUM2PTR(NV,p)
+
+# if PTRSIZE == LONGSIZE
+# define PTR2ul(p) (unsigned long)(p)
+# else
+# define PTR2ul(p) INT2PTR(unsigned long,p)
+# endif
+#endif /* !INT2PTR */
+
+#ifndef SvPV_nolen
+# define SvPV_nolen(x) SvPV(x,PL_na)
+#endif
+
+#ifndef get_sv
+# define get_sv perl_get_sv
+#endif
+
+#ifndef ERRSV
+# define ERRSV get_sv("@",FALSE)
+#endif
+
+#ifndef pTHX_
+#define pTHX_
+#endif
+
+#include <string.h>
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * error manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGINTERN const char*
+SWIG_Perl_ErrorType(int code) {
+ const char* type = 0;
+ switch(code) {
+ case SWIG_MemoryError:
+ type = "MemoryError";
+ break;
+ case SWIG_IOError:
+ type = "IOError";
+ break;
+ case SWIG_RuntimeError:
+ type = "RuntimeError";
+ break;
+ case SWIG_IndexError:
+ type = "IndexError";
+ break;
+ case SWIG_TypeError:
+ type = "TypeError";
+ break;
+ case SWIG_DivisionByZero:
+ type = "ZeroDivisionError";
+ break;
+ case SWIG_OverflowError:
+ type = "OverflowError";
+ break;
+ case SWIG_SyntaxError:
+ type = "SyntaxError";
+ break;
+ case SWIG_ValueError:
+ type = "ValueError";
+ break;
+ case SWIG_SystemError:
+ type = "SystemError";
+ break;
+ case SWIG_AttributeError:
+ type = "AttributeError";
+ break;
+ default:
+ type = "RuntimeError";
+ }
+ return type;
+}
+
+
+
+
+/* -----------------------------------------------------------------------------
+ * perlrun.swg
+ *
+ * This file contains the runtime support for Perl modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef PERL_OBJECT
+#define SWIG_PERL_OBJECT_DECL CPerlObj *SWIGUNUSEDPARM(pPerl),
+#define SWIG_PERL_OBJECT_CALL pPerl,
+#else
+#define SWIG_PERL_OBJECT_DECL
+#define SWIG_PERL_OBJECT_CALL
+#endif
+
+/* Common SWIG API */
+
+/* for raw pointers */
+#define SWIG_ConvertPtr(obj, pp, type, flags) SWIG_Perl_ConvertPtr(SWIG_PERL_OBJECT_CALL obj, pp, type, flags)
+#define SWIG_NewPointerObj(p, type, flags) SWIG_Perl_NewPointerObj(SWIG_PERL_OBJECT_CALL p, type, flags)
+
+/* for raw packed data */
+#define SWIG_ConvertPacked(obj, p, s, type) SWIG_Perl_ConvertPacked(SWIG_PERL_OBJECT_CALL obj, p, s, type)
+#define SWIG_NewPackedObj(p, s, type) SWIG_Perl_NewPackedObj(SWIG_PERL_OBJECT_CALL p, s, type)
+
+/* for class or struct pointers */
+#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags)
+
+/* for C or C++ function pointers */
+#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0)
+#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0)
+
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewMemberObj(ptr, sz, type) SWIG_NewPackedObj(ptr, sz, type)
+
+
+/* Runtime API */
+
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
+
+
+/* Error manipulation */
+
+#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
+#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_fail goto fail
+
+/* Perl-specific SWIG API */
+
+#define SWIG_MakePtr(sv, ptr, type, flags) SWIG_Perl_MakePtr(SWIG_PERL_OBJECT_CALL sv, ptr, type, flags)
+#define SWIG_MakePackedObj(sv, p, s, type) SWIG_Perl_MakePackedObj(SWIG_PERL_OBJECT_CALL sv, p, s, type)
+#define SWIG_SetError(str) SWIG_Error(SWIG_RuntimeError, str)
+
+
+#define SWIG_PERL_DECL_ARGS_1(arg1) (SWIG_PERL_OBJECT_DECL arg1)
+#define SWIG_PERL_CALL_ARGS_1(arg1) (SWIG_PERL_OBJECT_CALL arg1)
+#define SWIG_PERL_DECL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_DECL arg1, arg2)
+#define SWIG_PERL_CALL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_CALL arg1, arg2)
+
+/* -----------------------------------------------------------------------------
+ * pointers/data manipulation
+ * ----------------------------------------------------------------------------- */
+
+/* For backward compatibility only */
+#define SWIG_POINTER_EXCEPTION 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SWIG_OWNER SWIG_POINTER_OWN
+#define SWIG_SHADOW SWIG_OWNER << 1
+
+#define SWIG_MAYBE_PERL_OBJECT SWIG_PERL_OBJECT_DECL
+
+/* SWIG Perl macros */
+
+/* Macro to declare an XS function */
+#ifndef XSPROTO
+# define XSPROTO(name) void name(pTHX_ CV* cv)
+#endif
+
+/* Macro to call an XS function */
+#ifdef PERL_OBJECT
+# define SWIG_CALLXS(_name) _name(cv,pPerl)
+#else
+# ifndef MULTIPLICITY
+# define SWIG_CALLXS(_name) _name(cv)
+# else
+# define SWIG_CALLXS(_name) _name(PERL_GET_THX, cv)
+# endif
+#endif
+
+#ifdef PERL_OBJECT
+#define MAGIC_PPERL CPerlObj *pPerl = (CPerlObj *) this;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef int (CPerlObj::*SwigMagicFunc)(SV *, MAGIC *);
+#ifdef __cplusplus
+}
+#endif
+
+#define SWIG_MAGIC(a,b) (SV *a, MAGIC *b)
+#define SWIGCLASS_STATIC
+
+#else /* PERL_OBJECT */
+
+#define MAGIC_PPERL
+#define SWIGCLASS_STATIC static SWIGUNUSED
+
+#ifndef MULTIPLICITY
+#define SWIG_MAGIC(a,b) (SV *a, MAGIC *b)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef int (*SwigMagicFunc)(SV *, MAGIC *);
+#ifdef __cplusplus
+}
+#endif
+
+#else /* MULTIPLICITY */
+
+#define SWIG_MAGIC(a,b) (struct interpreter *interp, SV *a, MAGIC *b)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MULTIPLICITY */
+#endif /* PERL_OBJECT */
+
+/* Workaround for bug in perl 5.6.x croak and earlier */
+#if (PERL_VERSION < 8)
+# ifdef PERL_OBJECT
+# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
+static void SWIG_Perl_croak_null(CPerlObj *pPerl)
+# else
+static void SWIG_croak_null()
+# endif
+{
+ SV *err=ERRSV;
+# if (PERL_VERSION < 6)
+ croak("%_", err);
+# else
+ if (SvOK(err) && !SvROK(err)) croak("%_", err);
+ croak(Nullch);
+# endif
+}
+#else
+# define SWIG_croak_null() croak(Nullch)
+#endif
+
+
+/*
+ Define how strict is the cast between strings and integers/doubles
+ when overloading between these types occurs.
+
+ The default is making it as strict as possible by using SWIG_AddCast
+ when needed.
+
+ You can use -DSWIG_PERL_NO_STRICT_STR2NUM at compilation time to
+ disable the SWIG_AddCast, making the casting between string and
+ numbers less strict.
+
+ In the end, we try to solve the overloading between strings and
+ numerical types in the more natural way, but if you can avoid it,
+ well, avoid it using %rename, for example.
+*/
+#ifndef SWIG_PERL_NO_STRICT_STR2NUM
+# ifndef SWIG_PERL_STRICT_STR2NUM
+# define SWIG_PERL_STRICT_STR2NUM
+# endif
+#endif
+#ifdef SWIG_PERL_STRICT_STR2NUM
+/* string takes precedence */
+#define SWIG_Str2NumCast(x) SWIG_AddCast(x)
+#else
+/* number takes precedence */
+#define SWIG_Str2NumCast(x) x
+#endif
+
+
+
+#include <stdlib.h>
+
+SWIGRUNTIME const char *
+SWIG_Perl_TypeProxyName(const swig_type_info *type) {
+ if (!type) return NULL;
+ if (type->clientdata != NULL) {
+ return (const char*) type->clientdata;
+ }
+ else {
+ return type->name;
+ }
+}
+
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0))
+ || (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0))), ty);
+}
+
+
+/* Function for getting a pointer value */
+
+SWIGRUNTIME int
+SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) {
+ swig_cast_info *tc;
+ void *voidptr = (void *)0;
+ SV *tsv = 0;
+ /* If magical, apply more magic */
+ if (SvGMAGICAL(sv))
+ mg_get(sv);
+
+ /* Check to see if this is an object */
+ if (sv_isobject(sv)) {
+ IV tmp = 0;
+ tsv = (SV*) SvRV(sv);
+ if ((SvTYPE(tsv) == SVt_PVHV)) {
+ MAGIC *mg;
+ if (SvMAGICAL(tsv)) {
+ mg = mg_find(tsv,'P');
+ if (mg) {
+ sv = mg->mg_obj;
+ if (sv_isobject(sv)) {
+ tsv = (SV*)SvRV(sv);
+ tmp = SvIV(tsv);
+ }
+ }
+ } else {
+ return SWIG_ERROR;
+ }
+ } else {
+ tmp = SvIV(tsv);
+ }
+ voidptr = INT2PTR(void *,tmp);
+ } else if (! SvOK(sv)) { /* Check for undef */
+ *(ptr) = (void *) 0;
+ return SWIG_OK;
+ } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */
+ if (!SvROK(sv)) {
+ *(ptr) = (void *) 0;
+ return SWIG_OK;
+ } else {
+ return SWIG_ERROR;
+ }
+ } else { /* Don't know what it is */
+ return SWIG_ERROR;
+ }
+ if (_t) {
+ /* Now see if the types match */
+ char *_c = HvNAME(SvSTASH(SvRV(sv)));
+ tc = SWIG_TypeProxyCheck(_c,_t);
+ if (!tc) {
+ return SWIG_ERROR;
+ }
+ {
+ int newmemory = 0;
+ *ptr = SWIG_TypeCast(tc,voidptr,&newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
+ }
+ } else {
+ *ptr = voidptr;
+ }
+
+ /*
+ * DISOWN implementation: we need a perl guru to check this one.
+ */
+ if (tsv && (flags & SWIG_POINTER_DISOWN)) {
+ /*
+ * almost copy paste code from below SWIG_POINTER_OWN setting
+ */
+ SV *obj = sv;
+ HV *stash = SvSTASH(SvRV(obj));
+ GV *gv = *(GV**) hv_fetch(stash, "OWNER", 5, TRUE);
+ if (isGV(gv)) {
+ HV *hv = GvHVn(gv);
+ /*
+ * To set ownership (see below), a newSViv(1) entry is added.
+ * Hence, to remove ownership, we delete the entry.
+ */
+ if (hv_exists_ent(hv, obj, 0)) {
+ hv_delete_ent(hv, obj, 0, 0);
+ }
+ }
+ }
+ return SWIG_OK;
+}
+
+SWIGRUNTIME void
+SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) {
+ if (ptr && (flags & SWIG_SHADOW)) {
+ SV *self;
+ SV *obj=newSV(0);
+ HV *hash=newHV();
+ HV *stash;
+ sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ stash=SvSTASH(SvRV(obj));
+ if (flags & SWIG_POINTER_OWN) {
+ HV *hv;
+ GV *gv=*(GV**)hv_fetch(stash, "OWNER", 5, TRUE);
+ if (!isGV(gv))
+ gv_init(gv, stash, "OWNER", 5, FALSE);
+ hv=GvHVn(gv);
+ hv_store_ent(hv, obj, newSViv(1), 0);
+ }
+ sv_magic((SV *)hash, (SV *)obj, 'P', Nullch, 0);
+ SvREFCNT_dec(obj);
+ self=newRV_noinc((SV *)hash);
+ sv_setsv(sv, self);
+ SvREFCNT_dec((SV *)self);
+ sv_bless(sv, stash);
+ }
+ else {
+ sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ }
+}
+
+SWIGRUNTIMEINLINE SV *
+SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) {
+ SV *result = sv_newmortal();
+ SWIG_MakePtr(result, ptr, t, flags);
+ return result;
+}
+
+SWIGRUNTIME void
+SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) {
+ char result[1024];
+ char *r = result;
+ if ((2*sz + 1 + strlen(SWIG_Perl_TypeProxyName(type))) > 1000) return;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ strcpy(r,SWIG_Perl_TypeProxyName(type));
+ sv_setpv(sv, result);
+}
+
+SWIGRUNTIME SV *
+SWIG_Perl_NewPackedObj(SWIG_MAYBE_PERL_OBJECT void *ptr, int sz, swig_type_info *type) {
+ SV *result = sv_newmortal();
+ SWIG_Perl_MakePackedObj(result, ptr, sz, type);
+ return result;
+}
+
+/* Convert a packed value value */
+SWIGRUNTIME int
+SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty) {
+ swig_cast_info *tc;
+ const char *c = 0;
+
+ if ((!obj) || (!SvOK(obj))) return SWIG_ERROR;
+ c = SvPV_nolen(obj);
+ /* Pointer values must start with leading underscore */
+ if (*c != '_') return SWIG_ERROR;
+ c++;
+ c = SWIG_UnpackData(c,ptr,sz);
+ if (ty) {
+ tc = SWIG_TypeCheck(c,ty);
+ if (!tc) return SWIG_ERROR;
+ }
+ return SWIG_OK;
+}
+
+
+/* Macros for low-level exception handling */
+#define SWIG_croak(x) { SWIG_Error(SWIG_RuntimeError, x); SWIG_fail; }
+
+
+typedef XSPROTO(SwigPerlWrapper);
+typedef SwigPerlWrapper *SwigPerlWrapperPtr;
+
+/* Structure for command table */
+typedef struct {
+ const char *name;
+ SwigPerlWrapperPtr wrapper;
+} swig_command_info;
+
+/* Information for constant table */
+
+#define SWIG_INT 1
+#define SWIG_FLOAT 2
+#define SWIG_STRING 3
+#define SWIG_POINTER 4
+#define SWIG_BINARY 5
+
+/* Constant information structure */
+typedef struct swig_constant_info {
+ int type;
+ const char *name;
+ long lvalue;
+ double dvalue;
+ void *pvalue;
+ swig_type_info **ptype;
+} swig_constant_info;
+
+
+/* Structure for variable table */
+typedef struct {
+ const char *name;
+ SwigMagicFunc set;
+ SwigMagicFunc get;
+ swig_type_info **type;
+} swig_variable_info;
+
+/* Magic variable code */
+#ifndef PERL_OBJECT
+#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
+ #ifndef MULTIPLICITY
+ SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+ #else
+ SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+ #endif
+#else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
+SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
+#endif
+{
+ MAGIC *mg;
+ sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ mg = mg_find(sv,'U');
+ mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
+ mg->mg_virtual->svt_get = (SwigMagicFunc) get;
+ mg->mg_virtual->svt_set = (SwigMagicFunc) set;
+ mg->mg_virtual->svt_len = 0;
+ mg->mg_virtual->svt_clear = 0;
+ mg->mg_virtual->svt_free = 0;
+}
+
+
+SWIGRUNTIME swig_module_info *
+SWIG_Perl_GetModule(void) {
+ static void *type_pointer = (void *)0;
+ SV *pointer;
+
+ /* first check if pointer already created */
+ if (!type_pointer) {
+ pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE | GV_ADDMULTI);
+ if (pointer && SvOK(pointer)) {
+ type_pointer = INT2PTR(swig_type_info **, SvIV(pointer));
+ }
+ }
+
+ return (swig_module_info *) type_pointer;
+}
+
+SWIGRUNTIME void
+SWIG_Perl_SetModule(swig_module_info *module) {
+ SV *pointer;
+
+ /* create a new pointer */
+ pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE | GV_ADDMULTI);
+ sv_setiv(pointer, PTR2IV(module));
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Workaround perl5 global namespace pollution. Note that undefining library
+ * functions like fopen will not solve the problem on all platforms as fopen
+ * might be a macro on Windows but not necessarily on other operating systems. */
+#ifdef do_open
+ #undef do_open
+#endif
+#ifdef do_close
+ #undef do_close
+#endif
+#ifdef scalar
+ #undef scalar
+#endif
+#ifdef list
+ #undef list
+#endif
+#ifdef apply
+ #undef apply
+#endif
+#ifdef convert
+ #undef convert
+#endif
+#ifdef Error
+ #undef Error
+#endif
+#ifdef form
+ #undef form
+#endif
+#ifdef vform
+ #undef vform
+#endif
+#ifdef LABEL
+ #undef LABEL
+#endif
+#ifdef METHOD
+ #undef METHOD
+#endif
+#ifdef Move
+ #undef Move
+#endif
+#ifdef yylex
+ #undef yylex
+#endif
+#ifdef yyparse
+ #undef yyparse
+#endif
+#ifdef yyerror
+ #undef yyerror
+#endif
+#ifdef invert
+ #undef invert
+#endif
+#ifdef ref
+ #undef ref
+#endif
+#ifdef read
+ #undef read
+#endif
+#ifdef write
+ #undef write
+#endif
+#ifdef eof
+ #undef eof
+#endif
+#ifdef bool
+ #undef bool
+#endif
+#ifdef close
+ #undef close
+#endif
+#ifdef rewind
+ #undef rewind
+#endif
+#ifdef free
+ #undef free
+#endif
+#ifdef malloc
+ #undef malloc
+#endif
+#ifdef calloc
+ #undef calloc
+#endif
+#ifdef Stat
+ #undef Stat
+#endif
+#ifdef check
+ #undef check
+#endif
+#ifdef seekdir
+ #undef seekdir
+#endif
+#ifdef open
+ #undef open
+#endif
+
+
+
+#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
+
+#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_ESLconnection swig_types[0]
+#define SWIGTYPE_p_ESLevent swig_types[1]
+#define SWIGTYPE_p_char swig_types[2]
+#define SWIGTYPE_p_esl_event_t swig_types[3]
+#define SWIGTYPE_p_esl_priority_t swig_types[4]
+static swig_type_info *swig_types[6];
+static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#define SWIG_init boot_ESL
+
+#define SWIG_name "ESLc::boot_ESL"
+#define SWIG_prefix "ESLc::"
+
+#define SWIGVERSION 0x010335
+#define SWIG_VERSION SWIGVERSION
+
+
+#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a))
+#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a))
+
+
+#include <stdexcept>
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+#ifndef PERL_OBJECT
+#ifndef MULTIPLICITY
+SWIGEXPORT void SWIG_init (CV* cv);
+#else
+SWIGEXPORT void SWIG_init (pTHXo_ CV* cv);
+#endif
+#else
+SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
+#endif
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+ static int init = 0;
+ static swig_type_info* info = 0;
+ if (!init) {
+ info = SWIG_TypeQuery("_p_char");
+ init = 1;
+ }
+ return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc)
+{
+ if (SvPOK(obj)) {
+ STRLEN len = 0;
+ char *cstr = SvPV(obj, len);
+ size_t size = len + 1;
+ if (cptr) {
+ if (alloc) {
+ if (*alloc == SWIG_NEWOBJ) {
+ *cptr = reinterpret_cast< char* >(memcpy((new char[size]), cstr, sizeof(char)*(size)));
+ } else {
+ *cptr = cstr;
+ *alloc = SWIG_OLDOBJ;
+ }
+ }
+ }
+ if (psize) *psize = size;
+ return SWIG_OK;
+ } else {
+ swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+ if (pchar_descriptor) {
+ char* vptr = 0;
+ if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) {
+ if (cptr) *cptr = vptr;
+ if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0;
+ if (alloc) *alloc = SWIG_OLDOBJ;
+ return SWIG_OK;
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+
+
+
+SWIGINTERNINLINE SV *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+ SV *obj = sv_newmortal();
+ if (carray) {
+ sv_setpvn(obj, carray, size);
+ } else {
+ sv_setsv(obj, &PL_sv_undef);
+ }
+ return obj;
+}
+
+
+SWIGINTERNINLINE SV *
+SWIG_FromCharPtr(const char *cptr)
+{
+ return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+
+
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+# define LLONG_MAX __LONG_LONG_MAX__
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_double SWIG_PERL_DECL_ARGS_2(SV *obj, double *val)
+{
+ if (SvNIOK(obj)) {
+ if (val) *val = SvNV(obj);
+ return SWIG_OK;
+ } else if (SvIOK(obj)) {
+ if (val) *val = (double) SvIV(obj);
+ return SWIG_AddCast(SWIG_OK);
+ } else {
+ const char *nptr = SvPV_nolen(obj);
+ if (nptr) {
+ char *endptr;
+ double v = strtod(nptr, &endptr);
+ if (errno == ERANGE) {
+ errno = 0;
+ return SWIG_OverflowError;
+ } else {
+ if (*endptr == '\0') {
+ if (val) *val = v;
+ return SWIG_Str2NumCast(SWIG_OK);
+ }
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+#include <float.h>
+
+
+#include <math.h>
+
+
+SWIGINTERNINLINE int
+SWIG_CanCastAsInteger(double *d, double min, double max) {
+ double x = *d;
+ if ((min <= x && x <= max)) {
+ double fx = floor(x);
+ double cx = ceil(x);
+ double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */
+ if ((errno == EDOM) || (errno == ERANGE)) {
+ errno = 0;
+ } else {
+ double summ, reps, diff;
+ if (rd < x) {
+ diff = x - rd;
+ } else if (rd > x) {
+ diff = rd - x;
+ } else {
+ return 1;
+ }
+ summ = rd + x;
+ reps = diff/summ;
+ if (reps < 8*DBL_EPSILON) {
+ *d = rd;
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
+{
+ if (SvIOK(obj)) {
+ if (val) *val = SvIV(obj);
+ return SWIG_OK;
+ } else {
+ int dispatch = 0;
+ const char *nptr = SvPV_nolen(obj);
+ if (nptr) {
+ char *endptr;
+ long v;
+ errno = 0;
+ v = strtol(nptr, &endptr,0);
+ if (errno == ERANGE) {
+ errno = 0;
+ return SWIG_OverflowError;
+ } else {
+ if (*endptr == '\0') {
+ if (val) *val = v;
+ return SWIG_Str2NumCast(SWIG_OK);
+ }
+ }
+ }
+ if (!dispatch) {
+ double d;
+ int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d));
+ if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) {
+ if (val) *val = (long)(d);
+ return res;
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val)
+{
+ long v;
+ int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v);
+ if (SWIG_IsOK(res)) {
+ if ((v < INT_MIN || v > INT_MAX)) {
+ return SWIG_OverflowError;
+ } else {
+ if (val) *val = static_cast< int >(v);
+ }
+ }
+ return res;
+}
+
+
+SWIGINTERNINLINE SV *
+SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
+{
+ SV *obj = sv_newmortal();
+ sv_setiv(obj, (IV) value);
+ return obj;
+}
+
+
+SWIGINTERNINLINE SV *
+SWIG_From_int SWIG_PERL_DECL_ARGS_1(int value)
+{
+ return SWIG_From_long SWIG_PERL_CALL_ARGS_1(value);
+}
+
+
+SWIGINTERNINLINE SV *
+SWIG_From_bool SWIG_PERL_DECL_ARGS_1(bool value)
+{
+ SV *obj = sv_newmortal();
+ if (value) {
+ sv_setsv(obj, &PL_sv_yes);
+ } else {
+ sv_setsv(obj, &PL_sv_no);
+ }
+ return obj;
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef PERL_OBJECT
+#define MAGIC_CLASS _wrap_ESL_var::
+class _wrap_ESL_var : public CPerlObj {
+public:
+#else
+#define MAGIC_CLASS
+#endif
+SWIGCLASS_STATIC int swig_magic_readonly(pTHX_ SV *SWIGUNUSEDPARM(sv), MAGIC *SWIGUNUSEDPARM(mg)) {
+ MAGIC_PPERL
+ croak("Value is read-only.");
+ return 0;
+}
+
+
+#ifdef PERL_OBJECT
+};
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XS(_wrap_ESLevent_event_set) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_event_set(self,event);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_event_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_esl_event_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_event_set" "', argument " "2"" of type '" "esl_event_t *""'");
+ }
+ arg2 = reinterpret_cast< esl_event_t * >(argp2);
+ if (arg1) (arg1)->event = arg2;
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_event_get) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_event_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_event_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (esl_event_t *) ((arg1)->event);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_esl_event_t, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_serialized_string_set) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_serialized_string_set(self,serialized_string);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialized_string_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_serialized_string_set" "', argument " "2"" of type '" "char *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (arg1->serialized_string) delete[] arg1->serialized_string;
+ if (arg2) {
+ size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1;
+ arg1->serialized_string = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size)));
+ } else {
+ arg1->serialized_string = 0;
+ }
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_serialized_string_get) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_serialized_string_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialized_string_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *) ((arg1)->serialized_string);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_mine_set) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_mine_set(self,mine);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_mine_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ESLevent_mine_set" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ if (arg1) (arg1)->mine = arg2;
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_mine_get) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_mine_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_mine_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (int) ((arg1)->mine);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLevent__SWIG_0) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: new_ESLevent(type,subclass_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ if (items > 1) {
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_ESLevent" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLevent__SWIG_1) {
+ {
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: new_ESLevent(wrap_me,free_me);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_esl_event_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "esl_event_t *""'");
+ }
+ arg1 = reinterpret_cast< esl_event_t * >(argp1);
+ if (items > 1) {
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_ESLevent" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ }
+ result = (ESLevent *)new ESLevent(arg1,arg2);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLevent__SWIG_2) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: new_ESLevent(me);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (ESLevent *)new ESLevent(arg1);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLevent) {
+ dXSARGS;
+
+ {
+ unsigned long _index = 0;
+ SWIG_TypeRank _rank = 0;
+ if ((items >= 1) && (items <= 2)) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_esl_event_t, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (items > 1) {
+ {
+ {
+ int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL);
+ _v = SWIG_CheckState(res);
+ }
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ }
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 1;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_1:
+
+ if (items == 1) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_ESLevent, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 2;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_2:
+
+ if ((items >= 1) && (items <= 2)) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(0), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (items > 1) {
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ }
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 3;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_3:
+
+ dispatch:
+ switch(_index) {
+ case 1:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_new_ESLevent__SWIG_1); return;
+ case 2:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_new_ESLevent__SWIG_2); return;
+ case 3:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_new_ESLevent__SWIG_0); return;
+ }
+ }
+
+ croak("No matching function for overloaded 'new_ESLevent'");
+ XSRETURN(0);
+}
+
+
+XS(_wrap_delete_ESLevent) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_ESLevent(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ESLevent" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ delete arg1;
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_serialize) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_serialize(self,format);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialize" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (items > 1) {
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_serialize" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_setPriority) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_setPriority(self,priority);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_setPriority" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (items > 1) {
+ {
+ res2 = SWIG_ConvertPtr(ST(1), &argp2, SWIGTYPE_p_esl_priority_t, 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_setPriority" "', argument " "2"" of type '" "esl_priority_t""'");
+ }
+ if (!argp2) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ESLevent_setPriority" "', argument " "2"" of type '" "esl_priority_t""'");
+ } else {
+ arg2 = *(reinterpret_cast< esl_priority_t * >(argp2));
+ }
+ }
+ }
+ result = (bool)(arg1)->setPriority(arg2);
+ ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_getHeader) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_getHeader(self,header_name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_getHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_getBody) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_getBody(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getBody" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getBody();
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_getType) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_getType(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getType" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getType();
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_addBody) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_addBody(self,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_addBody" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_addBody" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_addHeader) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: ESLevent_addHeader(self,header_name,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_addHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_addHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_addHeader" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_delHeader) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLevent_delHeader(self,header_name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_delHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_delHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_firstHeader) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_firstHeader(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_firstHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->firstHeader();
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLevent_nextHeader) {
+ {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLevent_nextHeader(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_nextHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->nextHeader();
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLconnection__SWIG_0) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: new_ESLconnection(host,port,password);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLconnection" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_ESLconnection" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_ESLconnection" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLconnection, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLconnection__SWIG_1) {
+ {
+ int arg1 ;
+ ESLconnection *result = 0 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: new_ESLconnection(socket);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_ESLconnection" "', argument " "1"" of type '" "int""'");
+ }
+ arg1 = static_cast< int >(val1);
+ result = (ESLconnection *)new ESLconnection(arg1);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLconnection, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_ESLconnection) {
+ dXSARGS;
+
+ {
+ unsigned long _index = 0;
+ SWIG_TypeRank _rank = 0;
+ if (items == 1) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ {
+ int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), NULL);
+ _v = SWIG_CheckState(res);
+ }
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 1;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_1:
+
+ if (items == 3) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(0), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 2;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_2:
+
+ dispatch:
+ switch(_index) {
+ case 1:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_new_ESLconnection__SWIG_1); return;
+ case 2:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_new_ESLconnection__SWIG_0); return;
+ }
+ }
+
+ croak("No matching function for overloaded 'new_ESLconnection'");
+ XSRETURN(0);
+}
+
+
+XS(_wrap_delete_ESLconnection) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_ESLconnection(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ESLconnection" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ delete arg1;
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_socketDescriptor) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLconnection_socketDescriptor(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_socketDescriptor" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->socketDescriptor();
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_connected) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLconnection_connected(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_connected" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->connected();
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_getInfo) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLconnection_getInfo(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_getInfo" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->getInfo();
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_send) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_send(self,cmd);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_send" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_send" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->send((char const *)arg2);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_sendRecv) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_sendRecv(self,cmd);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_sendRecv" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_sendRecv" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_api) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: ESLconnection_api(self,cmd,arg);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_api" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_api" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (items > 2) {
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_api" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_bgapi) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: ESLconnection_bgapi(self,cmd,arg);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_bgapi" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_bgapi" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (items > 2) {
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_bgapi" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_sendEvent) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_sendEvent(self,send_me);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_sendEvent" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_sendEvent" "', argument " "2"" of type '" "ESLevent *""'");
+ }
+ arg2 = reinterpret_cast< ESLevent * >(argp2);
+ result = (int)(arg1)->sendEvent(arg2);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_recvEvent) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLconnection_recvEvent(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_recvEvent" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->recvEvent();
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_recvEventTimed) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_recvEventTimed(self,ms);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_recvEventTimed" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ESLconnection_recvEventTimed" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_filter) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: ESLconnection_filter(self,header,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_filter" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_filter" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_filter" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_events) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: ESLconnection_events(self,etype,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_events" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_events" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_events" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_execute) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: ESLconnection_execute(self,app,arg,uuid);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_execute" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_execute" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (items > 2) {
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_execute" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (items > 3) {
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ESLconnection_execute" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_executeAsync) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: ESLconnection_executeAsync(self,app,arg,uuid);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_executeAsync" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_executeAsync" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (items > 2) {
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_executeAsync" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (items > 3) {
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ESLconnection_executeAsync" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_setAsyncExecute) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_setAsyncExecute(self,val);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_setAsyncExecute" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_setAsyncExecute" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_setEventLock) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: ESLconnection_setEventLock(self,val);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_setEventLock" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_setEventLock" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_ESLconnection_disconnect) {
+ {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: ESLconnection_disconnect(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_disconnect" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->disconnect();
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_eslSetLogLevel) {
+ {
+ int arg1 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: eslSetLogLevel(level);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "eslSetLogLevel" "', argument " "1"" of type '" "int""'");
+ }
+ arg1 = static_cast< int >(val1);
+ eslSetLogLevel(arg1);
+
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_ESLconnection = {"_p_ESLconnection", "ESLconnection *", 0, 0, (void*)"ESL::ESLconnection", 0};
+static swig_type_info _swigt__p_ESLevent = {"_p_ESLevent", "ESLevent *", 0, 0, (void*)"ESL::ESLevent", 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_event_t = {"_p_esl_event_t", "esl_event_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_priority_t = {"_p_esl_priority_t", "esl_priority_t *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_ESLconnection,
+ &_swigt__p_ESLevent,
+ &_swigt__p_char,
+ &_swigt__p_esl_event_t,
+ &_swigt__p_esl_priority_t,
+};
+
+static swig_cast_info _swigc__p_ESLconnection[] = { {&_swigt__p_ESLconnection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESLevent[] = { {&_swigt__p_ESLevent, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_event_t[] = { {&_swigt__p_esl_event_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_priority_t[] = { {&_swigt__p_esl_priority_t, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_ESLconnection,
+ _swigc__p_ESLevent,
+ _swigc__p_char,
+ _swigc__p_esl_event_t,
+ _swigc__p_esl_priority_t,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_constant_info swig_constants[] = {
+{0,0,0,0,0,0}
+};
+#ifdef __cplusplus
+}
+#endif
+static swig_variable_info swig_variables[] = {
+{0,0,0,0}
+};
+static swig_command_info swig_commands[] = {
+{"ESLc::ESLevent_event_set", _wrap_ESLevent_event_set},
+{"ESLc::ESLevent_event_get", _wrap_ESLevent_event_get},
+{"ESLc::ESLevent_serialized_string_set", _wrap_ESLevent_serialized_string_set},
+{"ESLc::ESLevent_serialized_string_get", _wrap_ESLevent_serialized_string_get},
+{"ESLc::ESLevent_mine_set", _wrap_ESLevent_mine_set},
+{"ESLc::ESLevent_mine_get", _wrap_ESLevent_mine_get},
+{"ESLc::new_ESLevent", _wrap_new_ESLevent},
+{"ESLc::delete_ESLevent", _wrap_delete_ESLevent},
+{"ESLc::ESLevent_serialize", _wrap_ESLevent_serialize},
+{"ESLc::ESLevent_setPriority", _wrap_ESLevent_setPriority},
+{"ESLc::ESLevent_getHeader", _wrap_ESLevent_getHeader},
+{"ESLc::ESLevent_getBody", _wrap_ESLevent_getBody},
+{"ESLc::ESLevent_getType", _wrap_ESLevent_getType},
+{"ESLc::ESLevent_addBody", _wrap_ESLevent_addBody},
+{"ESLc::ESLevent_addHeader", _wrap_ESLevent_addHeader},
+{"ESLc::ESLevent_delHeader", _wrap_ESLevent_delHeader},
+{"ESLc::ESLevent_firstHeader", _wrap_ESLevent_firstHeader},
+{"ESLc::ESLevent_nextHeader", _wrap_ESLevent_nextHeader},
+{"ESLc::new_ESLconnection", _wrap_new_ESLconnection},
+{"ESLc::delete_ESLconnection", _wrap_delete_ESLconnection},
+{"ESLc::ESLconnection_socketDescriptor", _wrap_ESLconnection_socketDescriptor},
+{"ESLc::ESLconnection_connected", _wrap_ESLconnection_connected},
+{"ESLc::ESLconnection_getInfo", _wrap_ESLconnection_getInfo},
+{"ESLc::ESLconnection_send", _wrap_ESLconnection_send},
+{"ESLc::ESLconnection_sendRecv", _wrap_ESLconnection_sendRecv},
+{"ESLc::ESLconnection_api", _wrap_ESLconnection_api},
+{"ESLc::ESLconnection_bgapi", _wrap_ESLconnection_bgapi},
+{"ESLc::ESLconnection_sendEvent", _wrap_ESLconnection_sendEvent},
+{"ESLc::ESLconnection_recvEvent", _wrap_ESLconnection_recvEvent},
+{"ESLc::ESLconnection_recvEventTimed", _wrap_ESLconnection_recvEventTimed},
+{"ESLc::ESLconnection_filter", _wrap_ESLconnection_filter},
+{"ESLc::ESLconnection_events", _wrap_ESLconnection_events},
+{"ESLc::ESLconnection_execute", _wrap_ESLconnection_execute},
+{"ESLc::ESLconnection_executeAsync", _wrap_ESLconnection_executeAsync},
+{"ESLc::ESLconnection_setAsyncExecute", _wrap_ESLconnection_setAsyncExecute},
+{"ESLc::ESLconnection_setEventLock", _wrap_ESLconnection_setEventLock},
+{"ESLc::ESLconnection_disconnect", _wrap_ESLconnection_disconnect},
+{"ESLc::eslSetLogLevel", _wrap_eslSetLogLevel},
+{0,0}
+};
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ * 1) If the cast->type has already been loaded AND the type we are adding
+ * casting info to has not been loaded (it is in this module), THEN we
+ * replace the cast->type pointer with the type pointer that has already
+ * been loaded.
+ * 2) If BOTH types (the one we are adding casting info to, and the
+ * cast->type) are loaded, THEN the cast info has already been loaded by
+ * the previous module so we just ignore it.
+ * 3) Finally, if cast->type has not already been loaded, then we add that
+ * swig_cast_info to the linked list (because the cast->type) pointer will
+ * be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+ size_t i;
+ swig_module_info *module_head, *iter;
+ int found, init;
+
+ clientdata = clientdata;
+
+ /* check to see if the circular list has been setup, if not, set it up */
+ if (swig_module.next==0) {
+ /* Initialize the swig_module */
+ swig_module.type_initial = swig_type_initial;
+ swig_module.cast_initial = swig_cast_initial;
+ swig_module.next = &swig_module;
+ init = 1;
+ } else {
+ init = 0;
+ }
+
+ /* Try and load any already created modules */
+ module_head = SWIG_GetModule(clientdata);
+ if (!module_head) {
+ /* This is the first module loaded for this interpreter */
+ /* so set the swig module into the interpreter */
+ SWIG_SetModule(clientdata, &swig_module);
+ module_head = &swig_module;
+ } else {
+ /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+ found=0;
+ iter=module_head;
+ do {
+ if (iter==&swig_module) {
+ found=1;
+ break;
+ }
+ iter=iter->next;
+ } while (iter!= module_head);
+
+ /* if the is found in the list, then all is done and we may leave */
+ if (found) return;
+ /* otherwise we must add out module into the list */
+ swig_module.next = module_head->next;
+ module_head->next = &swig_module;
+ }
+
+ /* When multiple interpeters are used, a module could have already been initialized in
+ a different interpreter, but not yet have a pointer in this interpreter.
+ In this case, we do not want to continue adding types... everything should be
+ set up already */
+ if (init == 0) return;
+
+ /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+ for (i = 0; i < swig_module.size; ++i) {
+ swig_type_info *type = 0;
+ swig_type_info *ret;
+ swig_cast_info *cast;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+
+ /* if there is another module already loaded */
+ if (swig_module.next != &swig_module) {
+ type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+ }
+ if (type) {
+ /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+ if (swig_module.type_initial[i]->clientdata) {
+ type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+ }
+ } else {
+ type = swig_module.type_initial[i];
+ }
+
+ /* Insert casting types */
+ cast = swig_module.cast_initial[i];
+ while (cast->type) {
+ /* Don't need to add information already in the list */
+ ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+ if (swig_module.next != &swig_module) {
+ ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+ }
+ if (ret) {
+ if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+ cast->type = ret;
+ ret = 0;
+ } else {
+ /* Check for casting already in the list */
+ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+ if (!ocast) ret = 0;
+ }
+ }
+
+ if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+ if (type->cast) {
+ type->cast->prev = cast;
+ cast->next = type->cast;
+ }
+ type->cast = cast;
+ }
+ cast++;
+ }
+ /* Set entry in modules->types array equal to the type */
+ swig_module.types[i] = type;
+ }
+ swig_module.types[i] = 0;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+ for (i = 0; i < swig_module.size; ++i) {
+ int j = 0;
+ swig_cast_info *cast = swig_module.cast_initial[i];
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+ while (cast->type) {
+ printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+ cast++;
+ ++j;
+ }
+ printf("---- Total casts: %d\n",j);
+ }
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types. It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+ size_t i;
+ swig_cast_info *equiv;
+ static int init_run = 0;
+
+ if (init_run) return;
+ init_run = 1;
+
+ for (i = 0; i < swig_module.size; i++) {
+ if (swig_module.types[i]->clientdata) {
+ equiv = swig_module.types[i]->cast;
+ while (equiv) {
+ if (!equiv->converter) {
+ if (equiv->type && !equiv->type->clientdata)
+ SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+ }
+ equiv = equiv->next;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+#if 0
+{
+ /* c-mode */
+#endif
+}
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+XS(SWIG_init) {
+ dXSARGS;
+ int i;
+
+ SWIG_InitializeModule(0);
+
+ /* Install commands */
+ for (i = 0; swig_commands[i].name; i++) {
+ newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ }
+
+ /* Install variables */
+ for (i = 0; swig_variables[i].name; i++) {
+ SV *sv;
+ sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ if (swig_variables[i].type) {
+ SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
+ } else {
+ sv_setiv(sv,(IV) 0);
+ }
+ swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ }
+
+ /* Install constant */
+ for (i = 0; swig_constants[i].type; i++) {
+ SV *sv;
+ sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ switch(swig_constants[i].type) {
+ case SWIG_INT:
+ sv_setiv(sv, (IV) swig_constants[i].lvalue);
+ break;
+ case SWIG_FLOAT:
+ sv_setnv(sv, (double) swig_constants[i].dvalue);
+ break;
+ case SWIG_STRING:
+ sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ break;
+ case SWIG_POINTER:
+ SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
+ break;
+ case SWIG_BINARY:
+ SWIG_MakePackedObj(sv, swig_constants[i].pvalue, swig_constants[i].lvalue, *(swig_constants[i].ptype));
+ break;
+ default:
+ break;
+ }
+ SvREADONLY_on(sv);
+ }
+
+ SWIG_TypeClientData(SWIGTYPE_p_ESLevent, (void*) "ESL::ESLevent");
+ SWIG_TypeClientData(SWIGTYPE_p_ESLconnection, (void*) "ESL::ESLconnection");
+ ST(0) = &PL_sv_yes;
+ XSRETURN(1);
+}
+
Deleted: freeswitch/branches/seven/libs/esl/perl/events.pl
Copied: freeswitch/branches/seven/libs/esl/perl/events.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/events.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/events.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/events.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+require ESL;
+
+my $con = new ESL::ESLconnection("localhost", "8021", "ClueCon");
+
+$con->events("plain", "all");
+
+while($con->connected()) {
+ #my $e = $con->recvEventTimed(100);
+ my $e = $con->recvEvent();
+
+ if ($e) {
+ #print $e->serialize();
+ my $h = $e->firstHeader();
+ while ($h) {
+ printf "Header: [%s] = [%s]\n", $h, $e->getHeader($h);
+ $h = $e->nextHeader();
+ }
+
+ }
+
+}
+
+
Deleted: freeswitch/branches/seven/libs/esl/perl/info.pl
Copied: freeswitch/branches/seven/libs/esl/perl/info.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/info.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/info.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/info.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+require ESL;
+
+my $con = ESL::ESLconnection->new("localhost", "8021", "ClueCon");
+my $e = ESL::ESLevent->new("SEND_INFO");
+
+#my $e = $con->sendEvent("MESSAGE_WAITING");
+
+$e->addHeader("Content-Type", "text/xml");
+$e->addHeader("to-uri", 'sip:1002@dev.bkw.org');
+$e->addHeader("from-uri", 'sip:1234@dev.bkw.org');
+$e->addHeader("profile", 'external');
+
+$con->sendEvent($e);
Deleted: freeswitch/branches/seven/libs/esl/perl/perlxsi.c
Copied: freeswitch/branches/seven/libs/esl/perl/perlxsi.c (from rev 14471, freeswitch/trunk/libs/esl/perl/perlxsi.c) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/perlxsi.c (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/perlxsi.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,16 @@
+#include <EXTERN.h>
+#include <perl.h>
+
+EXTERN_C void xs_init (pTHX);
+
+EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
+
+EXTERN_C void
+xs_init(pTHX)
+{
+ char *file = __FILE__;
+ dXSUB_SYS;
+
+ /* DynaLoader is a special case */
+ newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
+}
Deleted: freeswitch/branches/seven/libs/esl/perl/send_notify.pl
Copied: freeswitch/branches/seven/libs/esl/perl/send_notify.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/send_notify.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/send_notify.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/send_notify.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+
+require ESL;
+
+ESL::eslSetLogLevel(7);
+
+my $con = ESL::ESLconnection->new("localhost", "8021", "ClueCon");
+my $e = ESL::ESLevent->new("NOTIFY");
+
+
+$e->addHeader("from-uri", "sip:1000\@dev.bkw.org");
+$e->addHeader("to-uri", "sip:1000\@dev.bkw.org");
+$e->addHeader("event-string", "message-summary");
+$e->addHeader("content-type", "application/simple-message-summary");
+$e->addHeader("profile", "internal");
+
+
+my $body ="Messages-Waiting: yes\nMessage-Account: me\@my.com\nVoice-Message: 0/0 (0/0)\n";
+$e->addBody($body);
+$con->sendEvent($e);
+
Deleted: freeswitch/branches/seven/libs/esl/perl/sendevent.pl
Copied: freeswitch/branches/seven/libs/esl/perl/sendevent.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/sendevent.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/sendevent.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/sendevent.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+require ESL;
+
+my $con = ESL::ESLconnection->new("localhost", "8021", "ClueCon");
+my $e = ESL::ESLevent->new("MESSAGE_WAITING");
+
+#my $e = $con->sendEvent("MESSAGE_WAITING");
+
+$e->addHeader("MWI-Messages-Waiting", "no");
+$e->addHeader("MWI-Message-Account", 'sip:1002@dev.bkw.org');
+$e->addHeader("MWI-Voice-Message", "0/0 (0/0)");
+$con->sendEvent($e);
+
+sleep 3;
+my $ee = ESL::ESLevent->new("MESSAGE_WAITING");
+
+$ee->addHeader("MWI-Messages-Waiting", "yes");
+$ee->addHeader("MWI-Message-Account", 'sip:1002@dev.bkw.org');
+$ee->addHeader("MWI-Voice-Message", "1/1 (1/1)");
+$con->sendEvent($ee);
+
Deleted: freeswitch/branches/seven/libs/esl/perl/server.pl
Copied: freeswitch/branches/seven/libs/esl/perl/server.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/server.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/server.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/server.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,32 @@
+require ESL;
+use IO::Socket::INET;
+
+my $ip = "127.0.0.1";
+my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8040', Proto => 'tcp', Listen => 1, Reuse => 1 );
+die "Could not create socket: $!\n" unless $sock;
+
+for(;;) {
+ my $new_sock = $sock->accept();
+ my $pid = fork();
+ if ($pid) {
+ close($new_sock);
+ next;
+ }
+
+ my $host = $new_sock->sockhost();
+ my $fd = fileno($new_sock);
+
+ my $con = new ESL::ESLconnection($fd);
+ my $info = $con->getInfo();
+
+ print $info->serialize();
+
+ my $uuid = $info->getHeader("unique-id");
+
+ $con->execute("answer", "", $uuid);
+ $con->execute("playback", "/ram/swimp.raw", $uuid);
+
+ close($new_sock);
+}
+
+
Deleted: freeswitch/branches/seven/libs/esl/perl/server2.pl
Copied: freeswitch/branches/seven/libs/esl/perl/server2.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/server2.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/server2.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/server2.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,62 @@
+require ESL;
+use IO::Socket::INET;
+
+#ESL::eslSetLogLevel(7);
+
+my $ip = "127.0.0.1";
+my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8040', Proto => 'tcp', Listen => 1, Reuse => 1 );
+die "Could not create socket: $!\n" unless $sock;
+
+for(;;) {
+ my $new_sock = $sock->accept();
+ my $pid = fork();
+ if ($pid) {
+ close($new_sock);
+ next;
+ }
+
+ my $host = $new_sock->sockhost();
+ my $fd = fileno($new_sock);
+
+ my $con = new ESL::ESLconnection($fd);
+ my $info = $con->getInfo();
+
+ #print $info->serialize();
+ my $uuid = $info->getHeader("unique-id");
+
+ printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number");
+
+ $e = $con->filter("unique-id", $uuid);
+ if ($e) {
+ print $e->serialize();
+ } else {
+ printf("WTF?\n");
+ }
+
+ $con->events("plain", "all");
+
+
+ #$con->sendRecv("myevents");
+ $con->execute("answer");
+ $con->execute("playback", "/ram/swimp.raw");
+
+ while($con->connected()) {
+ #my $e = $con->recvEventTimed(100);
+ my $e = $con->recvEvent();
+
+ if ($e) {
+ my $name = $e->getHeader("event-name");
+ print "EVENT [$name]\n";
+ if ($name eq "DTMF") {
+ my $digit = $e->getHeader("dtmf-digit");
+ my $duration = $e->getHeader("dtmf-duration");
+ print "DTMF digit $digit ($duration)\n";
+ }
+ }
+ }
+
+ print "BYE\n";
+ close($new_sock);
+}
+
+
Deleted: freeswitch/branches/seven/libs/esl/perl/server3.pl
Copied: freeswitch/branches/seven/libs/esl/perl/server3.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/server3.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/server3.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/server3.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,61 @@
+require ESL;
+use IO::Socket::INET;
+
+#ESL::eslSetLogLevel(7);
+
+my $ip = "127.0.0.1";
+my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8040', Proto => 'tcp', Listen => 1, Reuse => 1 );
+die "Could not create socket: $!\n" unless $sock;
+
+for(;;) {
+ my $new_sock = $sock->accept();
+ my $pid = fork();
+ if ($pid) {
+ close($new_sock);
+ next;
+ }
+
+ my $host = $new_sock->sockhost();
+ my $fd = fileno($new_sock);
+
+ my $con = new ESL::ESLconnection($fd);
+ my $info = $con->getInfo();
+
+ #print $info->serialize();
+ my $uuid = $info->getHeader("unique-id");
+
+ printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number");
+
+ $con->sendRecv("myevents");
+ $con->execute("answer");
+ $con->sendRecv("divert_events on");
+ $con->execute("detect_speech", "pocketsphinx yes_no yes_no");
+ $con->execute("playback", "/ram/swimp.raw");
+
+ while($con->connected()) {
+ #my $e = $con->recvEventTimed(100);
+ my $e = $con->recvEvent();
+
+ if ($e) {
+ my $name = $e->getHeader("event-name");
+ print "EVENT [$name]\n";
+ if ($name eq "DETECTED_SPEECH") {
+ print $e->serialize();
+ my $type = $e->getHeader("speech-type");
+ if ($type = "detected-speech") {
+ $con->execute("detect_speech", "resume");
+ }
+ }
+ if ($name eq "DTMF") {
+ my $digit = $e->getHeader("dtmf-digit");
+ my $duration = $e->getHeader("dtmf-duration");
+ print "DTMF digit $digit ($duration)\n";
+ }
+ }
+ }
+
+ print "BYE\n";
+ close($new_sock);
+}
+
+
Deleted: freeswitch/branches/seven/libs/esl/perl/single_command.pl
Copied: freeswitch/branches/seven/libs/esl/perl/single_command.pl (from rev 14471, freeswitch/trunk/libs/esl/perl/single_command.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/perl/single_command.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/perl/single_command.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+require ESL;
+
+my $command = shift;
+my $args = join(" ", @ARGV);
+
+my $con = new ESL::ESLconnection("localhost", "8021", "ClueCon");
+my $e = $con->api($command, $args);
+print $e->getBody();
Copied: freeswitch/branches/seven/libs/esl/php (from rev 14471, freeswitch/trunk/libs/esl/php)
Deleted: freeswitch/branches/seven/libs/esl/php/ESL.php
Copied: freeswitch/branches/seven/libs/esl/php/ESL.php (from rev 14471, freeswitch/trunk/libs/esl/php/ESL.php) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/ESL.php (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/ESL.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,212 @@
+<?php
+
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+// Try to load our extension if it's not already loaded.
+if (!extension_loaded("ESL")) {
+ if (strtolower(substr(PHP_OS, 0, 3)) === 'win') {
+ if (!dl('php_ESL.dll')) return;
+ } else {
+ // PHP_SHLIB_SUFFIX is available as of PHP 4.3.0, for older PHP assume 'so'.
+ // It gives 'dylib' on MacOS X which is for libraries, modules are 'so'.
+ if (PHP_SHLIB_SUFFIX === 'PHP_SHLIB_SUFFIX' || PHP_SHLIB_SUFFIX === 'dylib') {
+ if (!dl('ESL.so')) return;
+ } else {
+ if (!dl('ESL.'.PHP_SHLIB_SUFFIX)) return;
+ }
+ }
+}
+
+
+
+abstract class ESL {
+ static function eslSetLogLevel($level) {
+ eslSetLogLevel($level);
+ }
+}
+
+/* PHP Proxy Classes */
+class ESLevent {
+ public $_cPtr=null;
+
+ function __set($var,$value) {
+ $func = 'ESLevent_'.$var.'_set';
+ if (function_exists($func)) call_user_func($func,$this->_cPtr,$value);
+ }
+
+ function __isset($var) {
+ return function_exists('ESLevent_'.$var.'_set');
+ }
+
+ function __get($var) {
+ $func = 'ESLevent_'.$var.'_get';
+ if (function_exists($func)) return call_user_func($func,$this->_cPtr);
+ return null;
+ }
+
+ function __construct($type_or_wrap_me_or_me,$subclass_name_or_free_me=null) {
+ switch (func_num_args()) {
+ case 1: $r=new_ESLevent($type_or_wrap_me_or_me); break;
+ default: $r=new_ESLevent($type_or_wrap_me_or_me,$subclass_name_or_free_me);
+ }
+ $this->_cPtr=$r;
+ }
+
+ function serialize($format=null) {
+ switch (func_num_args()) {
+ case 0: $r=ESLevent_serialize($this->_cPtr); break;
+ default: $r=ESLevent_serialize($this->_cPtr,$format);
+ }
+ return $r;
+ }
+
+ function setPriority($priority=null) {
+ switch (func_num_args()) {
+ case 0: $r=ESLevent_setPriority($this->_cPtr); break;
+ default: $r=ESLevent_setPriority($this->_cPtr,$priority);
+ }
+ return $r;
+ }
+
+ function getHeader($header_name) {
+ return ESLevent_getHeader($this->_cPtr,$header_name);
+ }
+
+ function getBody() {
+ return ESLevent_getBody($this->_cPtr);
+ }
+
+ function getType() {
+ return ESLevent_getType($this->_cPtr);
+ }
+
+ function addBody($value) {
+ return ESLevent_addBody($this->_cPtr,$value);
+ }
+
+ function addHeader($header_name,$value) {
+ return ESLevent_addHeader($this->_cPtr,$header_name,$value);
+ }
+
+ function delHeader($header_name) {
+ return ESLevent_delHeader($this->_cPtr,$header_name);
+ }
+
+ function firstHeader() {
+ return ESLevent_firstHeader($this->_cPtr);
+ }
+
+ function nextHeader() {
+ return ESLevent_nextHeader($this->_cPtr);
+ }
+}
+
+class ESLconnection {
+ public $_cPtr=null;
+
+ function __construct($host_or_socket,$port=null,$password=null) {
+ switch (func_num_args()) {
+ case 1: $r=new_ESLconnection($host_or_socket); break;
+ case 2: $r=new_ESLconnection($host_or_socket,$port); break;
+ default: $r=new_ESLconnection($host_or_socket,$port,$password);
+ }
+ $this->_cPtr=$r;
+ }
+
+ function socketDescriptor() {
+ return ESLconnection_socketDescriptor($this->_cPtr);
+ }
+
+ function connected() {
+ return ESLconnection_connected($this->_cPtr);
+ }
+
+ function __construct() {
+ $this->_cPtr=ESLconnection_getInfo($this->_cPtr);
+ }
+
+ function send($cmd) {
+ return ESLconnection_send($this->_cPtr,$cmd);
+ }
+
+ function __construct($cmd) {
+ $this->_cPtr=ESLconnection_sendRecv($this->_cPtr,$cmd);
+ }
+
+ function __construct($cmd,$arg=null) {
+ switch (func_num_args()) {
+ case 1: $r=ESLconnection_api($this->_cPtr,$cmd); break;
+ default: $r=ESLconnection_api($this->_cPtr,$cmd,$arg);
+ }
+ $this->_cPtr=$r;
+ }
+
+ function __construct($cmd,$arg=null) {
+ switch (func_num_args()) {
+ case 1: $r=ESLconnection_bgapi($this->_cPtr,$cmd); break;
+ default: $r=ESLconnection_bgapi($this->_cPtr,$cmd,$arg);
+ }
+ $this->_cPtr=$r;
+ }
+
+ function sendEvent($send_me) {
+ return ESLconnection_sendEvent($this->_cPtr,$send_me);
+ }
+
+ function __construct() {
+ $this->_cPtr=ESLconnection_recvEvent($this->_cPtr);
+ }
+
+ function __construct($ms) {
+ $this->_cPtr=ESLconnection_recvEventTimed($this->_cPtr,$ms);
+ }
+
+ function __construct($header,$value) {
+ $this->_cPtr=ESLconnection_filter($this->_cPtr,$header,$value);
+ }
+
+ function events($etype,$value) {
+ return ESLconnection_events($this->_cPtr,$etype,$value);
+ }
+
+ function execute($app,$arg=null,$uuid=null) {
+ switch (func_num_args()) {
+ case 1: $r=ESLconnection_execute($this->_cPtr,$app); break;
+ case 2: $r=ESLconnection_execute($this->_cPtr,$app,$arg); break;
+ default: $r=ESLconnection_execute($this->_cPtr,$app,$arg,$uuid);
+ }
+ return $r;
+ }
+
+ function executeAsync($app,$arg=null,$uuid=null) {
+ switch (func_num_args()) {
+ case 1: $r=ESLconnection_executeAsync($this->_cPtr,$app); break;
+ case 2: $r=ESLconnection_executeAsync($this->_cPtr,$app,$arg); break;
+ default: $r=ESLconnection_executeAsync($this->_cPtr,$app,$arg,$uuid);
+ }
+ return $r;
+ }
+
+ function setAsyncExecute($val) {
+ return ESLconnection_setAsyncExecute($this->_cPtr,$val);
+ }
+
+ function setEventLock($val) {
+ return ESLconnection_setEventLock($this->_cPtr,$val);
+ }
+
+ function disconnect() {
+ return ESLconnection_disconnect($this->_cPtr);
+ }
+}
+
+
+?>
Deleted: freeswitch/branches/seven/libs/esl/php/Makefile
Copied: freeswitch/branches/seven/libs/esl/php/Makefile (from rev 14471, freeswitch/trunk/libs/esl/php/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,28 @@
+LOCAL_CFLAGS=$(shell php-config --includes)
+PHP_LDFLAGS=$(shell php-config --ldflags)
+PHP_LIBS=$(shell php-config --libs | sed -r 's/ ?-l(bz2|pcre|xml2|gssapi_krb5|krb5|k5crypto|com_err|history|z|readline|gmp|ssl|crypto)//g')
+LOCAL_LDFLAGS=$(PHP_LDFLAGS) $(PHP_LIBS)
+WRAP_GCC_WARNING_SILENCE=-Wno-unused-label -Wno-unused-function
+
+all: ESL.so
+
+esl_wrap.cpp:
+ swig -module ESL -php5 -c++ -DMULTIPLICITY -I../src/include -o esl_wrap.cpp ../ESL.i
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) $(WRAP_GCC_WARNING_SILENCE) -c esl_wrap.cpp -o esl_wrap.o
+
+ESL.so: esl_wrap.o
+ $(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o ESL.so -L. $(LIBS)
+
+clean:
+ rm -f *.o *.so *~
+
+swigclean:
+ rm -f esl_wrap.* ESL.so php_ESL.* ESL.php
+
+reswig: swigclean esl_wrap.cpp
+
+install: ESL.so
+ cp ESL.so $(shell php-config --extension-dir)
+ cp ESL.php $(shell php -r 'phpinfo();' | grep include_path | cut -d: -f2)
Deleted: freeswitch/branches/seven/libs/esl/php/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/php/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/php/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2823 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic CAPI SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+ or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+ creating a static or dynamic library from the swig runtime code.
+ In 99.9% of the cases, swig just needs to declare them as 'static'.
+
+ But only do this if is strictly necessary, ie, if you have problems
+ with your compiler or so.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/* Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN 0x1
+#define SWIG_CAST_NEW_MEMORY 0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN 0x1
+
+
+/*
+ Flags/methods for returning states.
+
+ The swig conversion methods, as ConvertPtr, return and integer
+ that tells if the conversion was successful or not. And if not,
+ an error code can be returned (see swigerrors.swg for the codes).
+
+ Use the following macros/flags to set or process the returning
+ states.
+
+ In old swig versions, you usually write code as:
+
+ if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+ // success code
+ } else {
+ //fail code
+ }
+
+ Now you can be more explicit as:
+
+ int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ // fail code
+ }
+
+ that seems to be the same, but now you can also do
+
+ Type *ptr;
+ int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ if (SWIG_IsNewObj(res) {
+ ...
+ delete *ptr;
+ } else {
+ ...
+ }
+ } else {
+ // fail code
+ }
+
+ I.e., now SWIG_ConvertPtr can return new objects and you can
+ identify the case and take care of the deallocation. Of course that
+ requires also to SWIG_ConvertPtr to return new result values, as
+
+ int SWIG_ConvertPtr(obj, ptr,...) {
+ if (<obj is ok>) {
+ if (<need new object>) {
+ *ptr = <ptr to new allocated object>;
+ return SWIG_NEWOBJ;
+ } else {
+ *ptr = <ptr to old object>;
+ return SWIG_OLDOBJ;
+ }
+ } else {
+ return SWIG_BADOBJ;
+ }
+ }
+
+ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+ more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+ swig errors code.
+
+ Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+ allows to return the 'cast rank', for example, if you have this
+
+ int food(double)
+ int fooi(int);
+
+ and you call
+
+ food(1) // cast rank '1' (1 -> 1.0)
+ fooi(1) // cast rank '0'
+
+ just use the SWIG_AddCast()/SWIG_CheckState()
+
+
+ */
+#define SWIG_OK (0)
+#define SWIG_ERROR (-1)
+#define SWIG_IsOK(r) (r >= 0)
+#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ (SWIG_ERROR)
+#define SWIG_OLDOBJ (SWIG_OK)
+#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+# ifndef SWIG_TypeRank
+# define SWIG_TypeRank unsigned long
+# endif
+# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
+# define SWIG_MAXCASTRANK (2)
+# endif
+# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
+# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+ return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+ return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+# define SWIG_AddCast
+# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+ const char *name; /* mangled name of this type */
+ const char *str; /* human readable name of this type */
+ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
+ struct swig_cast_info *cast; /* linked list of types that can cast into this type */
+ void *clientdata; /* language specific type data */
+ int owndata; /* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+ swig_type_info *type; /* pointer to type that is equivalent to this type */
+ swig_converter_func converter; /* function to cast the void pointers */
+ struct swig_cast_info *next; /* pointer to next cast in linked list */
+ struct swig_cast_info *prev; /* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+ swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
+ size_t size; /* Number of types in this module */
+ struct swig_module_info *next; /* Pointer to next element in circularly linked list */
+ swig_type_info **type_initial; /* Array of initially generated type structures */
+ swig_cast_info **cast_initial; /* Array of initially generated casting structures */
+ void *clientdata; /* Language specific module data */
+} swig_module_info;
+
+/*
+ Compare two type names skipping the space characters, therefore
+ "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+ Return 0 when the two name types are equivalent, as in
+ strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+ const char *f2, const char *l2) {
+ for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+ while ((*f1 == ' ') && (f1 != l1)) ++f1;
+ while ((*f2 == ' ') && (f2 != l2)) ++f2;
+ if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+ }
+ return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+
+/* think of this as a c++ template<> or a scheme macro */
+#define SWIG_TypeCheck_Template(comparison, ty) \
+ if (ty) { \
+ swig_cast_info *iter = ty->cast; \
+ while (iter) { \
+ if (comparison) { \
+ if (iter == ty->cast) return iter; \
+ /* Move iter to the top of the linked list */ \
+ iter->prev->next = iter->next; \
+ if (iter->next) \
+ iter->next->prev = iter->prev; \
+ iter->next = ty->cast; \
+ iter->prev = 0; \
+ if (ty->cast) ty->cast->prev = iter; \
+ ty->cast = iter; \
+ return iter; \
+ } \
+ iter = iter->next; \
+ } \
+ } \
+ return 0
+
+/*
+ Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
+}
+
+/* Same as previous function, except strcmp is replaced with a pointer comparison */
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
+ SWIG_TypeCheck_Template(iter->type == from, into);
+}
+
+/*
+ Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+ return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+ Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+ swig_type_info *lastty = ty;
+ if (!ty || !ty->dcast) return ty;
+ while (ty && (ty->dcast)) {
+ ty = (*ty->dcast)(ptr);
+ if (ty) lastty = ty;
+ }
+ return lastty;
+}
+
+/*
+ Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+ return ty->name;
+}
+
+/*
+ Return the pretty name associated with this type,
+ that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+ /* The "str" field contains the equivalent pretty names of the
+ type, separated by vertical-bar characters. We choose
+ to print the last name, as it is often (?) the most
+ specific. */
+ if (!type) return NULL;
+ if (type->str != NULL) {
+ const char *last_name = type->str;
+ const char *s;
+ for (s = type->str; *s; s++)
+ if (*s == '|') last_name = s+1;
+ return last_name;
+ }
+ else
+ return type->name;
+}
+
+/*
+ Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+ swig_cast_info *cast = ti->cast;
+ /* if (ti->clientdata == clientdata) return; */
+ ti->clientdata = clientdata;
+
+ while (cast) {
+ if (!cast->converter) {
+ swig_type_info *tc = cast->type;
+ if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+ }
+ }
+ cast = cast->next;
+ }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+ SWIG_TypeClientData(ti, clientdata);
+ ti->owndata = 1;
+}
+
+/*
+ Search for a swig_type_info structure only by mangled name
+ Search is a O(log #types)
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ swig_module_info *iter = start;
+ do {
+ if (iter->size) {
+ register size_t l = 0;
+ register size_t r = iter->size - 1;
+ do {
+ /* since l+r >= 0, we can (>> 1) instead (/ 2) */
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+ register int compare = strcmp(name, iname);
+ if (compare == 0) {
+ return iter->types[i];
+ } else if (compare < 0) {
+ if (i) {
+ r = i - 1;
+ } else {
+ break;
+ }
+ } else if (compare > 0) {
+ l = i + 1;
+ }
+ } else {
+ break; /* should never happen */
+ }
+ } while (l <= r);
+ }
+ iter = iter->next;
+ } while (iter != end);
+ return 0;
+}
+
+/*
+ Search for a swig_type_info structure for either a mangled name or a human readable name.
+ It first searches the mangled names of the types, which is a O(log #types)
+ If a type is not found it then searches the human readable names, which is O(#types).
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ /* STEP 1: Search the name field using binary search */
+ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+ if (ret) {
+ return ret;
+ } else {
+ /* STEP 2: If the type hasn't been found, do a complete search
+ of the str field (the human readable name) */
+ swig_module_info *iter = start;
+ do {
+ register size_t i = 0;
+ for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+ return iter->types[i];
+ }
+ iter = iter->next;
+ } while (iter != end);
+ }
+
+ /* neither found a match */
+ return 0;
+}
+
+/*
+ Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+ static const char hex[17] = "0123456789abcdef";
+ register const unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register unsigned char uu = *u;
+ *(c++) = hex[(uu & 0xf0) >> 4];
+ *(c++) = hex[uu & 0xf];
+ }
+ return c;
+}
+
+/*
+ Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+ register unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register char d = *(c++);
+ register unsigned char uu;
+ if ((d >= '0') && (d <= '9'))
+ uu = ((d - '0') << 4);
+ else if ((d >= 'a') && (d <= 'f'))
+ uu = ((d - ('a'-10)) << 4);
+ else
+ return (char *) 0;
+ d = *(c++);
+ if ((d >= '0') && (d <= '9'))
+ uu |= (d - '0');
+ else if ((d >= 'a') && (d <= 'f'))
+ uu |= (d - ('a'-10));
+ else
+ return (char *) 0;
+ *u = uu;
+ }
+ return c;
+}
+
+/*
+ Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+ char *r = buff;
+ if ((2*sizeof(void *) + 2) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,&ptr,sizeof(void *));
+ if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+ strcpy(r,name);
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ *ptr = (void *) 0;
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+ char *r = buff;
+ size_t lname = (name ? strlen(name) : 0);
+ if ((2*sz + 2 + lname) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ if (lname) {
+ strncpy(r,name,lname+1);
+ } else {
+ *r = 0;
+ }
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ memset(ptr,0,sz);
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * php4run.swg
+ *
+ * PHP4 runtime library
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "zend.h"
+#include "zend_API.h"
+#include "php.h"
+
+#ifdef ZEND_RAW_FENTRY
+/* ZEND_RAW_FENTRY was added somewhere between 5.2.0 and 5.2.3 */
+# define SWIG_ZEND_NAMED_FE(ZN, N, A) ZEND_RAW_FENTRY((char*)#ZN, N, A, 0)
+#else
+/* This causes warnings from GCC >= 4.2 (assigning a string literal to char*).
+ * But this seems to be unavoidable without directly assuming knowledge of
+ * the structure, which changed between PHP4 and PHP5. */
+# define SWIG_ZEND_NAMED_FE(ZN, N, A) ZEND_NAMED_FE(ZN, N, A)
+#endif
+
+#define SWIG_LONG_CONSTANT(N, V) zend_register_long_constant((char*)#N, sizeof(#N), V, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC)
+#define SWIG_DOUBLE_CONSTANT(N, V) zend_register_double_constant((char*)#N, sizeof(#N), V, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC)
+#define SWIG_STRING_CONSTANT(N, V) zend_register_stringl_constant((char*)#N, sizeof(#N), V, strlen(V), CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC)
+#define SWIG_CHAR_CONSTANT(N, V) do {\
+ static char swig_char = (V);\
+ zend_register_stringl_constant((char*)#N, sizeof(#N), &swig_char, 1, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC);\
+} while (0)
+
+/* These TSRMLS_ stuff should already be defined now, but with older php under
+ redhat are not... */
+#ifndef TSRMLS_D
+#define TSRMLS_D
+#endif
+#ifndef TSRMLS_DC
+#define TSRMLS_DC
+#endif
+#ifndef TSRMLS_C
+#define TSRMLS_C
+#endif
+#ifndef TSRMLS_CC
+#define TSRMLS_CC
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* But in fact SWIG_ConvertPtr is the native interface for getting typed
+ pointer values out of zvals. We need the TSRMLS_ macros for when we
+ make PHP type calls later as we handle php resources */
+#define SWIG_ConvertPtr(obj,pp,type,flags) SWIG_ZTS_ConvertPtr(obj,pp,type,flags TSRMLS_CC)
+
+
+#define SWIG_fail goto fail
+
+static const char *default_error_msg = "Unknown error occurred";
+static int default_error_code = E_ERROR;
+
+#define SWIG_PHP_Arg_Error_Msg(argnum,extramsg) "Error in argument " #argnum " "#extramsg
+
+#define SWIG_PHP_Error(code,msg) do { SWIG_ErrorCode() = code; SWIG_ErrorMsg() = msg; SWIG_fail; } while (0)
+
+#define SWIG_contract_assert(expr,msg) \
+ if (!(expr) ) { zend_printf("Contract Assert Failed %s\n",msg ); } else
+
+/* Standard SWIG API */
+#define SWIG_GetModule(clientdata) SWIG_Php4_GetModule()
+#define SWIG_SetModule(clientdata, pointer) SWIG_Php4_SetModule(pointer)
+
+/* used to wrap returned objects in so we know whether they are newobject
+ and need freeing, or not */
+typedef struct _swig_object_wrapper {
+ void * ptr;
+ int newobject;
+} swig_object_wrapper;
+
+/* empty zend destructor for types without one */
+static ZEND_RSRC_DTOR_FUNC(SWIG_landfill) { (void)rsrc; }
+
+#define SWIG_SetPointerZval(a,b,c,d) SWIG_ZTS_SetPointerZval(a,b,c,d TSRMLS_CC)
+
+static void
+SWIG_ZTS_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject TSRMLS_DC) {
+ swig_object_wrapper *value=NULL;
+ /*
+ * First test for Null pointers. Return those as PHP native NULL
+ */
+ if (!ptr ) {
+ ZVAL_NULL(z);
+ return;
+ }
+ if (type->clientdata) {
+ if (! (*(int *)(type->clientdata)))
+ zend_error(E_ERROR, "Type: %s failed to register with zend",type->name);
+ value=(swig_object_wrapper *)emalloc(sizeof(swig_object_wrapper));
+ value->ptr=ptr;
+ value->newobject=newobject;
+ ZEND_REGISTER_RESOURCE(z, value, *(int *)(type->clientdata));
+ return;
+ }
+ zend_error(E_ERROR, "Type: %s not registered with zend",type->name);
+}
+
+/* This pointer conversion routine takes the native pointer p (along with
+ its type name) and converts it by calling appropriate casting functions
+ according to ty. The resultant pointer is returned, or NULL is returned
+ if the pointer can't be cast.
+
+ Sadly PHP has no API to find a type name from a type id, only from an
+ instance of a resource of the type id, so we have to pass type_name as well.
+
+ The two functions which might call this are:
+ SWIG_ZTS_ConvertResourcePtr which gets the type name from the resource
+ and the registered zend destructors for which we have one per type each
+ with the type name hard wired in. */
+static void *
+SWIG_ZTS_ConvertResourceData(void * p, const char *type_name, swig_type_info *ty TSRMLS_DC) {
+ swig_cast_info *tc;
+ void *result = 0;
+
+ if (!ty) {
+ /* They don't care about the target type, so just pass on the pointer! */
+ return p;
+ }
+
+ if (! type_name) {
+ /* can't convert p to ptr type ty if we don't know what type p is */
+ return NULL;
+ }
+
+ /* convert and cast p from type_name to ptr as ty. */
+ tc = SWIG_TypeCheck(type_name, ty);
+ if (tc) {
+ int newmemory = 0;
+ result = SWIG_TypeCast(tc, p, &newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
+ }
+ return result;
+}
+
+/* This function returns a pointer of type ty by extracting the pointer
+ and type info from the resource in z. z must be a resource.
+ If it fails, NULL is returned.
+ It uses SWIG_ZTS_ConvertResourceData to do the real work. */
+static void *
+SWIG_ZTS_ConvertResourcePtr(zval *z, swig_type_info *ty, int flags TSRMLS_DC) {
+ swig_object_wrapper *value;
+ void *p;
+ int type;
+ char *type_name;
+
+ value = (swig_object_wrapper *) zend_list_find(z->value.lval, &type);
+ if ( flags && SWIG_POINTER_DISOWN ) {
+ value->newobject = 0;
+ }
+ p = value->ptr;
+ if (type==-1) return NULL;
+
+ type_name=zend_rsrc_list_get_rsrc_type(z->value.lval TSRMLS_CC);
+
+ return SWIG_ZTS_ConvertResourceData(p, type_name, ty TSRMLS_CC);
+}
+
+/* We allow passing of a RESOURCE pointing to the object or an OBJECT whose
+ _cPtr is a resource pointing to the object */
+static int
+SWIG_ZTS_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags TSRMLS_DC) {
+ if (z == NULL) {
+ *ptr = 0;
+ return 0;
+ }
+
+ switch (z->type) {
+ case IS_OBJECT: {
+ zval ** _cPtr;
+ if (zend_hash_find(HASH_OF(z),(char*)"_cPtr",sizeof("_cPtr"),(void**)&_cPtr)==SUCCESS) {
+ if ((*_cPtr)->type==IS_RESOURCE) {
+ *ptr = SWIG_ZTS_ConvertResourcePtr(*_cPtr, ty, flags TSRMLS_CC);
+ return (*ptr == NULL ? -1 : 0);
+ }
+ }
+ break;
+ }
+ case IS_RESOURCE:
+ *ptr = SWIG_ZTS_ConvertResourcePtr(z, ty, flags TSRMLS_CC);
+ return (*ptr == NULL ? -1 : 0);
+ case IS_NULL:
+ *ptr = 0;
+ return 0;
+ }
+
+ return -1;
+}
+
+static char const_name[] = "swig_runtime_data_type_pointer";
+static swig_module_info *SWIG_Php4_GetModule() {
+ zval *pointer;
+ swig_module_info *ret = 0;
+
+ MAKE_STD_ZVAL(pointer);
+
+ TSRMLS_FETCH();
+
+ if (zend_get_constant(const_name, sizeof(const_name), pointer TSRMLS_CC)) {
+ if (pointer->type == IS_LONG) {
+ ret = (swig_module_info *) pointer->value.lval;
+ }
+ }
+ FREE_ZVAL(pointer);
+ return ret;
+}
+
+static void SWIG_Php4_SetModule(swig_module_info *pointer) {
+ TSRMLS_FETCH();
+ REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, 0);
+}
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_ESLconnection swig_types[0]
+#define SWIGTYPE_p_ESLevent swig_types[1]
+#define SWIGTYPE_p_esl_event_t swig_types[2]
+#define SWIGTYPE_p_esl_priority_t swig_types[3]
+static swig_type_info *swig_types[5];
+static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+/* header section */
+ZEND_BEGIN_MODULE_GLOBALS(ESL)
+const char *error_msg;
+int error_code;
+ZEND_END_MODULE_GLOBALS(ESL)
+ZEND_DECLARE_MODULE_GLOBALS(ESL)
+#ifdef ZTS
+#define SWIG_ErrorMsg() TSRMG(ESL_globals_id, zend_ESL_globals *, error_msg )
+#define SWIG_ErrorCode() TSRMG(ESL_globals_id, zend_ESL_globals *, error_code )
+#else
+#define SWIG_ErrorMsg() (ESL_globals.error_msg)
+#define SWIG_ErrorCode() (ESL_globals.error_code)
+#endif
+
+static void ESL_init_globals(zend_ESL_globals *globals ) {
+ globals->error_msg = default_error_msg;
+ globals->error_code = default_error_code;
+}
+static void ESL_destroy_globals(zend_ESL_globals * globals) { (void)globals; }
+
+static void SWIG_ResetError() {
+ TSRMLS_FETCH();
+ SWIG_ErrorMsg() = default_error_msg;
+ SWIG_ErrorCode() = default_error_code;
+}
+#define SWIG_name "ESL"
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "php_ESL.h"
+#ifdef __cplusplus
+}
+#endif
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_ESLconnection = {"_p_ESLconnection", "ESLconnection *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESLevent = {"_p_ESLevent", "ESLevent *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_event_t = {"_p_esl_event_t", "esl_event_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_priority_t = {"_p_esl_priority_t", "esl_priority_t *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_ESLconnection,
+ &_swigt__p_ESLevent,
+ &_swigt__p_esl_event_t,
+ &_swigt__p_esl_priority_t,
+};
+
+static swig_cast_info _swigc__p_ESLconnection[] = { {&_swigt__p_ESLconnection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESLevent[] = { {&_swigt__p_ESLevent, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_event_t[] = { {&_swigt__p_esl_event_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_priority_t[] = { {&_swigt__p_esl_priority_t, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_ESLconnection,
+ _swigc__p_ESLevent,
+ _swigc__p_esl_event_t,
+ _swigc__p_esl_priority_t,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+/* end header section */
+/* vdecl subsection */
+static int le_swig__p_esl_priority_t=0; /* handle for _p_esl_priority_t */
+static int le_swig__p_ESLevent=0; /* handle for ESLevent */
+static int le_swig__p_esl_event_t=0; /* handle for _p_esl_event_t */
+static int le_swig__p_ESLconnection=0; /* handle for ESLconnection */
+/* end vdecl subsection */
+/* wrapper section */
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_event_set) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_event_set. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ {
+ if(SWIG_ConvertPtr(*args[1], (void **) &arg2, SWIGTYPE_p_esl_event_t, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 2 of ESLevent_event_set. Expected SWIGTYPE_p_esl_event_t");
+ }
+ }
+ if (arg1) (arg1)->event = arg2;
+
+
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_event_get) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_event_get. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (esl_event_t *) ((arg1)->event);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_esl_event_t, 0);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialized_string_set) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_serialized_string_set. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ {
+ if (arg1->serialized_string) delete [] arg1->serialized_string;
+ if (arg2) {
+ arg1->serialized_string = (char *) (new char[strlen((const char *)arg2)+1]);
+ strcpy((char *)arg1->serialized_string, (const char *)arg2);
+ } else {
+ arg1->serialized_string = 0;
+ }
+ }
+
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialized_string_get) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_serialized_string_get. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (char *) ((arg1)->serialized_string);
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_mine_set) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_mine_set. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/
+ convert_to_long_ex(args[1]);
+ arg2 = (int) Z_LVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ if (arg1) (arg1)->mine = arg2;
+
+
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_mine_get) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_mine_get. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (int) ((arg1)->mine);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLevent__SWIG_0) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ zval **args[2];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<1 || arg_count>2 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[0]);
+ arg1 = (char *) Z_STRVAL_PP(args[0]);
+ /*@SWIG@*/;
+
+ if(arg_count > 1) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLevent__SWIG_1) {
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[2];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<1 || arg_count>2 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_esl_event_t, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of new_ESLevent. Expected SWIGTYPE_p_esl_event_t");
+ }
+ }
+ if(arg_count > 1) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/
+ convert_to_long_ex(args[1]);
+ arg2 = (int) Z_LVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ }
+ result = (ESLevent *)new ESLevent(arg1,arg2);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLevent__SWIG_2) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of new_ESLevent. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ result = (ESLevent *)new ESLevent(arg1);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLevent) {
+ int argc;
+ zval **argv[2];
+
+ argc = ZEND_NUM_ARGS();
+ zend_get_parameters_array_ex(argc,argv);
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ {
+ void *tmp;
+ _v = (SWIG_ConvertPtr( *argv[0], (void**)&tmp, SWIGTYPE_p_esl_event_t, 0) >= 0);
+ }
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_1(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ _v = (Z_TYPE_PP(argv[1]) == IS_LONG);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_1(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ }
+ }
+ if (argc == 1) {
+ int _v;
+ {
+ void *tmp;
+ _v = (SWIG_ConvertPtr( *argv[0], (void**)&tmp, SWIGTYPE_p_ESLevent, 0) >= 0);
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_2(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ _v = (Z_TYPE_PP(argv[0]) == IS_STRING);
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_0(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ _v = (Z_TYPE_PP(argv[1]) == IS_STRING);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_0(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ }
+ }
+
+ SWIG_ErrorCode() = E_ERROR;
+ SWIG_ErrorMsg() = "No matching function for overloaded 'new_ESLevent'";
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+/* This function is designed to be called by the zend list destructors */
+/* to typecast and do the actual destruction */
+static void __wrap_delete_ESLevent(zend_rsrc_list_entry *rsrc, const char *type_name TSRMLS_DC) {
+ swig_object_wrapper *value=(swig_object_wrapper *) rsrc->ptr ;
+ void *ptr=value->ptr ;
+ int newobject=value->newobject ;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+
+ efree(value);
+ if (! newobject) return; /* can't delete it! */
+ arg1 = (ESLevent *)SWIG_ZTS_ConvertResourceData(ptr,type_name,SWIGTYPE_p_ESLevent TSRMLS_CC);
+ if (! arg1) zend_error(E_ERROR, "ESLevent resource already free'd");
+ delete arg1;
+
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialize) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+ zval **args[2];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<1 || arg_count>2 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_serialize. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ if(arg_count > 1) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_setPriority) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ esl_priority_t *tmp2 ;
+ zval **args[2];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<1 || arg_count>2 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_setPriority. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ if(arg_count > 1) {
+ {
+ if(SWIG_ConvertPtr(*args[1], (void **) &tmp2, SWIGTYPE_p_esl_priority_t, 0) < 0 || tmp2 == NULL) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 2 of ESLevent_setPriority. Expected SWIGTYPE_p_esl_priority_t");
+ }
+ arg2 = *tmp2;
+ }
+ }
+ result = (bool)(arg1)->setPriority(arg2);
+ {
+ ZVAL_BOOL(return_value,(result)?1:0);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getHeader) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_getHeader. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getBody) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_getBody. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (char *)(arg1)->getBody();
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getType) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_getType. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (char *)(arg1)->getType();
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_addBody) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_addBody. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ {
+ ZVAL_BOOL(return_value,(result)?1:0);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_addHeader) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+ zval **args[3];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_addHeader. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ {
+ ZVAL_BOOL(return_value,(result)?1:0);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_delHeader) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_delHeader. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ {
+ ZVAL_BOOL(return_value,(result)?1:0);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_firstHeader) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_firstHeader. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (char *)(arg1)->firstHeader();
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_nextHeader) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_nextHeader. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (char *)(arg1)->nextHeader();
+ {
+ if(!result) {
+ ZVAL_NULL(return_value);
+ } else {
+ ZVAL_STRING(return_value,result, 1);
+ }
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLconnection__SWIG_0) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+ zval **args[3];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[0]);
+ arg1 = (char *) Z_STRVAL_PP(args[0]);
+ /*@SWIG@*/;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLconnection, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLconnection__SWIG_1) {
+ int arg1 ;
+ ESLconnection *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/
+ convert_to_long_ex(args[0]);
+ arg1 = (int) Z_LVAL_PP(args[0]);
+ /*@SWIG@*/;
+
+ result = (ESLconnection *)new ESLconnection(arg1);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLconnection, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_new_ESLconnection) {
+ int argc;
+ zval **argv[3];
+
+ argc = ZEND_NUM_ARGS();
+ zend_get_parameters_array_ex(argc,argv);
+ if (argc == 1) {
+ int _v;
+ _v = (Z_TYPE_PP(argv[0]) == IS_LONG);
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_1(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ _v = (Z_TYPE_PP(argv[0]) == IS_STRING);
+ if (_v) {
+ _v = (Z_TYPE_PP(argv[1]) == IS_STRING);
+ if (_v) {
+ _v = (Z_TYPE_PP(argv[2]) == IS_STRING);
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_0(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ }
+ }
+ }
+ }
+
+ SWIG_ErrorCode() = E_ERROR;
+ SWIG_ErrorMsg() = "No matching function for overloaded 'new_ESLconnection'";
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+/* This function is designed to be called by the zend list destructors */
+/* to typecast and do the actual destruction */
+static void __wrap_delete_ESLconnection(zend_rsrc_list_entry *rsrc, const char *type_name TSRMLS_DC) {
+ swig_object_wrapper *value=(swig_object_wrapper *) rsrc->ptr ;
+ void *ptr=value->ptr ;
+ int newobject=value->newobject ;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+
+ efree(value);
+ if (! newobject) return; /* can't delete it! */
+ arg1 = (ESLconnection *)SWIG_ZTS_ConvertResourceData(ptr,type_name,SWIGTYPE_p_ESLconnection TSRMLS_CC);
+ if (! arg1) zend_error(E_ERROR, "ESLconnection resource already free'd");
+ delete arg1;
+
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_socketDescriptor) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_socketDescriptor. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (int)(arg1)->socketDescriptor();
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_connected) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_connected. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (int)(arg1)->connected();
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_getInfo) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_getInfo. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (ESLevent *)(arg1)->getInfo();
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_send) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_send. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (int)(arg1)->send((char const *)arg2);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_sendRecv) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_sendRecv. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_api) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ zval **args[3];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<2 || arg_count>3 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_api. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ if(arg_count > 2) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_bgapi) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ zval **args[3];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<2 || arg_count>3 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_bgapi. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ if(arg_count > 2) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_sendEvent) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_sendEvent. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ {
+ if(SWIG_ConvertPtr(*args[1], (void **) &arg2, SWIGTYPE_p_ESLevent, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 2 of ESLconnection_sendEvent. Expected SWIGTYPE_p_ESLevent");
+ }
+ }
+ result = (int)(arg1)->sendEvent(arg2);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_recvEvent) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_recvEvent. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (ESLevent *)(arg1)->recvEvent();
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_recvEventTimed) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_recvEventTimed. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/
+ convert_to_long_ex(args[1]);
+ arg2 = (int) Z_LVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_filter) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ zval **args[3];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_filter. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ {
+ SWIG_SetPointerZval(return_value, (void *)result, SWIGTYPE_p_ESLevent, 1);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_events) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+ zval **args[3];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_events. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_execute) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ zval **args[4];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<2 || arg_count>4 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_execute. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ if(arg_count > 2) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ }
+ if(arg_count > 3) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[3]);
+ arg4 = (char *) Z_STRVAL_PP(args[3]);
+ /*@SWIG@*/;
+
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_executeAsync) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ zval **args[4];
+ int arg_count;
+
+ SWIG_ResetError();
+ arg_count = ZEND_NUM_ARGS();
+ if(arg_count<2 || arg_count>4 ||
+ zend_get_parameters_array_ex(arg_count,args)!=SUCCESS)
+ WRONG_PARAM_COUNT;
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_executeAsync. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ if(arg_count > 2) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[2]);
+ arg3 = (char *) Z_STRVAL_PP(args[2]);
+ /*@SWIG@*/;
+
+ }
+ if(arg_count > 3) {
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[3]);
+ arg4 = (char *) Z_STRVAL_PP(args[3]);
+ /*@SWIG@*/;
+
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_setAsyncExecute) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_setAsyncExecute. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_setEventLock) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ zval **args[2];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_setEventLock. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/
+ convert_to_string_ex(args[1]);
+ arg2 = (char *) Z_STRVAL_PP(args[1]);
+ /*@SWIG@*/;
+
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_disconnect) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+ {
+ if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLconnection, 0) < 0) {
+ SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLconnection_disconnect. Expected SWIGTYPE_p_ESLconnection");
+ }
+ }
+ if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
+ result = (int)(arg1)->disconnect();
+ {
+ ZVAL_LONG(return_value,result);
+ }
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+ZEND_NAMED_FUNCTION(_wrap_eslSetLogLevel) {
+ int arg1 ;
+ zval **args[1];
+
+ SWIG_ResetError();
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
+ WRONG_PARAM_COUNT;
+ }
+
+
+ /*@SWIG:/usr/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/
+ convert_to_long_ex(args[0]);
+ arg1 = (int) Z_LVAL_PP(args[0]);
+ /*@SWIG@*/;
+
+ eslSetLogLevel(arg1);
+
+ return;
+fail:
+ zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg());
+}
+
+
+/* NEW Destructor style */
+static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_esl_priority_t) {
+ /* No destructor for simple type _p_esl_priority_t */
+}
+/* NEW Destructor style */
+static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_ESLevent) {
+ __wrap_delete_ESLevent(rsrc, SWIGTYPE_p_ESLevent->name TSRMLS_CC);
+}
+/* NEW Destructor style */
+static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_esl_event_t) {
+ /* No destructor for simple type _p_esl_event_t */
+}
+/* NEW Destructor style */
+static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_ESLconnection) {
+ __wrap_delete_ESLconnection(rsrc, SWIGTYPE_p_ESLconnection->name TSRMLS_CC);
+}
+/* end wrapper section */
+/* class entry subsection */
+
+
+/* entry subsection */
+/* Every non-class user visible function must have an entry here */
+static zend_function_entry ESL_functions[] = {
+ SWIG_ZEND_NAMED_FE(eslevent_event_set,_wrap_ESLevent_event_set,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_event_get,_wrap_ESLevent_event_get,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_serialized_string_set,_wrap_ESLevent_serialized_string_set,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_serialized_string_get,_wrap_ESLevent_serialized_string_get,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_mine_set,_wrap_ESLevent_mine_set,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_mine_get,_wrap_ESLevent_mine_get,NULL)
+ SWIG_ZEND_NAMED_FE(new_eslevent,_wrap_new_ESLevent,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_serialize,_wrap_ESLevent_serialize,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_setpriority,_wrap_ESLevent_setPriority,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_getheader,_wrap_ESLevent_getHeader,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_getbody,_wrap_ESLevent_getBody,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_gettype,_wrap_ESLevent_getType,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_addbody,_wrap_ESLevent_addBody,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_addheader,_wrap_ESLevent_addHeader,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_delheader,_wrap_ESLevent_delHeader,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_firstheader,_wrap_ESLevent_firstHeader,NULL)
+ SWIG_ZEND_NAMED_FE(eslevent_nextheader,_wrap_ESLevent_nextHeader,NULL)
+ SWIG_ZEND_NAMED_FE(new_eslconnection,_wrap_new_ESLconnection,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_socketdescriptor,_wrap_ESLconnection_socketDescriptor,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_connected,_wrap_ESLconnection_connected,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_getinfo,_wrap_ESLconnection_getInfo,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_send,_wrap_ESLconnection_send,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_sendrecv,_wrap_ESLconnection_sendRecv,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_api,_wrap_ESLconnection_api,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_bgapi,_wrap_ESLconnection_bgapi,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_sendevent,_wrap_ESLconnection_sendEvent,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_recvevent,_wrap_ESLconnection_recvEvent,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_recveventtimed,_wrap_ESLconnection_recvEventTimed,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_filter,_wrap_ESLconnection_filter,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_events,_wrap_ESLconnection_events,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_execute,_wrap_ESLconnection_execute,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_executeasync,_wrap_ESLconnection_executeAsync,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_setasyncexecute,_wrap_ESLconnection_setAsyncExecute,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_seteventlock,_wrap_ESLconnection_setEventLock,NULL)
+ SWIG_ZEND_NAMED_FE(eslconnection_disconnect,_wrap_ESLconnection_disconnect,NULL)
+ SWIG_ZEND_NAMED_FE(eslsetloglevel,_wrap_eslSetLogLevel,NULL)
+{NULL, NULL, NULL}
+};
+
+/* init section */
+zend_module_entry ESL_module_entry = {
+#if ZEND_MODULE_API_NO > 20010900
+ STANDARD_MODULE_HEADER,
+#endif
+ (char*)"ESL",
+ ESL_functions,
+ PHP_MINIT(ESL),
+ PHP_MSHUTDOWN(ESL),
+ PHP_RINIT(ESL),
+ PHP_RSHUTDOWN(ESL),
+ PHP_MINFO(ESL),
+#if ZEND_MODULE_API_NO > 20010900
+ NO_VERSION_YET,
+#endif
+ STANDARD_MODULE_PROPERTIES
+};
+zend_module_entry* SWIG_module_entry = &ESL_module_entry;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+SWIGEXPORT zend_module_entry *get_module(void) { return &ESL_module_entry; }
+#ifdef __cplusplus
+}
+#endif
+
+#define SWIG_php_minit PHP_MINIT_FUNCTION(ESL)
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ * 1) If the cast->type has already been loaded AND the type we are adding
+ * casting info to has not been loaded (it is in this module), THEN we
+ * replace the cast->type pointer with the type pointer that has already
+ * been loaded.
+ * 2) If BOTH types (the one we are adding casting info to, and the
+ * cast->type) are loaded, THEN the cast info has already been loaded by
+ * the previous module so we just ignore it.
+ * 3) Finally, if cast->type has not already been loaded, then we add that
+ * swig_cast_info to the linked list (because the cast->type) pointer will
+ * be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+ size_t i;
+ swig_module_info *module_head, *iter;
+ int found, init;
+
+ clientdata = clientdata;
+
+ /* check to see if the circular list has been setup, if not, set it up */
+ if (swig_module.next==0) {
+ /* Initialize the swig_module */
+ swig_module.type_initial = swig_type_initial;
+ swig_module.cast_initial = swig_cast_initial;
+ swig_module.next = &swig_module;
+ init = 1;
+ } else {
+ init = 0;
+ }
+
+ /* Try and load any already created modules */
+ module_head = SWIG_GetModule(clientdata);
+ if (!module_head) {
+ /* This is the first module loaded for this interpreter */
+ /* so set the swig module into the interpreter */
+ SWIG_SetModule(clientdata, &swig_module);
+ module_head = &swig_module;
+ } else {
+ /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+ found=0;
+ iter=module_head;
+ do {
+ if (iter==&swig_module) {
+ found=1;
+ break;
+ }
+ iter=iter->next;
+ } while (iter!= module_head);
+
+ /* if the is found in the list, then all is done and we may leave */
+ if (found) return;
+ /* otherwise we must add out module into the list */
+ swig_module.next = module_head->next;
+ module_head->next = &swig_module;
+ }
+
+ /* When multiple interpeters are used, a module could have already been initialized in
+ a different interpreter, but not yet have a pointer in this interpreter.
+ In this case, we do not want to continue adding types... everything should be
+ set up already */
+ if (init == 0) return;
+
+ /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+ for (i = 0; i < swig_module.size; ++i) {
+ swig_type_info *type = 0;
+ swig_type_info *ret;
+ swig_cast_info *cast;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+
+ /* if there is another module already loaded */
+ if (swig_module.next != &swig_module) {
+ type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+ }
+ if (type) {
+ /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+ if (swig_module.type_initial[i]->clientdata) {
+ type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+ }
+ } else {
+ type = swig_module.type_initial[i];
+ }
+
+ /* Insert casting types */
+ cast = swig_module.cast_initial[i];
+ while (cast->type) {
+
+ /* Don't need to add information already in the list */
+ ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+ if (swig_module.next != &swig_module) {
+ ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+ }
+ if (ret) {
+ if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+ cast->type = ret;
+ ret = 0;
+ } else {
+ /* Check for casting already in the list */
+ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+ if (!ocast) ret = 0;
+ }
+ }
+
+ if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+ if (type->cast) {
+ type->cast->prev = cast;
+ cast->next = type->cast;
+ }
+ type->cast = cast;
+ }
+ cast++;
+ }
+ /* Set entry in modules->types array equal to the type */
+ swig_module.types[i] = type;
+ }
+ swig_module.types[i] = 0;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+ for (i = 0; i < swig_module.size; ++i) {
+ int j = 0;
+ swig_cast_info *cast = swig_module.cast_initial[i];
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+ while (cast->type) {
+ printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+ cast++;
+ ++j;
+ }
+ printf("---- Total casts: %d\n",j);
+ }
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types. It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+ size_t i;
+ swig_cast_info *equiv;
+ static int init_run = 0;
+
+ if (init_run) return;
+ init_run = 1;
+
+ for (i = 0; i < swig_module.size; i++) {
+ if (swig_module.types[i]->clientdata) {
+ equiv = swig_module.types[i]->cast;
+ while (equiv) {
+ if (!equiv->converter) {
+ if (equiv->type && !equiv->type->clientdata)
+ SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+ }
+ equiv = equiv->next;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+#if 0
+{ /* c-mode */
+#endif
+}
+#endif
+
+
+ SWIG_php_minit {
+ SWIG_InitializeModule(0);
+
+/* oinit subsection */
+ZEND_INIT_MODULE_GLOBALS(ESL, ESL_init_globals, ESL_destroy_globals);
+
+/* Register resource destructors for pointer types */
+le_swig__p_esl_priority_t=zend_register_list_destructors_ex(_wrap_destroy_p_esl_priority_t,NULL,(char *)(SWIGTYPE_p_esl_priority_t->name),module_number);
+SWIG_TypeClientData(SWIGTYPE_p_esl_priority_t,&le_swig__p_esl_priority_t);
+le_swig__p_ESLevent=zend_register_list_destructors_ex(_wrap_destroy_p_ESLevent,NULL,(char *)(SWIGTYPE_p_ESLevent->name),module_number);
+SWIG_TypeClientData(SWIGTYPE_p_ESLevent,&le_swig__p_ESLevent);
+le_swig__p_esl_event_t=zend_register_list_destructors_ex(_wrap_destroy_p_esl_event_t,NULL,(char *)(SWIGTYPE_p_esl_event_t->name),module_number);
+SWIG_TypeClientData(SWIGTYPE_p_esl_event_t,&le_swig__p_esl_event_t);
+le_swig__p_ESLconnection=zend_register_list_destructors_ex(_wrap_destroy_p_ESLconnection,NULL,(char *)(SWIGTYPE_p_ESLconnection->name),module_number);
+SWIG_TypeClientData(SWIGTYPE_p_ESLconnection,&le_swig__p_ESLconnection);
+CG(active_class_entry) = NULL;
+/* end oinit subsection */
+
+/* cinit subsection */
+/* end cinit subsection */
+
+ return SUCCESS;
+}
+
+PHP_RINIT_FUNCTION(ESL)
+{
+/* rinit section */
+
+/* vinit subsection */
+/* end vinit subsection */
+
+ return SUCCESS;
+}
+
+PHP_MSHUTDOWN_FUNCTION(ESL)
+{
+/* shutdown section */
+#ifdef ZTS
+ ts_free_id(ESL_globals_id);
+#endif
+ return SUCCESS;
+}
+
+PHP_RSHUTDOWN_FUNCTION(ESL)
+{
+/* rshutdown section */
+
+ return SUCCESS;
+}
+
+PHP_MINFO_FUNCTION(ESL)
+{
+}
+/* end init section */
Deleted: freeswitch/branches/seven/libs/esl/php/php_ESL.h
Copied: freeswitch/branches/seven/libs/esl/php/php_ESL.h (from rev 14471, freeswitch/trunk/libs/esl/php/php_ESL.h) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/php_ESL.h (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/php_ESL.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,71 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+
+#ifndef PHP_ESL_H
+#define PHP_ESL_H
+
+extern zend_module_entry ESL_module_entry;
+#define phpext_ESL_ptr &ESL_module_entry
+
+#ifdef PHP_WIN32
+# define PHP_ESL_API __declspec(dllexport)
+#else
+# define PHP_ESL_API
+#endif
+
+#ifdef ZTS
+#include "TSRM.h"
+#endif
+
+PHP_MINIT_FUNCTION(ESL);
+PHP_MSHUTDOWN_FUNCTION(ESL);
+PHP_RINIT_FUNCTION(ESL);
+PHP_RSHUTDOWN_FUNCTION(ESL);
+PHP_MINFO_FUNCTION(ESL);
+
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_event_set);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_event_get);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialized_string_set);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialized_string_get);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_mine_set);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_mine_get);
+ZEND_NAMED_FUNCTION(_wrap_new_ESLevent);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_serialize);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_setPriority);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getHeader);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getBody);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_getType);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_addBody);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_addHeader);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_delHeader);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_firstHeader);
+ZEND_NAMED_FUNCTION(_wrap_ESLevent_nextHeader);
+ZEND_NAMED_FUNCTION(_wrap_new_ESLconnection);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_socketDescriptor);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_connected);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_getInfo);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_send);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_sendRecv);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_api);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_bgapi);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_sendEvent);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_recvEvent);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_recvEventTimed);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_filter);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_events);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_execute);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_executeAsync);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_setAsyncExecute);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_setEventLock);
+ZEND_NAMED_FUNCTION(_wrap_ESLconnection_disconnect);
+ZEND_NAMED_FUNCTION(_wrap_eslSetLogLevel);
+#endif /* PHP_ESL_H */
Deleted: freeswitch/branches/seven/libs/esl/php/single_command.php
Copied: freeswitch/branches/seven/libs/esl/php/single_command.php (from rev 14471, freeswitch/trunk/libs/esl/php/single_command.php) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/single_command.php (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/single_command.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,17 @@
+#!/usr/bin/php
+<?php
+require_once('ESL.php');
+
+if ($argc > 1) {
+ array_shift($argv);
+ $command = sprintf('%s', implode(' ', $argv));
+ printf("Command to run is: %s\n", $command);
+
+ $sock = new ESLconnection('localhost', '8021', 'ClueCon');
+ $res = $sock->api($command);
+ printf("%s\n", $res->getBody());
+} else {
+ printf("ERROR: You Need To Pass A Command\nUsage:\n\t%s <command>", $argv[0]);
+}
+
+?>
Deleted: freeswitch/branches/seven/libs/esl/php/test.php
Copied: freeswitch/branches/seven/libs/esl/php/test.php (from rev 14471, freeswitch/trunk/libs/esl/php/test.php) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/php/test.php (rev 0)
+++ freeswitch/branches/seven/libs/esl/php/test.php 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+<?php
+require_once('ESL.php');
+
+$esl = new eslConnection('127.0.0.1', '8021', 'ClueCon');
+$e = $esl->sendRecv("api status");
+print $e->getBody();
+
Copied: freeswitch/branches/seven/libs/esl/python (from rev 14471, freeswitch/trunk/libs/esl/python)
Deleted: freeswitch/branches/seven/libs/esl/python/ESL.py
Copied: freeswitch/branches/seven/libs/esl/python/ESL.py (from rev 14471, freeswitch/trunk/libs/esl/python/ESL.py) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/ESL.py (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/ESL.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,102 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 1.3.35
+#
+# Don't modify this file, modify the SWIG interface instead.
+# This file is compatible with both classic and new-style classes.
+
+import _ESL
+import new
+new_instancemethod = new.instancemethod
+def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
+ if (name == "thisown"): return self.this.own(value)
+ if (name == "this"):
+ if type(value).__name__ == 'PySwigObject':
+ self.__dict__[name] = value
+ return
+ method = class_type.__swig_setmethods__.get(name,None)
+ if method: return method(self,value)
+ if (not static) or hasattr(self,name):
+ self.__dict__[name] = value
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+
+def _swig_setattr(self,class_type,name,value):
+ return _swig_setattr_nondynamic(self,class_type,name,value,0)
+
+def _swig_getattr(self,class_type,name):
+ if (name == "thisown"): return self.this.own()
+ method = class_type.__swig_getmethods__.get(name,None)
+ if method: return method(self)
+ raise AttributeError,name
+
+def _swig_repr(self):
+ try: strthis = "proxy of " + self.this.__repr__()
+ except: strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+class ESLevent:
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, ESLevent, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, ESLevent, name)
+ __repr__ = _swig_repr
+ __swig_setmethods__["event"] = _ESL.ESLevent_event_set
+ __swig_getmethods__["event"] = _ESL.ESLevent_event_get
+ __swig_setmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_set
+ __swig_getmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_get
+ __swig_setmethods__["mine"] = _ESL.ESLevent_mine_set
+ __swig_getmethods__["mine"] = _ESL.ESLevent_mine_get
+ def __init__(self, *args):
+ this = apply(_ESL.new_ESLevent, args)
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _ESL.delete_ESLevent
+ __del__ = lambda self : None;
+ def serialize(*args): return apply(_ESL.ESLevent_serialize, args)
+ def setPriority(*args): return apply(_ESL.ESLevent_setPriority, args)
+ def getHeader(*args): return apply(_ESL.ESLevent_getHeader, args)
+ def getBody(*args): return apply(_ESL.ESLevent_getBody, args)
+ def getType(*args): return apply(_ESL.ESLevent_getType, args)
+ def addBody(*args): return apply(_ESL.ESLevent_addBody, args)
+ def addHeader(*args): return apply(_ESL.ESLevent_addHeader, args)
+ def delHeader(*args): return apply(_ESL.ESLevent_delHeader, args)
+ def firstHeader(*args): return apply(_ESL.ESLevent_firstHeader, args)
+ def nextHeader(*args): return apply(_ESL.ESLevent_nextHeader, args)
+ESLevent_swigregister = _ESL.ESLevent_swigregister
+ESLevent_swigregister(ESLevent)
+
+class ESLconnection:
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, ESLconnection, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, ESLconnection, name)
+ __repr__ = _swig_repr
+ def __init__(self, *args):
+ this = apply(_ESL.new_ESLconnection, args)
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _ESL.delete_ESLconnection
+ __del__ = lambda self : None;
+ def socketDescriptor(*args): return apply(_ESL.ESLconnection_socketDescriptor, args)
+ def connected(*args): return apply(_ESL.ESLconnection_connected, args)
+ def getInfo(*args): return apply(_ESL.ESLconnection_getInfo, args)
+ def send(*args): return apply(_ESL.ESLconnection_send, args)
+ def sendRecv(*args): return apply(_ESL.ESLconnection_sendRecv, args)
+ def api(*args): return apply(_ESL.ESLconnection_api, args)
+ def bgapi(*args): return apply(_ESL.ESLconnection_bgapi, args)
+ def sendEvent(*args): return apply(_ESL.ESLconnection_sendEvent, args)
+ def recvEvent(*args): return apply(_ESL.ESLconnection_recvEvent, args)
+ def recvEventTimed(*args): return apply(_ESL.ESLconnection_recvEventTimed, args)
+ def filter(*args): return apply(_ESL.ESLconnection_filter, args)
+ def events(*args): return apply(_ESL.ESLconnection_events, args)
+ def execute(*args): return apply(_ESL.ESLconnection_execute, args)
+ def executeAsync(*args): return apply(_ESL.ESLconnection_executeAsync, args)
+ def setAsyncExecute(*args): return apply(_ESL.ESLconnection_setAsyncExecute, args)
+ def setEventLock(*args): return apply(_ESL.ESLconnection_setEventLock, args)
+ def disconnect(*args): return apply(_ESL.ESLconnection_disconnect, args)
+ESLconnection_swigregister = _ESL.ESLconnection_swigregister
+ESLconnection_swigregister(ESLconnection)
+
+eslSetLogLevel = _ESL.eslSetLogLevel
+
+
Deleted: freeswitch/branches/seven/libs/esl/python/Makefile
Copied: freeswitch/branches/seven/libs/esl/python/Makefile (from rev 14471, freeswitch/trunk/libs/esl/python/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,22 @@
+LOCAL_CFLAGS=-I/usr/include/python2.4
+LOCAL_LDFLAGS=-lpython2.4
+
+all: _ESL.so
+
+esl_wrap.cpp:
+ swig -module ESL -classic -python -c++ -DMULTIPLICITY -I../src/include -o esl_wrap.cpp ../ESL.i
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) -c esl_wrap.cpp -o esl_wrap.o
+
+_ESL.so: esl_wrap.o
+ $(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o _ESL.so -L. $(LIBS)
+
+clean:
+ rm -f *.o *.so *~
+
+swigclean:
+ rm -f esl_wrap.* ESL.so
+
+reswig: swigclean esl_wrap.cpp
+
Deleted: freeswitch/branches/seven/libs/esl/python/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/python/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/python/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,4913 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGPYTHON
+#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+#define SWIG_PYTHON_CLASSIC
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+
+/* Python.h has to appear first */
+#include <Python.h>
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic CAPI SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+ or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+ creating a static or dynamic library from the swig runtime code.
+ In 99.9% of the cases, swig just needs to declare them as 'static'.
+
+ But only do this if is strictly necessary, ie, if you have problems
+ with your compiler or so.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/* Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN 0x1
+#define SWIG_CAST_NEW_MEMORY 0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN 0x1
+
+
+/*
+ Flags/methods for returning states.
+
+ The swig conversion methods, as ConvertPtr, return and integer
+ that tells if the conversion was successful or not. And if not,
+ an error code can be returned (see swigerrors.swg for the codes).
+
+ Use the following macros/flags to set or process the returning
+ states.
+
+ In old swig versions, you usually write code as:
+
+ if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+ // success code
+ } else {
+ //fail code
+ }
+
+ Now you can be more explicit as:
+
+ int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ // fail code
+ }
+
+ that seems to be the same, but now you can also do
+
+ Type *ptr;
+ int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ if (SWIG_IsNewObj(res) {
+ ...
+ delete *ptr;
+ } else {
+ ...
+ }
+ } else {
+ // fail code
+ }
+
+ I.e., now SWIG_ConvertPtr can return new objects and you can
+ identify the case and take care of the deallocation. Of course that
+ requires also to SWIG_ConvertPtr to return new result values, as
+
+ int SWIG_ConvertPtr(obj, ptr,...) {
+ if (<obj is ok>) {
+ if (<need new object>) {
+ *ptr = <ptr to new allocated object>;
+ return SWIG_NEWOBJ;
+ } else {
+ *ptr = <ptr to old object>;
+ return SWIG_OLDOBJ;
+ }
+ } else {
+ return SWIG_BADOBJ;
+ }
+ }
+
+ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+ more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+ swig errors code.
+
+ Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+ allows to return the 'cast rank', for example, if you have this
+
+ int food(double)
+ int fooi(int);
+
+ and you call
+
+ food(1) // cast rank '1' (1 -> 1.0)
+ fooi(1) // cast rank '0'
+
+ just use the SWIG_AddCast()/SWIG_CheckState()
+
+
+ */
+#define SWIG_OK (0)
+#define SWIG_ERROR (-1)
+#define SWIG_IsOK(r) (r >= 0)
+#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ (SWIG_ERROR)
+#define SWIG_OLDOBJ (SWIG_OK)
+#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+# ifndef SWIG_TypeRank
+# define SWIG_TypeRank unsigned long
+# endif
+# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
+# define SWIG_MAXCASTRANK (2)
+# endif
+# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
+# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+ return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+ return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+# define SWIG_AddCast
+# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+ const char *name; /* mangled name of this type */
+ const char *str; /* human readable name of this type */
+ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
+ struct swig_cast_info *cast; /* linked list of types that can cast into this type */
+ void *clientdata; /* language specific type data */
+ int owndata; /* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+ swig_type_info *type; /* pointer to type that is equivalent to this type */
+ swig_converter_func converter; /* function to cast the void pointers */
+ struct swig_cast_info *next; /* pointer to next cast in linked list */
+ struct swig_cast_info *prev; /* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+ swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
+ size_t size; /* Number of types in this module */
+ struct swig_module_info *next; /* Pointer to next element in circularly linked list */
+ swig_type_info **type_initial; /* Array of initially generated type structures */
+ swig_cast_info **cast_initial; /* Array of initially generated casting structures */
+ void *clientdata; /* Language specific module data */
+} swig_module_info;
+
+/*
+ Compare two type names skipping the space characters, therefore
+ "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+ Return 0 when the two name types are equivalent, as in
+ strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+ const char *f2, const char *l2) {
+ for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+ while ((*f1 == ' ') && (f1 != l1)) ++f1;
+ while ((*f2 == ' ') && (f2 != l2)) ++f2;
+ if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+ }
+ return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+
+/* think of this as a c++ template<> or a scheme macro */
+#define SWIG_TypeCheck_Template(comparison, ty) \
+ if (ty) { \
+ swig_cast_info *iter = ty->cast; \
+ while (iter) { \
+ if (comparison) { \
+ if (iter == ty->cast) return iter; \
+ /* Move iter to the top of the linked list */ \
+ iter->prev->next = iter->next; \
+ if (iter->next) \
+ iter->next->prev = iter->prev; \
+ iter->next = ty->cast; \
+ iter->prev = 0; \
+ if (ty->cast) ty->cast->prev = iter; \
+ ty->cast = iter; \
+ return iter; \
+ } \
+ iter = iter->next; \
+ } \
+ } \
+ return 0
+
+/*
+ Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
+}
+
+/* Same as previous function, except strcmp is replaced with a pointer comparison */
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
+ SWIG_TypeCheck_Template(iter->type == from, into);
+}
+
+/*
+ Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+ return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+ Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+ swig_type_info *lastty = ty;
+ if (!ty || !ty->dcast) return ty;
+ while (ty && (ty->dcast)) {
+ ty = (*ty->dcast)(ptr);
+ if (ty) lastty = ty;
+ }
+ return lastty;
+}
+
+/*
+ Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+ return ty->name;
+}
+
+/*
+ Return the pretty name associated with this type,
+ that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+ /* The "str" field contains the equivalent pretty names of the
+ type, separated by vertical-bar characters. We choose
+ to print the last name, as it is often (?) the most
+ specific. */
+ if (!type) return NULL;
+ if (type->str != NULL) {
+ const char *last_name = type->str;
+ const char *s;
+ for (s = type->str; *s; s++)
+ if (*s == '|') last_name = s+1;
+ return last_name;
+ }
+ else
+ return type->name;
+}
+
+/*
+ Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+ swig_cast_info *cast = ti->cast;
+ /* if (ti->clientdata == clientdata) return; */
+ ti->clientdata = clientdata;
+
+ while (cast) {
+ if (!cast->converter) {
+ swig_type_info *tc = cast->type;
+ if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+ }
+ }
+ cast = cast->next;
+ }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+ SWIG_TypeClientData(ti, clientdata);
+ ti->owndata = 1;
+}
+
+/*
+ Search for a swig_type_info structure only by mangled name
+ Search is a O(log #types)
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ swig_module_info *iter = start;
+ do {
+ if (iter->size) {
+ register size_t l = 0;
+ register size_t r = iter->size - 1;
+ do {
+ /* since l+r >= 0, we can (>> 1) instead (/ 2) */
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+ register int compare = strcmp(name, iname);
+ if (compare == 0) {
+ return iter->types[i];
+ } else if (compare < 0) {
+ if (i) {
+ r = i - 1;
+ } else {
+ break;
+ }
+ } else if (compare > 0) {
+ l = i + 1;
+ }
+ } else {
+ break; /* should never happen */
+ }
+ } while (l <= r);
+ }
+ iter = iter->next;
+ } while (iter != end);
+ return 0;
+}
+
+/*
+ Search for a swig_type_info structure for either a mangled name or a human readable name.
+ It first searches the mangled names of the types, which is a O(log #types)
+ If a type is not found it then searches the human readable names, which is O(#types).
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ /* STEP 1: Search the name field using binary search */
+ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+ if (ret) {
+ return ret;
+ } else {
+ /* STEP 2: If the type hasn't been found, do a complete search
+ of the str field (the human readable name) */
+ swig_module_info *iter = start;
+ do {
+ register size_t i = 0;
+ for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+ return iter->types[i];
+ }
+ iter = iter->next;
+ } while (iter != end);
+ }
+
+ /* neither found a match */
+ return 0;
+}
+
+/*
+ Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+ static const char hex[17] = "0123456789abcdef";
+ register const unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register unsigned char uu = *u;
+ *(c++) = hex[(uu & 0xf0) >> 4];
+ *(c++) = hex[uu & 0xf];
+ }
+ return c;
+}
+
+/*
+ Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+ register unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register char d = *(c++);
+ register unsigned char uu;
+ if ((d >= '0') && (d <= '9'))
+ uu = ((d - '0') << 4);
+ else if ((d >= 'a') && (d <= 'f'))
+ uu = ((d - ('a'-10)) << 4);
+ else
+ return (char *) 0;
+ d = *(c++);
+ if ((d >= '0') && (d <= '9'))
+ uu |= (d - '0');
+ else if ((d >= 'a') && (d <= 'f'))
+ uu |= (d - ('a'-10));
+ else
+ return (char *) 0;
+ *u = uu;
+ }
+ return c;
+}
+
+/*
+ Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+ char *r = buff;
+ if ((2*sizeof(void *) + 2) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,&ptr,sizeof(void *));
+ if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+ strcpy(r,name);
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ *ptr = (void *) 0;
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+ char *r = buff;
+ size_t lname = (name ? strlen(name) : 0);
+ if ((2*sz + 2 + lname) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ if (lname) {
+ strncpy(r,name,lname+1);
+ } else {
+ *r = 0;
+ }
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ memset(ptr,0,sz);
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Errors in SWIG */
+#define SWIG_UnknownError -1
+#define SWIG_IOError -2
+#define SWIG_RuntimeError -3
+#define SWIG_IndexError -4
+#define SWIG_TypeError -5
+#define SWIG_DivisionByZero -6
+#define SWIG_OverflowError -7
+#define SWIG_SyntaxError -8
+#define SWIG_ValueError -9
+#define SWIG_SystemError -10
+#define SWIG_AttributeError -11
+#define SWIG_MemoryError -12
+#define SWIG_NullReferenceError -13
+
+
+
+
+/* Add PyOS_snprintf for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM)
+# define PyOS_snprintf _snprintf
+# else
+# define PyOS_snprintf snprintf
+# endif
+#endif
+
+/* A crude PyString_FromFormat implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+
+#ifndef SWIG_PYBUFFER_SIZE
+# define SWIG_PYBUFFER_SIZE 1024
+#endif
+
+static PyObject *
+PyString_FromFormat(const char *fmt, ...) {
+ va_list ap;
+ char buf[SWIG_PYBUFFER_SIZE * 2];
+ int res;
+ va_start(ap, fmt);
+ res = vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf);
+}
+#endif
+
+/* Add PyObject_Del for old Pythons */
+#if PY_VERSION_HEX < 0x01060000
+# define PyObject_Del(op) PyMem_DEL((op))
+#endif
+#ifndef PyObject_DEL
+# define PyObject_DEL PyObject_Del
+#endif
+
+/* A crude PyExc_StopIteration exception for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# ifndef PyExc_StopIteration
+# define PyExc_StopIteration PyExc_RuntimeError
+# endif
+# ifndef PyObject_GenericGetAttr
+# define PyObject_GenericGetAttr 0
+# endif
+#endif
+/* Py_NotImplemented is defined in 2.1 and up. */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef Py_NotImplemented
+# define Py_NotImplemented PyExc_RuntimeError
+# endif
+#endif
+
+
+/* A crude PyString_AsStringAndSize implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef PyString_AsStringAndSize
+# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;}
+# endif
+#endif
+
+/* PySequence_Size for old Pythons */
+#if PY_VERSION_HEX < 0x02000000
+# ifndef PySequence_Size
+# define PySequence_Size PySequence_Length
+# endif
+#endif
+
+
+/* PyBool_FromLong for old Pythons */
+#if PY_VERSION_HEX < 0x02030000
+static
+PyObject *PyBool_FromLong(long ok)
+{
+ PyObject *result = ok ? Py_True : Py_False;
+ Py_INCREF(result);
+ return result;
+}
+#endif
+
+/* Py_ssize_t for old Pythons */
+/* This code is as recommended by: */
+/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */
+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
+typedef int Py_ssize_t;
+# define PY_SSIZE_T_MAX INT_MAX
+# define PY_SSIZE_T_MIN INT_MIN
+#endif
+
+/* -----------------------------------------------------------------------------
+ * error manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIME PyObject*
+SWIG_Python_ErrorType(int code) {
+ PyObject* type = 0;
+ switch(code) {
+ case SWIG_MemoryError:
+ type = PyExc_MemoryError;
+ break;
+ case SWIG_IOError:
+ type = PyExc_IOError;
+ break;
+ case SWIG_RuntimeError:
+ type = PyExc_RuntimeError;
+ break;
+ case SWIG_IndexError:
+ type = PyExc_IndexError;
+ break;
+ case SWIG_TypeError:
+ type = PyExc_TypeError;
+ break;
+ case SWIG_DivisionByZero:
+ type = PyExc_ZeroDivisionError;
+ break;
+ case SWIG_OverflowError:
+ type = PyExc_OverflowError;
+ break;
+ case SWIG_SyntaxError:
+ type = PyExc_SyntaxError;
+ break;
+ case SWIG_ValueError:
+ type = PyExc_ValueError;
+ break;
+ case SWIG_SystemError:
+ type = PyExc_SystemError;
+ break;
+ case SWIG_AttributeError:
+ type = PyExc_AttributeError;
+ break;
+ default:
+ type = PyExc_RuntimeError;
+ }
+ return type;
+}
+
+
+SWIGRUNTIME void
+SWIG_Python_AddErrorMsg(const char* mesg)
+{
+ PyObject *type = 0;
+ PyObject *value = 0;
+ PyObject *traceback = 0;
+
+ if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
+ if (value) {
+ PyObject *old_str = PyObject_Str(value);
+ PyErr_Clear();
+ Py_XINCREF(type);
+ PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
+ Py_DECREF(old_str);
+ Py_DECREF(value);
+ } else {
+ PyErr_SetString(PyExc_RuntimeError, mesg);
+ }
+}
+
+
+
+#if defined(SWIG_PYTHON_NO_THREADS)
+# if defined(SWIG_PYTHON_THREADS)
+# undef SWIG_PYTHON_THREADS
+# endif
+#endif
+#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
+# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
+# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
+# define SWIG_PYTHON_USE_GIL
+# endif
+# endif
+# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
+# ifndef SWIG_PYTHON_INITIALIZE_THREADS
+# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads()
+# endif
+# ifdef __cplusplus /* C++ code */
+ class SWIG_Python_Thread_Block {
+ bool status;
+ PyGILState_STATE state;
+ public:
+ void end() { if (status) { PyGILState_Release(state); status = false;} }
+ SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
+ ~SWIG_Python_Thread_Block() { end(); }
+ };
+ class SWIG_Python_Thread_Allow {
+ bool status;
+ PyThreadState *save;
+ public:
+ void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
+ SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
+ ~SWIG_Python_Thread_Allow() { end(); }
+ };
+# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block
+# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end()
+# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow
+# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end()
+# else /* C code */
+# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
+# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block)
+# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread()
+# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow)
+# endif
+# else /* Old thread way, not implemented, user must provide it */
+# if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
+# define SWIG_PYTHON_INITIALIZE_THREADS
+# endif
+# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
+# define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+# endif
+# if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
+# define SWIG_PYTHON_THREAD_END_BLOCK
+# endif
+# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
+# define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+# endif
+# if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
+# define SWIG_PYTHON_THREAD_END_ALLOW
+# endif
+# endif
+#else /* No thread support */
+# define SWIG_PYTHON_INITIALIZE_THREADS
+# define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+# define SWIG_PYTHON_THREAD_END_BLOCK
+# define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+# define SWIG_PYTHON_THREAD_END_ALLOW
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Python API portion that goes into the runtime
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* cc-mode */
+#endif
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Constant declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Constant Types */
+#define SWIG_PY_POINTER 4
+#define SWIG_PY_BINARY 5
+
+/* Constant information structure */
+typedef struct swig_const_info {
+ int type;
+ char *name;
+ long lvalue;
+ double dvalue;
+ void *pvalue;
+ swig_type_info **ptype;
+} swig_const_info;
+
+#ifdef __cplusplus
+#if 0
+{ /* cc-mode */
+#endif
+}
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * pyrun.swg
+ *
+ * This file contains the runtime support for Python modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ *
+ * ----------------------------------------------------------------------------- */
+
+/* Common SWIG API */
+
+/* for raw pointers */
+#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
+#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own)
+#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags)
+#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty)
+#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src)
+#define swig_owntype int
+
+/* for raw packed data */
+#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type)
+
+/* for class or struct pointers */
+#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags)
+
+/* for C or C++ function pointers */
+#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type)
+#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0)
+
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type)
+
+
+/* Runtime API */
+
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
+#define SWIG_NewClientData(obj) PySwigClientData_New(obj)
+
+#define SWIG_SetErrorObj SWIG_Python_SetErrorObj
+#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg
+#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code)
+#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg)
+#define SWIG_fail goto fail
+
+
+/* Runtime API implementation */
+
+/* Error manipulation */
+
+SWIGINTERN void
+SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
+ SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+ PyErr_SetObject(errtype, obj);
+ Py_DECREF(obj);
+ SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+SWIGINTERN void
+SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
+ SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+ PyErr_SetString(errtype, (char *) msg);
+ SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj)
+
+/* Set a constant value */
+
+SWIGINTERN void
+SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+ PyDict_SetItemString(d, (char*) name, obj);
+ Py_DECREF(obj);
+}
+
+/* Append a value to the result obj */
+
+SWIGINTERN PyObject*
+SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) {
+#if !defined(SWIG_PYTHON_OUTPUT_TUPLE)
+ if (!result) {
+ result = obj;
+ } else if (result == Py_None) {
+ Py_DECREF(result);
+ result = obj;
+ } else {
+ if (!PyList_Check(result)) {
+ PyObject *o2 = result;
+ result = PyList_New(1);
+ PyList_SetItem(result, 0, o2);
+ }
+ PyList_Append(result,obj);
+ Py_DECREF(obj);
+ }
+ return result;
+#else
+ PyObject* o2;
+ PyObject* o3;
+ if (!result) {
+ result = obj;
+ } else if (result == Py_None) {
+ Py_DECREF(result);
+ result = obj;
+ } else {
+ if (!PyTuple_Check(result)) {
+ o2 = result;
+ result = PyTuple_New(1);
+ PyTuple_SET_ITEM(result, 0, o2);
+ }
+ o3 = PyTuple_New(1);
+ PyTuple_SET_ITEM(o3, 0, obj);
+ o2 = result;
+ result = PySequence_Concat(o2, o3);
+ Py_DECREF(o2);
+ Py_DECREF(o3);
+ }
+ return result;
+#endif
+}
+
+/* Unpack the argument tuple */
+
+SWIGINTERN int
+SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
+{
+ if (!args) {
+ if (!min && !max) {
+ return 1;
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none",
+ name, (min == max ? "" : "at least "), (int)min);
+ return 0;
+ }
+ }
+ if (!PyTuple_Check(args)) {
+ PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
+ return 0;
+ } else {
+ register Py_ssize_t l = PyTuple_GET_SIZE(args);
+ if (l < min) {
+ PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
+ name, (min == max ? "" : "at least "), (int)min, (int)l);
+ return 0;
+ } else if (l > max) {
+ PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
+ name, (min == max ? "" : "at most "), (int)max, (int)l);
+ return 0;
+ } else {
+ register int i;
+ for (i = 0; i < l; ++i) {
+ objs[i] = PyTuple_GET_ITEM(args, i);
+ }
+ for (; l < max; ++l) {
+ objs[l] = 0;
+ }
+ return i + 1;
+ }
+ }
+}
+
+/* A functor is a function object with one single object argument */
+#if PY_VERSION_HEX >= 0x02020000
+#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL);
+#else
+#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj);
+#endif
+
+/*
+ Helper for static pointer initialization for both C and C++ code, for example
+ static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...);
+*/
+#ifdef __cplusplus
+#define SWIG_STATIC_POINTER(var) var
+#else
+#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Pointer declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1)
+#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN)
+
+#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1)
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* cc-mode */
+#endif
+#endif
+
+/* How to access Py_None */
+#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# ifndef SWIG_PYTHON_NO_BUILD_NONE
+# ifndef SWIG_PYTHON_BUILD_NONE
+# define SWIG_PYTHON_BUILD_NONE
+# endif
+# endif
+#endif
+
+#ifdef SWIG_PYTHON_BUILD_NONE
+# ifdef Py_None
+# undef Py_None
+# define Py_None SWIG_Py_None()
+# endif
+SWIGRUNTIMEINLINE PyObject *
+_SWIG_Py_None(void)
+{
+ PyObject *none = Py_BuildValue((char*)"");
+ Py_DECREF(none);
+ return none;
+}
+SWIGRUNTIME PyObject *
+SWIG_Py_None(void)
+{
+ static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None();
+ return none;
+}
+#endif
+
+/* The python void return value */
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Py_Void(void)
+{
+ PyObject *none = Py_None;
+ Py_INCREF(none);
+ return none;
+}
+
+/* PySwigClientData */
+
+typedef struct {
+ PyObject *klass;
+ PyObject *newraw;
+ PyObject *newargs;
+ PyObject *destroy;
+ int delargs;
+ int implicitconv;
+} PySwigClientData;
+
+SWIGRUNTIMEINLINE int
+SWIG_Python_CheckImplicit(swig_type_info *ty)
+{
+ PySwigClientData *data = (PySwigClientData *)ty->clientdata;
+ return data ? data->implicitconv : 0;
+}
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_ExceptionType(swig_type_info *desc) {
+ PySwigClientData *data = desc ? (PySwigClientData *) desc->clientdata : 0;
+ PyObject *klass = data ? data->klass : 0;
+ return (klass ? klass : PyExc_RuntimeError);
+}
+
+
+SWIGRUNTIME PySwigClientData *
+PySwigClientData_New(PyObject* obj)
+{
+ if (!obj) {
+ return 0;
+ } else {
+ PySwigClientData *data = (PySwigClientData *)malloc(sizeof(PySwigClientData));
+ /* the klass element */
+ data->klass = obj;
+ Py_INCREF(data->klass);
+ /* the newraw method and newargs arguments used to create a new raw instance */
+ if (PyClass_Check(obj)) {
+ data->newraw = 0;
+ data->newargs = obj;
+ Py_INCREF(obj);
+ } else {
+#if (PY_VERSION_HEX < 0x02020000)
+ data->newraw = 0;
+#else
+ data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__");
+#endif
+ if (data->newraw) {
+ Py_INCREF(data->newraw);
+ data->newargs = PyTuple_New(1);
+ PyTuple_SetItem(data->newargs, 0, obj);
+ } else {
+ data->newargs = obj;
+ }
+ Py_INCREF(data->newargs);
+ }
+ /* the destroy method, aka as the C++ delete method */
+ data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__");
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
+ data->destroy = 0;
+ }
+ if (data->destroy) {
+ int flags;
+ Py_INCREF(data->destroy);
+ flags = PyCFunction_GET_FLAGS(data->destroy);
+#ifdef METH_O
+ data->delargs = !(flags & (METH_O));
+#else
+ data->delargs = 0;
+#endif
+ } else {
+ data->delargs = 0;
+ }
+ data->implicitconv = 0;
+ return data;
+ }
+}
+
+SWIGRUNTIME void
+PySwigClientData_Del(PySwigClientData* data)
+{
+ Py_XDECREF(data->newraw);
+ Py_XDECREF(data->newargs);
+ Py_XDECREF(data->destroy);
+}
+
+/* =============== PySwigObject =====================*/
+
+typedef struct {
+ PyObject_HEAD
+ void *ptr;
+ swig_type_info *ty;
+ int own;
+ PyObject *next;
+} PySwigObject;
+
+SWIGRUNTIME PyObject *
+PySwigObject_long(PySwigObject *v)
+{
+ return PyLong_FromVoidPtr(v->ptr);
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_format(const char* fmt, PySwigObject *v)
+{
+ PyObject *res = NULL;
+ PyObject *args = PyTuple_New(1);
+ if (args) {
+ if (PyTuple_SetItem(args, 0, PySwigObject_long(v)) == 0) {
+ PyObject *ofmt = PyString_FromString(fmt);
+ if (ofmt) {
+ res = PyString_Format(ofmt,args);
+ Py_DECREF(ofmt);
+ }
+ Py_DECREF(args);
+ }
+ }
+ return res;
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_oct(PySwigObject *v)
+{
+ return PySwigObject_format("%o",v);
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_hex(PySwigObject *v)
+{
+ return PySwigObject_format("%x",v);
+}
+
+SWIGRUNTIME PyObject *
+#ifdef METH_NOARGS
+PySwigObject_repr(PySwigObject *v)
+#else
+PySwigObject_repr(PySwigObject *v, PyObject *args)
+#endif
+{
+ const char *name = SWIG_TypePrettyName(v->ty);
+ PyObject *hex = PySwigObject_hex(v);
+ PyObject *repr = PyString_FromFormat("<Swig Object of type '%s' at 0x%s>", name, PyString_AsString(hex));
+ Py_DECREF(hex);
+ if (v->next) {
+#ifdef METH_NOARGS
+ PyObject *nrep = PySwigObject_repr((PySwigObject *)v->next);
+#else
+ PyObject *nrep = PySwigObject_repr((PySwigObject *)v->next, args);
+#endif
+ PyString_ConcatAndDel(&repr,nrep);
+ }
+ return repr;
+}
+
+SWIGRUNTIME int
+PySwigObject_print(PySwigObject *v, FILE *fp, int SWIGUNUSEDPARM(flags))
+{
+#ifdef METH_NOARGS
+ PyObject *repr = PySwigObject_repr(v);
+#else
+ PyObject *repr = PySwigObject_repr(v, NULL);
+#endif
+ if (repr) {
+ fputs(PyString_AsString(repr), fp);
+ Py_DECREF(repr);
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_str(PySwigObject *v)
+{
+ char result[SWIG_BUFFER_SIZE];
+ return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ?
+ PyString_FromString(result) : 0;
+}
+
+SWIGRUNTIME int
+PySwigObject_compare(PySwigObject *v, PySwigObject *w)
+{
+ void *i = v->ptr;
+ void *j = w->ptr;
+ return (i < j) ? -1 : ((i > j) ? 1 : 0);
+}
+
+SWIGRUNTIME PyTypeObject* _PySwigObject_type(void);
+
+SWIGRUNTIME PyTypeObject*
+PySwigObject_type(void) {
+ static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type();
+ return type;
+}
+
+SWIGRUNTIMEINLINE int
+PySwigObject_Check(PyObject *op) {
+ return ((op)->ob_type == PySwigObject_type())
+ || (strcmp((op)->ob_type->tp_name,"PySwigObject") == 0);
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_New(void *ptr, swig_type_info *ty, int own);
+
+SWIGRUNTIME void
+PySwigObject_dealloc(PyObject *v)
+{
+ PySwigObject *sobj = (PySwigObject *) v;
+ PyObject *next = sobj->next;
+ if (sobj->own == SWIG_POINTER_OWN) {
+ swig_type_info *ty = sobj->ty;
+ PySwigClientData *data = ty ? (PySwigClientData *) ty->clientdata : 0;
+ PyObject *destroy = data ? data->destroy : 0;
+ if (destroy) {
+ /* destroy is always a VARARGS method */
+ PyObject *res;
+ if (data->delargs) {
+ /* we need to create a temporal object to carry the destroy operation */
+ PyObject *tmp = PySwigObject_New(sobj->ptr, ty, 0);
+ res = SWIG_Python_CallFunctor(destroy, tmp);
+ Py_DECREF(tmp);
+ } else {
+ PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
+ PyObject *mself = PyCFunction_GET_SELF(destroy);
+ res = ((*meth)(mself, v));
+ }
+ Py_XDECREF(res);
+ }
+#if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
+ else {
+ const char *name = SWIG_TypePrettyName(ty);
+ printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown"));
+ }
+#endif
+ }
+ Py_XDECREF(next);
+ PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyObject*
+PySwigObject_append(PyObject* v, PyObject* next)
+{
+ PySwigObject *sobj = (PySwigObject *) v;
+#ifndef METH_O
+ PyObject *tmp = 0;
+ if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL;
+ next = tmp;
+#endif
+ if (!PySwigObject_Check(next)) {
+ return NULL;
+ }
+ sobj->next = next;
+ Py_INCREF(next);
+ return SWIG_Py_Void();
+}
+
+SWIGRUNTIME PyObject*
+#ifdef METH_NOARGS
+PySwigObject_next(PyObject* v)
+#else
+PySwigObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+ PySwigObject *sobj = (PySwigObject *) v;
+ if (sobj->next) {
+ Py_INCREF(sobj->next);
+ return sobj->next;
+ } else {
+ return SWIG_Py_Void();
+ }
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+PySwigObject_disown(PyObject *v)
+#else
+PySwigObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+ PySwigObject *sobj = (PySwigObject *)v;
+ sobj->own = 0;
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+PySwigObject_acquire(PyObject *v)
+#else
+PySwigObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+ PySwigObject *sobj = (PySwigObject *)v;
+ sobj->own = SWIG_POINTER_OWN;
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+PySwigObject_own(PyObject *v, PyObject *args)
+{
+ PyObject *val = 0;
+#if (PY_VERSION_HEX < 0x02020000)
+ if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
+#else
+ if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#endif
+ {
+ return NULL;
+ }
+ else
+ {
+ PySwigObject *sobj = (PySwigObject *)v;
+ PyObject *obj = PyBool_FromLong(sobj->own);
+ if (val) {
+#ifdef METH_NOARGS
+ if (PyObject_IsTrue(val)) {
+ PySwigObject_acquire(v);
+ } else {
+ PySwigObject_disown(v);
+ }
+#else
+ if (PyObject_IsTrue(val)) {
+ PySwigObject_acquire(v,args);
+ } else {
+ PySwigObject_disown(v,args);
+ }
+#endif
+ }
+ return obj;
+ }
+}
+
+#ifdef METH_O
+static PyMethodDef
+swigobject_methods[] = {
+ {(char *)"disown", (PyCFunction)PySwigObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"},
+ {(char *)"acquire", (PyCFunction)PySwigObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"},
+ {(char *)"own", (PyCFunction)PySwigObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
+ {(char *)"append", (PyCFunction)PySwigObject_append, METH_O, (char *)"appends another 'this' object"},
+ {(char *)"next", (PyCFunction)PySwigObject_next, METH_NOARGS, (char *)"returns the next 'this' object"},
+ {(char *)"__repr__",(PyCFunction)PySwigObject_repr, METH_NOARGS, (char *)"returns object representation"},
+ {0, 0, 0, 0}
+};
+#else
+static PyMethodDef
+swigobject_methods[] = {
+ {(char *)"disown", (PyCFunction)PySwigObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"},
+ {(char *)"acquire", (PyCFunction)PySwigObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"},
+ {(char *)"own", (PyCFunction)PySwigObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
+ {(char *)"append", (PyCFunction)PySwigObject_append, METH_VARARGS, (char *)"appends another 'this' object"},
+ {(char *)"next", (PyCFunction)PySwigObject_next, METH_VARARGS, (char *)"returns the next 'this' object"},
+ {(char *)"__repr__",(PyCFunction)PySwigObject_repr, METH_VARARGS, (char *)"returns object representation"},
+ {0, 0, 0, 0}
+};
+#endif
+
+#if PY_VERSION_HEX < 0x02020000
+SWIGINTERN PyObject *
+PySwigObject_getattr(PySwigObject *sobj,char *name)
+{
+ return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name);
+}
+#endif
+
+SWIGRUNTIME PyTypeObject*
+_PySwigObject_type(void) {
+ static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer";
+
+ static PyNumberMethods PySwigObject_as_number = {
+ (binaryfunc)0, /*nb_add*/
+ (binaryfunc)0, /*nb_subtract*/
+ (binaryfunc)0, /*nb_multiply*/
+ (binaryfunc)0, /*nb_divide*/
+ (binaryfunc)0, /*nb_remainder*/
+ (binaryfunc)0, /*nb_divmod*/
+ (ternaryfunc)0,/*nb_power*/
+ (unaryfunc)0, /*nb_negative*/
+ (unaryfunc)0, /*nb_positive*/
+ (unaryfunc)0, /*nb_absolute*/
+ (inquiry)0, /*nb_nonzero*/
+ 0, /*nb_invert*/
+ 0, /*nb_lshift*/
+ 0, /*nb_rshift*/
+ 0, /*nb_and*/
+ 0, /*nb_xor*/
+ 0, /*nb_or*/
+ (coercion)0, /*nb_coerce*/
+ (unaryfunc)PySwigObject_long, /*nb_int*/
+ (unaryfunc)PySwigObject_long, /*nb_long*/
+ (unaryfunc)0, /*nb_float*/
+ (unaryfunc)PySwigObject_oct, /*nb_oct*/
+ (unaryfunc)PySwigObject_hex, /*nb_hex*/
+#if PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */
+#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */
+#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */
+ 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */
+#endif
+ };
+
+ static PyTypeObject pyswigobject_type;
+ static int type_init = 0;
+ if (!type_init) {
+ const PyTypeObject tmp
+ = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ (char *)"PySwigObject", /* tp_name */
+ sizeof(PySwigObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)PySwigObject_dealloc, /* tp_dealloc */
+ (printfunc)PySwigObject_print, /* tp_print */
+#if PY_VERSION_HEX < 0x02020000
+ (getattrfunc)PySwigObject_getattr, /* tp_getattr */
+#else
+ (getattrfunc)0, /* tp_getattr */
+#endif
+ (setattrfunc)0, /* tp_setattr */
+ (cmpfunc)PySwigObject_compare, /* tp_compare */
+ (reprfunc)PySwigObject_repr, /* tp_repr */
+ &PySwigObject_as_number, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc)0, /* tp_hash */
+ (ternaryfunc)0, /* tp_call */
+ (reprfunc)PySwigObject_str, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ swigobject_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ swigobject_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+ 0, /* tp_bases */
+ 0, /* tp_mro */
+ 0, /* tp_cache */
+ 0, /* tp_subclasses */
+ 0, /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+ 0, /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+ 0,0,0,0 /* tp_alloc -> tp_next */
+#endif
+ };
+ pyswigobject_type = tmp;
+ pyswigobject_type.ob_type = &PyType_Type;
+ type_init = 1;
+ }
+ return &pyswigobject_type;
+}
+
+SWIGRUNTIME PyObject *
+PySwigObject_New(void *ptr, swig_type_info *ty, int own)
+{
+ PySwigObject *sobj = PyObject_NEW(PySwigObject, PySwigObject_type());
+ if (sobj) {
+ sobj->ptr = ptr;
+ sobj->ty = ty;
+ sobj->own = own;
+ sobj->next = 0;
+ }
+ return (PyObject *)sobj;
+}
+
+/* -----------------------------------------------------------------------------
+ * Implements a simple Swig Packed type, and use it instead of string
+ * ----------------------------------------------------------------------------- */
+
+typedef struct {
+ PyObject_HEAD
+ void *pack;
+ swig_type_info *ty;
+ size_t size;
+} PySwigPacked;
+
+SWIGRUNTIME int
+PySwigPacked_print(PySwigPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags))
+{
+ char result[SWIG_BUFFER_SIZE];
+ fputs("<Swig Packed ", fp);
+ if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+ fputs("at ", fp);
+ fputs(result, fp);
+ }
+ fputs(v->ty->name,fp);
+ fputs(">", fp);
+ return 0;
+}
+
+SWIGRUNTIME PyObject *
+PySwigPacked_repr(PySwigPacked *v)
+{
+ char result[SWIG_BUFFER_SIZE];
+ if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+ return PyString_FromFormat("<Swig Packed at %s%s>", result, v->ty->name);
+ } else {
+ return PyString_FromFormat("<Swig Packed %s>", v->ty->name);
+ }
+}
+
+SWIGRUNTIME PyObject *
+PySwigPacked_str(PySwigPacked *v)
+{
+ char result[SWIG_BUFFER_SIZE];
+ if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
+ return PyString_FromFormat("%s%s", result, v->ty->name);
+ } else {
+ return PyString_FromString(v->ty->name);
+ }
+}
+
+SWIGRUNTIME int
+PySwigPacked_compare(PySwigPacked *v, PySwigPacked *w)
+{
+ size_t i = v->size;
+ size_t j = w->size;
+ int s = (i < j) ? -1 : ((i > j) ? 1 : 0);
+ return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size);
+}
+
+SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void);
+
+SWIGRUNTIME PyTypeObject*
+PySwigPacked_type(void) {
+ static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type();
+ return type;
+}
+
+SWIGRUNTIMEINLINE int
+PySwigPacked_Check(PyObject *op) {
+ return ((op)->ob_type == _PySwigPacked_type())
+ || (strcmp((op)->ob_type->tp_name,"PySwigPacked") == 0);
+}
+
+SWIGRUNTIME void
+PySwigPacked_dealloc(PyObject *v)
+{
+ if (PySwigPacked_Check(v)) {
+ PySwigPacked *sobj = (PySwigPacked *) v;
+ free(sobj->pack);
+ }
+ PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyTypeObject*
+_PySwigPacked_type(void) {
+ static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer";
+ static PyTypeObject pyswigpacked_type;
+ static int type_init = 0;
+ if (!type_init) {
+ const PyTypeObject tmp
+ = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ (char *)"PySwigPacked", /* tp_name */
+ sizeof(PySwigPacked), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)PySwigPacked_dealloc, /* tp_dealloc */
+ (printfunc)PySwigPacked_print, /* tp_print */
+ (getattrfunc)0, /* tp_getattr */
+ (setattrfunc)0, /* tp_setattr */
+ (cmpfunc)PySwigPacked_compare, /* tp_compare */
+ (reprfunc)PySwigPacked_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc)0, /* tp_hash */
+ (ternaryfunc)0, /* tp_call */
+ (reprfunc)PySwigPacked_str, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ swigpacked_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+ 0, /* tp_bases */
+ 0, /* tp_mro */
+ 0, /* tp_cache */
+ 0, /* tp_subclasses */
+ 0, /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+ 0, /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+ 0,0,0,0 /* tp_alloc -> tp_next */
+#endif
+ };
+ pyswigpacked_type = tmp;
+ pyswigpacked_type.ob_type = &PyType_Type;
+ type_init = 1;
+ }
+ return &pyswigpacked_type;
+}
+
+SWIGRUNTIME PyObject *
+PySwigPacked_New(void *ptr, size_t size, swig_type_info *ty)
+{
+ PySwigPacked *sobj = PyObject_NEW(PySwigPacked, PySwigPacked_type());
+ if (sobj) {
+ void *pack = malloc(size);
+ if (pack) {
+ memcpy(pack, ptr, size);
+ sobj->pack = pack;
+ sobj->ty = ty;
+ sobj->size = size;
+ } else {
+ PyObject_DEL((PyObject *) sobj);
+ sobj = 0;
+ }
+ }
+ return (PyObject *) sobj;
+}
+
+SWIGRUNTIME swig_type_info *
+PySwigPacked_UnpackData(PyObject *obj, void *ptr, size_t size)
+{
+ if (PySwigPacked_Check(obj)) {
+ PySwigPacked *sobj = (PySwigPacked *)obj;
+ if (sobj->size != size) return 0;
+ memcpy(ptr, sobj->pack, size);
+ return sobj->ty;
+ } else {
+ return 0;
+ }
+}
+
+/* -----------------------------------------------------------------------------
+ * pointers/data manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIMEINLINE PyObject *
+_SWIG_This(void)
+{
+ return PyString_FromString("this");
+}
+
+SWIGRUNTIME PyObject *
+SWIG_This(void)
+{
+ static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This();
+ return swig_this;
+}
+
+/* #define SWIG_PYTHON_SLOW_GETSET_THIS */
+
+SWIGRUNTIME PySwigObject *
+SWIG_Python_GetSwigThis(PyObject *pyobj)
+{
+ if (PySwigObject_Check(pyobj)) {
+ return (PySwigObject *) pyobj;
+ } else {
+ PyObject *obj = 0;
+#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000))
+ if (PyInstance_Check(pyobj)) {
+ obj = _PyInstance_Lookup(pyobj, SWIG_This());
+ } else {
+ PyObject **dictptr = _PyObject_GetDictPtr(pyobj);
+ if (dictptr != NULL) {
+ PyObject *dict = *dictptr;
+ obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0;
+ } else {
+#ifdef PyWeakref_CheckProxy
+ if (PyWeakref_CheckProxy(pyobj)) {
+ PyObject *wobj = PyWeakref_GET_OBJECT(pyobj);
+ return wobj ? SWIG_Python_GetSwigThis(wobj) : 0;
+ }
+#endif
+ obj = PyObject_GetAttr(pyobj,SWIG_This());
+ if (obj) {
+ Py_DECREF(obj);
+ } else {
+ if (PyErr_Occurred()) PyErr_Clear();
+ return 0;
+ }
+ }
+ }
+#else
+ obj = PyObject_GetAttr(pyobj,SWIG_This());
+ if (obj) {
+ Py_DECREF(obj);
+ } else {
+ if (PyErr_Occurred()) PyErr_Clear();
+ return 0;
+ }
+#endif
+ if (obj && !PySwigObject_Check(obj)) {
+ /* a PyObject is called 'this', try to get the 'real this'
+ PySwigObject from it */
+ return SWIG_Python_GetSwigThis(obj);
+ }
+ return (PySwigObject *)obj;
+ }
+}
+
+/* Acquire a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_AcquirePtr(PyObject *obj, int own) {
+ if (own == SWIG_POINTER_OWN) {
+ PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
+ if (sobj) {
+ int oldown = sobj->own;
+ sobj->own = own;
+ return oldown;
+ }
+ }
+ return 0;
+}
+
+/* Convert a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) {
+ if (!obj) return SWIG_ERROR;
+ if (obj == Py_None) {
+ if (ptr) *ptr = 0;
+ return SWIG_OK;
+ } else {
+ PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
+ if (own)
+ *own = 0;
+ while (sobj) {
+ void *vptr = sobj->ptr;
+ if (ty) {
+ swig_type_info *to = sobj->ty;
+ if (to == ty) {
+ /* no type cast needed */
+ if (ptr) *ptr = vptr;
+ break;
+ } else {
+ swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+ if (!tc) {
+ sobj = (PySwigObject *)sobj->next;
+ } else {
+ if (ptr) {
+ int newmemory = 0;
+ *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+ if (newmemory == SWIG_CAST_NEW_MEMORY) {
+ assert(own);
+ if (own)
+ *own = *own | SWIG_CAST_NEW_MEMORY;
+ }
+ }
+ break;
+ }
+ }
+ } else {
+ if (ptr) *ptr = vptr;
+ break;
+ }
+ }
+ if (sobj) {
+ if (own)
+ *own = *own | sobj->own;
+ if (flags & SWIG_POINTER_DISOWN) {
+ sobj->own = 0;
+ }
+ return SWIG_OK;
+ } else {
+ int res = SWIG_ERROR;
+ if (flags & SWIG_POINTER_IMPLICIT_CONV) {
+ PySwigClientData *data = ty ? (PySwigClientData *) ty->clientdata : 0;
+ if (data && !data->implicitconv) {
+ PyObject *klass = data->klass;
+ if (klass) {
+ PyObject *impconv;
+ data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/
+ impconv = SWIG_Python_CallFunctor(klass, obj);
+ data->implicitconv = 0;
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
+ impconv = 0;
+ }
+ if (impconv) {
+ PySwigObject *iobj = SWIG_Python_GetSwigThis(impconv);
+ if (iobj) {
+ void *vptr;
+ res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0);
+ if (SWIG_IsOK(res)) {
+ if (ptr) {
+ *ptr = vptr;
+ /* transfer the ownership to 'ptr' */
+ iobj->own = 0;
+ res = SWIG_AddCast(res);
+ res = SWIG_AddNewMask(res);
+ } else {
+ res = SWIG_AddCast(res);
+ }
+ }
+ }
+ Py_DECREF(impconv);
+ }
+ }
+ }
+ }
+ return res;
+ }
+ }
+}
+
+/* Convert a function ptr value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
+ if (!PyCFunction_Check(obj)) {
+ return SWIG_ConvertPtr(obj, ptr, ty, 0);
+ } else {
+ void *vptr = 0;
+
+ /* here we get the method pointer for callbacks */
+ const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
+ const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
+ if (desc) {
+ desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
+ if (!desc) return SWIG_ERROR;
+ }
+ if (ty) {
+ swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
+ if (tc) {
+ int newmemory = 0;
+ *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
+ } else {
+ return SWIG_ERROR;
+ }
+ } else {
+ *ptr = vptr;
+ }
+ return SWIG_OK;
+ }
+}
+
+/* Convert a packed value value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) {
+ swig_type_info *to = PySwigPacked_UnpackData(obj, ptr, sz);
+ if (!to) return SWIG_ERROR;
+ if (ty) {
+ if (to != ty) {
+ /* check type cast? */
+ swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+ if (!tc) return SWIG_ERROR;
+ }
+ }
+ return SWIG_OK;
+}
+
+/* -----------------------------------------------------------------------------
+ * Create a new pointer object
+ * ----------------------------------------------------------------------------- */
+
+/*
+ Create a new instance object, whitout calling __init__, and set the
+ 'this' attribute.
+*/
+
+SWIGRUNTIME PyObject*
+SWIG_Python_NewShadowInstance(PySwigClientData *data, PyObject *swig_this)
+{
+#if (PY_VERSION_HEX >= 0x02020000)
+ PyObject *inst = 0;
+ PyObject *newraw = data->newraw;
+ if (newraw) {
+ inst = PyObject_Call(newraw, data->newargs, NULL);
+ if (inst) {
+#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+ PyObject **dictptr = _PyObject_GetDictPtr(inst);
+ if (dictptr != NULL) {
+ PyObject *dict = *dictptr;
+ if (dict == NULL) {
+ dict = PyDict_New();
+ *dictptr = dict;
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ }
+ }
+#else
+ PyObject *key = SWIG_This();
+ PyObject_SetAttr(inst, key, swig_this);
+#endif
+ }
+ } else {
+ PyObject *dict = PyDict_New();
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
+ return inst;
+#else
+#if (PY_VERSION_HEX >= 0x02010000)
+ PyObject *inst;
+ PyObject *dict = PyDict_New();
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ return (PyObject *) inst;
+#else
+ PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+ if (inst == NULL) {
+ return NULL;
+ }
+ inst->in_class = (PyClassObject *)data->newargs;
+ Py_INCREF(inst->in_class);
+ inst->in_dict = PyDict_New();
+ if (inst->in_dict == NULL) {
+ Py_DECREF(inst);
+ return NULL;
+ }
+#ifdef Py_TPFLAGS_HAVE_WEAKREFS
+ inst->in_weakreflist = NULL;
+#endif
+#ifdef Py_TPFLAGS_GC
+ PyObject_GC_Init(inst);
+#endif
+ PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this);
+ return (PyObject *) inst;
+#endif
+#endif
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
+{
+ PyObject *dict;
+#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+ PyObject **dictptr = _PyObject_GetDictPtr(inst);
+ if (dictptr != NULL) {
+ dict = *dictptr;
+ if (dict == NULL) {
+ dict = PyDict_New();
+ *dictptr = dict;
+ }
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ return;
+ }
+#endif
+ dict = PyObject_GetAttrString(inst, (char*)"__dict__");
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ Py_DECREF(dict);
+}
+
+
+SWIGINTERN PyObject *
+SWIG_Python_InitShadowInstance(PyObject *args) {
+ PyObject *obj[2];
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ return NULL;
+ } else {
+ PySwigObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
+ if (sthis) {
+ PySwigObject_append((PyObject*) sthis, obj[1]);
+ } else {
+ SWIG_Python_SetSwigThis(obj[0], obj[1]);
+ }
+ return SWIG_Py_Void();
+ }
+}
+
+/* Create a new pointer object */
+
+SWIGRUNTIME PyObject *
+SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
+ if (!ptr) {
+ return SWIG_Py_Void();
+ } else {
+ int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0;
+ PyObject *robj = PySwigObject_New(ptr, type, own);
+ PySwigClientData *clientdata = type ? (PySwigClientData *)(type->clientdata) : 0;
+ if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
+ if (inst) {
+ Py_DECREF(robj);
+ robj = inst;
+ }
+ }
+ return robj;
+ }
+}
+
+/* Create a new packed object */
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
+ return ptr ? PySwigPacked_New((void *) ptr, sz, type) : SWIG_Py_Void();
+}
+
+/* -----------------------------------------------------------------------------*
+ * Get type list
+ * -----------------------------------------------------------------------------*/
+
+#ifdef SWIG_LINK_RUNTIME
+void *SWIG_ReturnGlobalTypeList(void *);
+#endif
+
+SWIGRUNTIME swig_module_info *
+SWIG_Python_GetModule(void) {
+ static void *type_pointer = (void *)0;
+ /* first check if module already created */
+ if (!type_pointer) {
+#ifdef SWIG_LINK_RUNTIME
+ type_pointer = SWIG_ReturnGlobalTypeList((void *)0);
+#else
+ type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+ (char*)"type_pointer" SWIG_TYPE_TABLE_NAME);
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
+ type_pointer = (void *)0;
+ }
+#endif
+ }
+ return (swig_module_info *) type_pointer;
+}
+
+#if PY_MAJOR_VERSION < 2
+/* PyModule_AddObject function was introduced in Python 2.0. The following function
+ is copied out of Python/modsupport.c in python version 2.3.4 */
+SWIGINTERN int
+PyModule_AddObject(PyObject *m, char *name, PyObject *o)
+{
+ PyObject *dict;
+ if (!PyModule_Check(m)) {
+ PyErr_SetString(PyExc_TypeError,
+ "PyModule_AddObject() needs module as first arg");
+ return SWIG_ERROR;
+ }
+ if (!o) {
+ PyErr_SetString(PyExc_TypeError,
+ "PyModule_AddObject() needs non-NULL value");
+ return SWIG_ERROR;
+ }
+
+ dict = PyModule_GetDict(m);
+ if (dict == NULL) {
+ /* Internal error -- modules must have a dict! */
+ PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
+ PyModule_GetName(m));
+ return SWIG_ERROR;
+ }
+ if (PyDict_SetItemString(dict, name, o))
+ return SWIG_ERROR;
+ Py_DECREF(o);
+ return SWIG_OK;
+}
+#endif
+
+SWIGRUNTIME void
+SWIG_Python_DestroyModule(void *vptr)
+{
+ swig_module_info *swig_module = (swig_module_info *) vptr;
+ swig_type_info **types = swig_module->types;
+ size_t i;
+ for (i =0; i < swig_module->size; ++i) {
+ swig_type_info *ty = types[i];
+ if (ty->owndata) {
+ PySwigClientData *data = (PySwigClientData *) ty->clientdata;
+ if (data) PySwigClientData_Del(data);
+ }
+ }
+ Py_DECREF(SWIG_This());
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetModule(swig_module_info *swig_module) {
+ static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */
+
+ PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+ swig_empty_runtime_method_table);
+ PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
+ if (pointer && module) {
+ PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer);
+ } else {
+ Py_XDECREF(pointer);
+ }
+}
+
+/* The python cached type query */
+SWIGRUNTIME PyObject *
+SWIG_Python_TypeCache(void) {
+ static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New();
+ return cache;
+}
+
+SWIGRUNTIME swig_type_info *
+SWIG_Python_TypeQuery(const char *type)
+{
+ PyObject *cache = SWIG_Python_TypeCache();
+ PyObject *key = PyString_FromString(type);
+ PyObject *obj = PyDict_GetItem(cache, key);
+ swig_type_info *descriptor;
+ if (obj) {
+ descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
+ } else {
+ swig_module_info *swig_module = SWIG_Python_GetModule();
+ descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
+ if (descriptor) {
+ obj = PyCObject_FromVoidPtr(descriptor, NULL);
+ PyDict_SetItem(cache, key, obj);
+ Py_DECREF(obj);
+ }
+ }
+ Py_DECREF(key);
+ return descriptor;
+}
+
+/*
+ For backward compatibility only
+*/
+#define SWIG_POINTER_EXCEPTION 0
+#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg)
+#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags)
+
+SWIGRUNTIME int
+SWIG_Python_AddErrMesg(const char* mesg, int infront)
+{
+ if (PyErr_Occurred()) {
+ PyObject *type = 0;
+ PyObject *value = 0;
+ PyObject *traceback = 0;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (value) {
+ PyObject *old_str = PyObject_Str(value);
+ Py_XINCREF(type);
+ PyErr_Clear();
+ if (infront) {
+ PyErr_Format(type, "%s %s", mesg, PyString_AsString(old_str));
+ } else {
+ PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
+ }
+ Py_DECREF(old_str);
+ }
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+SWIGRUNTIME int
+SWIG_Python_ArgFail(int argnum)
+{
+ if (PyErr_Occurred()) {
+ /* add information about failing argument */
+ char mesg[256];
+ PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum);
+ return SWIG_Python_AddErrMesg(mesg, 1);
+ } else {
+ return 0;
+ }
+}
+
+SWIGRUNTIMEINLINE const char *
+PySwigObject_GetDesc(PyObject *self)
+{
+ PySwigObject *v = (PySwigObject *)self;
+ swig_type_info *ty = v ? v->ty : 0;
+ return ty ? ty->str : (char*)"";
+}
+
+SWIGRUNTIME void
+SWIG_Python_TypeError(const char *type, PyObject *obj)
+{
+ if (type) {
+#if defined(SWIG_COBJECT_TYPES)
+ if (obj && PySwigObject_Check(obj)) {
+ const char *otype = (const char *) PySwigObject_GetDesc(obj);
+ if (otype) {
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'PySwigObject(%s)' is received",
+ type, otype);
+ return;
+ }
+ } else
+#endif
+ {
+ const char *otype = (obj ? obj->ob_type->tp_name : 0);
+ if (otype) {
+ PyObject *str = PyObject_Str(obj);
+ const char *cstr = str ? PyString_AsString(str) : 0;
+ if (cstr) {
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+ type, otype, cstr);
+ } else {
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
+ type, otype);
+ }
+ Py_XDECREF(str);
+ return;
+ }
+ }
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
+ } else {
+ PyErr_Format(PyExc_TypeError, "unexpected type is received");
+ }
+}
+
+
+/* Convert a pointer value, signal an exception on a type mismatch */
+SWIGRUNTIME void *
+SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) {
+ void *result;
+ if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) {
+ PyErr_Clear();
+ if (flags & SWIG_POINTER_EXCEPTION) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj);
+ SWIG_Python_ArgFail(argnum);
+ }
+ }
+ return result;
+}
+
+
+#ifdef __cplusplus
+#if 0
+{ /* cc-mode */
+#endif
+}
+#endif
+
+
+
+#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
+
+#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_ESLconnection swig_types[0]
+#define SWIGTYPE_p_ESLevent swig_types[1]
+#define SWIGTYPE_p_char swig_types[2]
+#define SWIGTYPE_p_esl_event_t swig_types[3]
+#define SWIGTYPE_p_esl_priority_t swig_types[4]
+static swig_type_info *swig_types[6];
+static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#if (PY_VERSION_HEX <= 0x02000000)
+# if !defined(SWIG_PYTHON_CLASSIC)
+# error "This python version requires swig to be run with the '-classic' option"
+# endif
+#endif
+
+/*-----------------------------------------------
+ @(target):= _ESL.so
+ ------------------------------------------------*/
+#define SWIG_init init_ESL
+
+#define SWIG_name "_ESL"
+
+#define SWIGVERSION 0x010335
+#define SWIG_VERSION SWIGVERSION
+
+
+#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a))
+#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a))
+
+
+#include <stdexcept>
+
+
+namespace swig {
+ class PyObject_ptr {
+ protected:
+ PyObject *_obj;
+
+ public:
+ PyObject_ptr() :_obj(0)
+ {
+ }
+
+ PyObject_ptr(const PyObject_ptr& item) : _obj(item._obj)
+ {
+ Py_XINCREF(_obj);
+ }
+
+ PyObject_ptr(PyObject *obj, bool initial_ref = true) :_obj(obj)
+ {
+ if (initial_ref) {
+ Py_XINCREF(_obj);
+ }
+ }
+
+ PyObject_ptr & operator=(const PyObject_ptr& item)
+ {
+ Py_XINCREF(item._obj);
+ Py_XDECREF(_obj);
+ _obj = item._obj;
+ return *this;
+ }
+
+ ~PyObject_ptr()
+ {
+ Py_XDECREF(_obj);
+ }
+
+ operator PyObject *() const
+ {
+ return _obj;
+ }
+
+ PyObject *operator->() const
+ {
+ return _obj;
+ }
+ };
+}
+
+
+namespace swig {
+ struct PyObject_var : PyObject_ptr {
+ PyObject_var(PyObject* obj = 0) : PyObject_ptr(obj, false) { }
+
+ PyObject_var & operator = (PyObject* obj)
+ {
+ Py_XDECREF(_obj);
+ _obj = obj;
+ return *this;
+ }
+ };
+}
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+ static int init = 0;
+ static swig_type_info* info = 0;
+ if (!init) {
+ info = SWIG_TypeQuery("_p_char");
+ init = 1;
+ }
+ return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+ if (PyString_Check(obj)) {
+ char *cstr; Py_ssize_t len;
+ PyString_AsStringAndSize(obj, &cstr, &len);
+ if (cptr) {
+ if (alloc) {
+ /*
+ In python the user should not be able to modify the inner
+ string representation. To warranty that, if you define
+ SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
+ buffer is always returned.
+
+ The default behavior is just to return the pointer value,
+ so, be careful.
+ */
+#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
+ if (*alloc != SWIG_OLDOBJ)
+#else
+ if (*alloc == SWIG_NEWOBJ)
+#endif
+ {
+ *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+ *alloc = SWIG_NEWOBJ;
+ }
+ else {
+ *cptr = cstr;
+ *alloc = SWIG_OLDOBJ;
+ }
+ } else {
+ *cptr = PyString_AsString(obj);
+ }
+ }
+ if (psize) *psize = len + 1;
+ return SWIG_OK;
+ } else {
+ swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+ if (pchar_descriptor) {
+ void* vptr = 0;
+ if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+ if (cptr) *cptr = (char *) vptr;
+ if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+ if (alloc) *alloc = SWIG_OLDOBJ;
+ return SWIG_OK;
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+ if (carray) {
+ if (size > INT_MAX) {
+ swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+ return pchar_descriptor ?
+ SWIG_NewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+ } else {
+ return PyString_FromStringAndSize(carray, static_cast< int >(size));
+ }
+ } else {
+ return SWIG_Py_Void();
+ }
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtr(const char *cptr)
+{
+ return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+
+
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+# define LLONG_MAX __LONG_LONG_MAX__
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_double (PyObject *obj, double *val)
+{
+ int res = SWIG_TypeError;
+ if (PyFloat_Check(obj)) {
+ if (val) *val = PyFloat_AsDouble(obj);
+ return SWIG_OK;
+ } else if (PyInt_Check(obj)) {
+ if (val) *val = PyInt_AsLong(obj);
+ return SWIG_OK;
+ } else if (PyLong_Check(obj)) {
+ double v = PyLong_AsDouble(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
+ }
+ }
+#ifdef SWIG_PYTHON_CAST_MODE
+ {
+ int dispatch = 0;
+ double d = PyFloat_AsDouble(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = d;
+ return SWIG_AddCast(SWIG_OK);
+ } else {
+ PyErr_Clear();
+ }
+ if (!dispatch) {
+ long v = PyLong_AsLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_AddCast(SWIG_AddCast(SWIG_OK));
+ } else {
+ PyErr_Clear();
+ }
+ }
+ }
+#endif
+ return res;
+}
+
+
+#include <float.h>
+
+
+#include <math.h>
+
+
+SWIGINTERNINLINE int
+SWIG_CanCastAsInteger(double *d, double min, double max) {
+ double x = *d;
+ if ((min <= x && x <= max)) {
+ double fx = floor(x);
+ double cx = ceil(x);
+ double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */
+ if ((errno == EDOM) || (errno == ERANGE)) {
+ errno = 0;
+ } else {
+ double summ, reps, diff;
+ if (rd < x) {
+ diff = x - rd;
+ } else if (rd > x) {
+ diff = rd - x;
+ } else {
+ return 1;
+ }
+ summ = rd + x;
+ reps = diff/summ;
+ if (reps < 8*DBL_EPSILON) {
+ *d = rd;
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_long (PyObject *obj, long* val)
+{
+ if (PyInt_Check(obj)) {
+ if (val) *val = PyInt_AsLong(obj);
+ return SWIG_OK;
+ } else if (PyLong_Check(obj)) {
+ long v = PyLong_AsLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
+ }
+ }
+#ifdef SWIG_PYTHON_CAST_MODE
+ {
+ int dispatch = 0;
+ long v = PyInt_AsLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_AddCast(SWIG_OK);
+ } else {
+ PyErr_Clear();
+ }
+ if (!dispatch) {
+ double d;
+ int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d));
+ if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) {
+ if (val) *val = (long)(d);
+ return res;
+ }
+ }
+ }
+#endif
+ return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_int (PyObject * obj, int *val)
+{
+ long v;
+ int res = SWIG_AsVal_long (obj, &v);
+ if (SWIG_IsOK(res)) {
+ if ((v < INT_MIN || v > INT_MAX)) {
+ return SWIG_OverflowError;
+ } else {
+ if (val) *val = static_cast< int >(v);
+ }
+ }
+ return res;
+}
+
+
+ #define SWIG_From_long PyInt_FromLong
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_int (int value)
+{
+ return SWIG_From_long (value);
+}
+
+
+SWIGINTERNINLINE PyObject*
+ SWIG_From_bool (bool value)
+{
+ return PyBool_FromLong(value ? 1 : 0);
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+SWIGINTERN PyObject *_wrap_ESLevent_event_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_event_set",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_event_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_esl_event_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_event_set" "', argument " "2"" of type '" "esl_event_t *""'");
+ }
+ arg2 = reinterpret_cast< esl_event_t * >(argp2);
+ if (arg1) (arg1)->event = arg2;
+
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_event_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_event_get",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_event_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (esl_event_t *) ((arg1)->event);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_esl_event_t, 0 | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_serialized_string_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_serialized_string_set",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialized_string_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_serialized_string_set" "', argument " "2"" of type '" "char *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (arg1->serialized_string) delete[] arg1->serialized_string;
+ if (arg2) {
+ size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1;
+ arg1->serialized_string = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size)));
+ } else {
+ arg1->serialized_string = 0;
+ }
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_serialized_string_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_serialized_string_get",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialized_string_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *) ((arg1)->serialized_string);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_mine_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_mine_set",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_mine_set" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ ecode2 = SWIG_AsVal_int(obj1, &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ESLevent_mine_set" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ if (arg1) (arg1)->mine = arg2;
+
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_mine_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_mine_get",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_mine_get" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (int) ((arg1)->mine);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLevent__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O|O:new_ESLevent",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ if (obj1) {
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_ESLevent" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_NEW | 0 );
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLevent__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O|O:new_ESLevent",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_esl_event_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "esl_event_t *""'");
+ }
+ arg1 = reinterpret_cast< esl_event_t * >(argp1);
+ if (obj1) {
+ ecode2 = SWIG_AsVal_int(obj1, &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_ESLevent" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ }
+ result = (ESLevent *)new ESLevent(arg1,arg2);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_NEW | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLevent__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:new_ESLevent",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLevent" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (ESLevent *)new ESLevent(arg1);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_NEW | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLevent(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[3];
+ int ii;
+
+ if (!PyTuple_Check(args)) SWIG_fail;
+ argc = (int)PyObject_Length(args);
+ for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+ argv[ii] = PyTuple_GET_ITEM(args,ii);
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_esl_event_t, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_1(self, args);
+ }
+ {
+ int res = SWIG_AsVal_int(argv[1], NULL);
+ _v = SWIG_CheckState(res);
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_1(self, args);
+ }
+ }
+ }
+ if (argc == 1) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_ESLevent, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_2(self, args);
+ }
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_0(self, args);
+ }
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_0(self, args);
+ }
+ }
+ }
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ESLevent'.\n"
+ " Possible C/C++ prototypes are:\n"
+ " ESLevent(char const *,char const *)\n"
+ " ESLevent(esl_event_t *,int)\n"
+ " ESLevent(ESLevent *)\n");
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_ESLevent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_ESLevent",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ESLevent" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ delete arg1;
+
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O|O:ESLevent_serialize",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_serialize" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (obj1) {
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_serialize" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_setPriority(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 ;
+ int res2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O|O:ESLevent_setPriority",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_setPriority" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (obj1) {
+ {
+ res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_esl_priority_t, 0 | 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_setPriority" "', argument " "2"" of type '" "esl_priority_t""'");
+ }
+ if (!argp2) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ESLevent_setPriority" "', argument " "2"" of type '" "esl_priority_t""'");
+ } else {
+ esl_priority_t * temp = reinterpret_cast< esl_priority_t * >(argp2);
+ arg2 = *temp;
+ if (SWIG_IsNewObj(res2)) delete temp;
+ }
+ }
+ }
+ result = (bool)(arg1)->setPriority(arg2);
+ resultobj = SWIG_From_bool(static_cast< bool >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_getHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_getHeader",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_getHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_getBody(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_getBody",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getBody" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getBody();
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_getType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_getType",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getType" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getType();
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_addBody(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_addBody",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_addBody" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_addBody" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ resultobj = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_addHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:ESLevent_addHeader",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_addHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_addHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_addHeader" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_delHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_delHeader",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_delHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_delHeader" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ resultobj = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_firstHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_firstHeader",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_firstHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->firstHeader();
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLevent_nextHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLevent_nextHeader",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_nextHeader" "', argument " "1"" of type '" "ESLevent *""'");
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->nextHeader();
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *ESLevent_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_ESLevent, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_ESLconnection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:new_ESLconnection",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_ESLconnection" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_ESLconnection" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_ESLconnection" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLconnection, SWIG_POINTER_NEW | 0 );
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLconnection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ int arg1 ;
+ ESLconnection *result = 0 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:new_ESLconnection",&obj0)) SWIG_fail;
+ ecode1 = SWIG_AsVal_int(obj0, &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_ESLconnection" "', argument " "1"" of type '" "int""'");
+ }
+ arg1 = static_cast< int >(val1);
+ result = (ESLconnection *)new ESLconnection(arg1);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLconnection, SWIG_POINTER_NEW | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_ESLconnection(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[4];
+ int ii;
+
+ if (!PyTuple_Check(args)) SWIG_fail;
+ argc = (int)PyObject_Length(args);
+ for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+ argv[ii] = PyTuple_GET_ITEM(args,ii);
+ }
+ if (argc == 1) {
+ int _v;
+ {
+ int res = SWIG_AsVal_int(argv[0], NULL);
+ _v = SWIG_CheckState(res);
+ }
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_1(self, args);
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_0(self, args);
+ }
+ }
+ }
+ }
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ESLconnection'.\n"
+ " Possible C/C++ prototypes are:\n"
+ " ESLconnection(char const *,char const *,char const *)\n"
+ " ESLconnection(int)\n");
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_ESLconnection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_ESLconnection",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ESLconnection" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ delete arg1;
+
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_socketDescriptor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLconnection_socketDescriptor",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_socketDescriptor" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->socketDescriptor();
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_connected(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLconnection_connected",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_connected" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->connected();
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_getInfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLconnection_getInfo",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_getInfo" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->getInfo();
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_send(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_send",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_send" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_send" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->send((char const *)arg2);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_sendRecv(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_sendRecv",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_sendRecv" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_sendRecv" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_api(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:ESLconnection_api",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_api" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_api" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (obj2) {
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_api" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_bgapi(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:ESLconnection_bgapi",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_bgapi" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_bgapi" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (obj2) {
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_bgapi" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_sendEvent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_sendEvent",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_sendEvent" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_sendEvent" "', argument " "2"" of type '" "ESLevent *""'");
+ }
+ arg2 = reinterpret_cast< ESLevent * >(argp2);
+ result = (int)(arg1)->sendEvent(arg2);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_recvEvent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLconnection_recvEvent",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_recvEvent" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->recvEvent();
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_recvEventTimed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_recvEventTimed",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_recvEventTimed" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ ecode2 = SWIG_AsVal_int(obj1, &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ESLconnection_recvEventTimed" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = static_cast< int >(val2);
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_filter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:ESLconnection_filter",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_filter" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_filter" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_filter" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_events(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:ESLconnection_events",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_events" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_events" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_events" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:ESLconnection_execute",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_execute" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_execute" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (obj2) {
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_execute" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (obj3) {
+ res4 = SWIG_AsCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ESLconnection_execute" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_executeAsync(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:ESLconnection_executeAsync",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_executeAsync" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_executeAsync" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (obj2) {
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLconnection_executeAsync" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (obj3) {
+ res4 = SWIG_AsCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ESLconnection_executeAsync" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_setAsyncExecute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_setAsyncExecute",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_setAsyncExecute" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_setAsyncExecute" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_setEventLock(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:ESLconnection_setEventLock",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_setEventLock" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLconnection_setEventLock" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ESLconnection_disconnect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:ESLconnection_disconnect",&obj0)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLconnection_disconnect" "', argument " "1"" of type '" "ESLconnection *""'");
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->disconnect();
+ resultobj = SWIG_From_int(static_cast< int >(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *ESLconnection_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_ESLconnection, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_eslSetLogLevel(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ int arg1 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:eslSetLogLevel",&obj0)) SWIG_fail;
+ ecode1 = SWIG_AsVal_int(obj0, &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "eslSetLogLevel" "', argument " "1"" of type '" "int""'");
+ }
+ arg1 = static_cast< int >(val1);
+ eslSetLogLevel(arg1);
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+static PyMethodDef SwigMethods[] = {
+ { (char *)"ESLevent_event_set", _wrap_ESLevent_event_set, METH_VARARGS, NULL},
+ { (char *)"ESLevent_event_get", _wrap_ESLevent_event_get, METH_VARARGS, NULL},
+ { (char *)"ESLevent_serialized_string_set", _wrap_ESLevent_serialized_string_set, METH_VARARGS, NULL},
+ { (char *)"ESLevent_serialized_string_get", _wrap_ESLevent_serialized_string_get, METH_VARARGS, NULL},
+ { (char *)"ESLevent_mine_set", _wrap_ESLevent_mine_set, METH_VARARGS, NULL},
+ { (char *)"ESLevent_mine_get", _wrap_ESLevent_mine_get, METH_VARARGS, NULL},
+ { (char *)"new_ESLevent", _wrap_new_ESLevent, METH_VARARGS, NULL},
+ { (char *)"delete_ESLevent", _wrap_delete_ESLevent, METH_VARARGS, NULL},
+ { (char *)"ESLevent_serialize", _wrap_ESLevent_serialize, METH_VARARGS, NULL},
+ { (char *)"ESLevent_setPriority", _wrap_ESLevent_setPriority, METH_VARARGS, NULL},
+ { (char *)"ESLevent_getHeader", _wrap_ESLevent_getHeader, METH_VARARGS, NULL},
+ { (char *)"ESLevent_getBody", _wrap_ESLevent_getBody, METH_VARARGS, NULL},
+ { (char *)"ESLevent_getType", _wrap_ESLevent_getType, METH_VARARGS, NULL},
+ { (char *)"ESLevent_addBody", _wrap_ESLevent_addBody, METH_VARARGS, NULL},
+ { (char *)"ESLevent_addHeader", _wrap_ESLevent_addHeader, METH_VARARGS, NULL},
+ { (char *)"ESLevent_delHeader", _wrap_ESLevent_delHeader, METH_VARARGS, NULL},
+ { (char *)"ESLevent_firstHeader", _wrap_ESLevent_firstHeader, METH_VARARGS, NULL},
+ { (char *)"ESLevent_nextHeader", _wrap_ESLevent_nextHeader, METH_VARARGS, NULL},
+ { (char *)"ESLevent_swigregister", ESLevent_swigregister, METH_VARARGS, NULL},
+ { (char *)"new_ESLconnection", _wrap_new_ESLconnection, METH_VARARGS, NULL},
+ { (char *)"delete_ESLconnection", _wrap_delete_ESLconnection, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_socketDescriptor", _wrap_ESLconnection_socketDescriptor, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_connected", _wrap_ESLconnection_connected, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_getInfo", _wrap_ESLconnection_getInfo, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_send", _wrap_ESLconnection_send, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_sendRecv", _wrap_ESLconnection_sendRecv, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_api", _wrap_ESLconnection_api, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_bgapi", _wrap_ESLconnection_bgapi, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_sendEvent", _wrap_ESLconnection_sendEvent, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_recvEvent", _wrap_ESLconnection_recvEvent, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_recvEventTimed", _wrap_ESLconnection_recvEventTimed, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_filter", _wrap_ESLconnection_filter, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_events", _wrap_ESLconnection_events, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_execute", _wrap_ESLconnection_execute, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_executeAsync", _wrap_ESLconnection_executeAsync, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_setAsyncExecute", _wrap_ESLconnection_setAsyncExecute, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_setEventLock", _wrap_ESLconnection_setEventLock, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_disconnect", _wrap_ESLconnection_disconnect, METH_VARARGS, NULL},
+ { (char *)"ESLconnection_swigregister", ESLconnection_swigregister, METH_VARARGS, NULL},
+ { (char *)"eslSetLogLevel", _wrap_eslSetLogLevel, METH_VARARGS, NULL},
+ { NULL, NULL, 0, NULL }
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_ESLconnection = {"_p_ESLconnection", "ESLconnection *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESLevent = {"_p_ESLevent", "ESLevent *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_event_t = {"_p_esl_event_t", "esl_event_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_priority_t = {"_p_esl_priority_t", "esl_priority_t *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_ESLconnection,
+ &_swigt__p_ESLevent,
+ &_swigt__p_char,
+ &_swigt__p_esl_event_t,
+ &_swigt__p_esl_priority_t,
+};
+
+static swig_cast_info _swigc__p_ESLconnection[] = { {&_swigt__p_ESLconnection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESLevent[] = { {&_swigt__p_ESLevent, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_event_t[] = { {&_swigt__p_esl_event_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_priority_t[] = { {&_swigt__p_esl_priority_t, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_ESLconnection,
+ _swigc__p_ESLevent,
+ _swigc__p_char,
+ _swigc__p_esl_event_t,
+ _swigc__p_esl_priority_t,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_const_info swig_const_table[] = {
+{0, 0, 0, 0.0, 0, 0}};
+
+#ifdef __cplusplus
+}
+#endif
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ * 1) If the cast->type has already been loaded AND the type we are adding
+ * casting info to has not been loaded (it is in this module), THEN we
+ * replace the cast->type pointer with the type pointer that has already
+ * been loaded.
+ * 2) If BOTH types (the one we are adding casting info to, and the
+ * cast->type) are loaded, THEN the cast info has already been loaded by
+ * the previous module so we just ignore it.
+ * 3) Finally, if cast->type has not already been loaded, then we add that
+ * swig_cast_info to the linked list (because the cast->type) pointer will
+ * be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+ size_t i;
+ swig_module_info *module_head, *iter;
+ int found, init;
+
+ clientdata = clientdata;
+
+ /* check to see if the circular list has been setup, if not, set it up */
+ if (swig_module.next==0) {
+ /* Initialize the swig_module */
+ swig_module.type_initial = swig_type_initial;
+ swig_module.cast_initial = swig_cast_initial;
+ swig_module.next = &swig_module;
+ init = 1;
+ } else {
+ init = 0;
+ }
+
+ /* Try and load any already created modules */
+ module_head = SWIG_GetModule(clientdata);
+ if (!module_head) {
+ /* This is the first module loaded for this interpreter */
+ /* so set the swig module into the interpreter */
+ SWIG_SetModule(clientdata, &swig_module);
+ module_head = &swig_module;
+ } else {
+ /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+ found=0;
+ iter=module_head;
+ do {
+ if (iter==&swig_module) {
+ found=1;
+ break;
+ }
+ iter=iter->next;
+ } while (iter!= module_head);
+
+ /* if the is found in the list, then all is done and we may leave */
+ if (found) return;
+ /* otherwise we must add out module into the list */
+ swig_module.next = module_head->next;
+ module_head->next = &swig_module;
+ }
+
+ /* When multiple interpeters are used, a module could have already been initialized in
+ a different interpreter, but not yet have a pointer in this interpreter.
+ In this case, we do not want to continue adding types... everything should be
+ set up already */
+ if (init == 0) return;
+
+ /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+ for (i = 0; i < swig_module.size; ++i) {
+ swig_type_info *type = 0;
+ swig_type_info *ret;
+ swig_cast_info *cast;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+
+ /* if there is another module already loaded */
+ if (swig_module.next != &swig_module) {
+ type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+ }
+ if (type) {
+ /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+ if (swig_module.type_initial[i]->clientdata) {
+ type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+ }
+ } else {
+ type = swig_module.type_initial[i];
+ }
+
+ /* Insert casting types */
+ cast = swig_module.cast_initial[i];
+ while (cast->type) {
+ /* Don't need to add information already in the list */
+ ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+ if (swig_module.next != &swig_module) {
+ ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+ }
+ if (ret) {
+ if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+ cast->type = ret;
+ ret = 0;
+ } else {
+ /* Check for casting already in the list */
+ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+ if (!ocast) ret = 0;
+ }
+ }
+
+ if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+ if (type->cast) {
+ type->cast->prev = cast;
+ cast->next = type->cast;
+ }
+ type->cast = cast;
+ }
+ cast++;
+ }
+ /* Set entry in modules->types array equal to the type */
+ swig_module.types[i] = type;
+ }
+ swig_module.types[i] = 0;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+ for (i = 0; i < swig_module.size; ++i) {
+ int j = 0;
+ swig_cast_info *cast = swig_module.cast_initial[i];
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+ while (cast->type) {
+ printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+ cast++;
+ ++j;
+ }
+ printf("---- Total casts: %d\n",j);
+ }
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types. It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+ size_t i;
+ swig_cast_info *equiv;
+ static int init_run = 0;
+
+ if (init_run) return;
+ init_run = 1;
+
+ for (i = 0; i < swig_module.size; i++) {
+ if (swig_module.types[i]->clientdata) {
+ equiv = swig_module.types[i]->cast;
+ while (equiv) {
+ if (!equiv->converter) {
+ if (equiv->type && !equiv->type->clientdata)
+ SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+ }
+ equiv = equiv->next;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+#if 0
+{
+ /* c-mode */
+#endif
+}
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Python-specific SWIG API */
+#define SWIG_newvarlink() SWIG_Python_newvarlink()
+#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr)
+#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants)
+
+ /* -----------------------------------------------------------------------------
+ * global variable support code.
+ * ----------------------------------------------------------------------------- */
+
+ typedef struct swig_globalvar {
+ char *name; /* Name of global variable */
+ PyObject *(*get_attr)(void); /* Return the current value */
+ int (*set_attr)(PyObject *); /* Set the value */
+ struct swig_globalvar *next;
+ } swig_globalvar;
+
+ typedef struct swig_varlinkobject {
+ PyObject_HEAD
+ swig_globalvar *vars;
+ } swig_varlinkobject;
+
+ SWIGINTERN PyObject *
+ swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
+ return PyString_FromString("<Swig global variables>");
+ }
+
+ SWIGINTERN PyObject *
+ swig_varlink_str(swig_varlinkobject *v) {
+ PyObject *str = PyString_FromString("(");
+ swig_globalvar *var;
+ for (var = v->vars; var; var=var->next) {
+ PyString_ConcatAndDel(&str,PyString_FromString(var->name));
+ if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
+ }
+ PyString_ConcatAndDel(&str,PyString_FromString(")"));
+ return str;
+ }
+
+ SWIGINTERN int
+ swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
+ PyObject *str = swig_varlink_str(v);
+ fprintf(fp,"Swig global variables ");
+ fprintf(fp,"%s\n", PyString_AsString(str));
+ Py_DECREF(str);
+ return 0;
+ }
+
+ SWIGINTERN void
+ swig_varlink_dealloc(swig_varlinkobject *v) {
+ swig_globalvar *var = v->vars;
+ while (var) {
+ swig_globalvar *n = var->next;
+ free(var->name);
+ free(var);
+ var = n;
+ }
+ }
+
+ SWIGINTERN PyObject *
+ swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+ PyObject *res = NULL;
+ swig_globalvar *var = v->vars;
+ while (var) {
+ if (strcmp(var->name,n) == 0) {
+ res = (*var->get_attr)();
+ break;
+ }
+ var = var->next;
+ }
+ if (res == NULL && !PyErr_Occurred()) {
+ PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+ }
+ return res;
+ }
+
+ SWIGINTERN int
+ swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+ int res = 1;
+ swig_globalvar *var = v->vars;
+ while (var) {
+ if (strcmp(var->name,n) == 0) {
+ res = (*var->set_attr)(p);
+ break;
+ }
+ var = var->next;
+ }
+ if (res == 1 && !PyErr_Occurred()) {
+ PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+ }
+ return res;
+ }
+
+ SWIGINTERN PyTypeObject*
+ swig_varlink_type(void) {
+ static char varlink__doc__[] = "Swig var link object";
+ static PyTypeObject varlink_type;
+ static int type_init = 0;
+ if (!type_init) {
+ const PyTypeObject tmp
+ = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* Number of items in variable part (ob_size) */
+ (char *)"swigvarlink", /* Type name (tp_name) */
+ sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */
+ 0, /* Itemsize (tp_itemsize) */
+ (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */
+ (printfunc) swig_varlink_print, /* Print (tp_print) */
+ (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */
+ (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */
+ 0, /* tp_compare */
+ (reprfunc) swig_varlink_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ (reprfunc)swig_varlink_str, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ 0, /* tp_flags */
+ varlink__doc__, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+ 0, /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+ 0,0,0,0 /* tp_alloc -> tp_next */
+#endif
+ };
+ varlink_type = tmp;
+ varlink_type.ob_type = &PyType_Type;
+ type_init = 1;
+ }
+ return &varlink_type;
+ }
+
+ /* Create a variable linking object for use later */
+ SWIGINTERN PyObject *
+ SWIG_Python_newvarlink(void) {
+ swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type());
+ if (result) {
+ result->vars = 0;
+ }
+ return ((PyObject*) result);
+ }
+
+ SWIGINTERN void
+ SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+ swig_varlinkobject *v = (swig_varlinkobject *) p;
+ swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+ if (gv) {
+ size_t size = strlen(name)+1;
+ gv->name = (char *)malloc(size);
+ if (gv->name) {
+ strncpy(gv->name,name,size);
+ gv->get_attr = get_attr;
+ gv->set_attr = set_attr;
+ gv->next = v->vars;
+ }
+ }
+ v->vars = gv;
+ }
+
+ SWIGINTERN PyObject *
+ SWIG_globals(void) {
+ static PyObject *_SWIG_globals = 0;
+ if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink();
+ return _SWIG_globals;
+ }
+
+ /* -----------------------------------------------------------------------------
+ * constants/methods manipulation
+ * ----------------------------------------------------------------------------- */
+
+ /* Install Constants */
+ SWIGINTERN void
+ SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
+ PyObject *obj = 0;
+ size_t i;
+ for (i = 0; constants[i].type; ++i) {
+ switch(constants[i].type) {
+ case SWIG_PY_POINTER:
+ obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
+ break;
+ case SWIG_PY_BINARY:
+ obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+ break;
+ default:
+ obj = 0;
+ break;
+ }
+ if (obj) {
+ PyDict_SetItemString(d, constants[i].name, obj);
+ Py_DECREF(obj);
+ }
+ }
+ }
+
+ /* -----------------------------------------------------------------------------*/
+ /* Fix SwigMethods to carry the callback ptrs when needed */
+ /* -----------------------------------------------------------------------------*/
+
+ SWIGINTERN void
+ SWIG_Python_FixMethods(PyMethodDef *methods,
+ swig_const_info *const_table,
+ swig_type_info **types,
+ swig_type_info **types_initial) {
+ size_t i;
+ for (i = 0; methods[i].ml_name; ++i) {
+ const char *c = methods[i].ml_doc;
+ if (c && (c = strstr(c, "swig_ptr: "))) {
+ int j;
+ swig_const_info *ci = 0;
+ const char *name = c + 10;
+ for (j = 0; const_table[j].type; ++j) {
+ if (strncmp(const_table[j].name, name,
+ strlen(const_table[j].name)) == 0) {
+ ci = &(const_table[j]);
+ break;
+ }
+ }
+ if (ci) {
+ size_t shift = (ci->ptype) - types;
+ swig_type_info *ty = types_initial[shift];
+ size_t ldoc = (c - methods[i].ml_doc);
+ size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
+ char *ndoc = (char*)malloc(ldoc + lptr + 10);
+ if (ndoc) {
+ char *buff = ndoc;
+ void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0;
+ if (ptr) {
+ strncpy(buff, methods[i].ml_doc, ldoc);
+ buff += ldoc;
+ strncpy(buff, "swig_ptr: ", 10);
+ buff += 10;
+ SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
+ methods[i].ml_doc = ndoc;
+ }
+ }
+ }
+ }
+ }
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------*
+ * Partial Init method
+ * -----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C"
+#endif
+SWIGEXPORT void SWIG_init(void) {
+ PyObject *m, *d;
+
+ /* Fix SwigMethods to carry the callback ptrs when needed */
+ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
+
+ m = Py_InitModule((char *) SWIG_name, SwigMethods);
+ d = PyModule_GetDict(m);
+
+ SWIG_InitializeModule(0);
+ SWIG_InstallConstants(d,swig_const_table);
+
+
+}
+
Deleted: freeswitch/branches/seven/libs/esl/python/events.py
Copied: freeswitch/branches/seven/libs/esl/python/events.py (from rev 14471, freeswitch/trunk/libs/esl/python/events.py) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/events.py (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/events.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+import string
+import sys
+
+from ESL import *
+
+con = ESLconnection("localhost","8021","ClueCon")
+#are we connected?
+
+if con.connected:
+
+ con.events("plain", "all");
+
+ while 1:
+ #my $e = $con->recvEventTimed(100);
+ e = con.recvEvent()
+
+ if e:
+ print e.serialize()
Deleted: freeswitch/branches/seven/libs/esl/python/server.py
Copied: freeswitch/branches/seven/libs/esl/python/server.py (from rev 14471, freeswitch/trunk/libs/esl/python/server.py) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/server.py (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/server.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+import SocketServer
+from ESL import *
+
+class ESLRequestHandler(SocketServer.BaseRequestHandler ):
+ def setup(self):
+ print self.client_address, 'connected!'
+
+ fd = self.request.fileno()
+ print fd
+
+ con = ESLconnection(fd)
+ print "Connected: "
+ print con.connected()
+ if con.connected():
+
+ info = con.getInfo()
+
+ uuid = info.getHeader("unique-id")
+ print uuid
+ con.execute("answer", "", uuid)
+ con.execute("playback", "/ram/swimp.raw", uuid);
+
+#server host is a tuple ('host', port)
+server = SocketServer.ThreadingTCPServer(('', 8040), ESLRequestHandler)
+server.serve_forever()
+
+
Deleted: freeswitch/branches/seven/libs/esl/python/single_command.py
Copied: freeswitch/branches/seven/libs/esl/python/single_command.py (from rev 14471, freeswitch/trunk/libs/esl/python/single_command.py) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/python/single_command.py (rev 0)
+++ freeswitch/branches/seven/libs/esl/python/single_command.py 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+import string
+import sys
+from optparse import OptionParser
+from ESL import *
+
+def main(argv):
+
+ try:
+
+ parser = OptionParser()
+ parser.add_option("-a", "--auth", dest="auth", default="ClueCon",
+ help="ESL password")
+ parser.add_option("-s", "--server", dest="server", default="127.0.0.1",
+ help="FreeSWITCH server IP address")
+ parser.add_option("-p", "--port", dest="port", default="8021",
+ help="FreeSWITCH server event socket port")
+ parser.add_option("-c", "--command", dest="command",
+ help="command to run, surround mutli word commands in \"\'s")
+
+ (options, args) = parser.parse_args()
+
+
+ con = ESLconnection(options.server, options.port, options.auth)
+ #are we connected?
+
+ if con.connected:
+ #run command
+ e=con.sendRecv("api "+ options.command)
+ print e.getBody()
+
+ else:
+
+ print "Not Connected"
+ sys.exit(2)
+
+ except:
+
+ print parser.get_usage()
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
\ No newline at end of file
Copied: freeswitch/branches/seven/libs/esl/ruby (from rev 14471, freeswitch/trunk/libs/esl/ruby)
Deleted: freeswitch/branches/seven/libs/esl/ruby/Makefile
Copied: freeswitch/branches/seven/libs/esl/ruby/Makefile (from rev 14471, freeswitch/trunk/libs/esl/ruby/Makefile) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ruby/Makefile (rev 0)
+++ freeswitch/branches/seven/libs/esl/ruby/Makefile 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,23 @@
+## no idea how to simply ask ruby which one to use
+LOCAL_CFLAGS=-I$(shell ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["topdir"]')
+LOCAL_LDFLAGS=$(shell ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["LIBRUBYARG"]')
+
+all: ESL.so
+
+esl_wrap.cpp:
+ swig -module ESL -ruby -c++ -DMULTIPLICITY -I../src/include -o esl_wrap.cpp ../ESL.i
+
+esl_wrap.o: esl_wrap.cpp
+ $(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) -c esl_wrap.cpp -o esl_wrap.o
+
+ESL.so: esl_wrap.o
+ $(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o ESL.so -L. $(LIBS)
+
+clean:
+ rm -f *.o *.so *~
+
+swigclean:
+ rm -f esl_wrap.* ESL.so
+
+reswig: swigclean esl_wrap.cpp
+
Deleted: freeswitch/branches/seven/libs/esl/ruby/esl_wrap.cpp
Copied: freeswitch/branches/seven/libs/esl/ruby/esl_wrap.cpp (from rev 14471, freeswitch/trunk/libs/esl/ruby/esl_wrap.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ruby/esl_wrap.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/ruby/esl_wrap.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3778 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGRUBY
+
+#ifdef __cplusplus
+template<typename T> class SwigValueWrapper {
+ T *tt;
+public:
+ SwigValueWrapper() : tt(0) { }
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }
+ SwigValueWrapper(const T& t) : tt(new T(t)) { }
+ ~SwigValueWrapper() { delete tt; }
+ SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }
+ operator T&() const { return *tt; }
+ T *operator&() { return tt; }
+private:
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+};
+
+template <typename T> T SwigValueInit() {
+ return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic CAPI SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+ or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+ creating a static or dynamic library from the swig runtime code.
+ In 99.9% of the cases, swig just needs to declare them as 'static'.
+
+ But only do this if is strictly necessary, ie, if you have problems
+ with your compiler or so.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/* Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN 0x1
+#define SWIG_CAST_NEW_MEMORY 0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN 0x1
+
+
+/*
+ Flags/methods for returning states.
+
+ The swig conversion methods, as ConvertPtr, return and integer
+ that tells if the conversion was successful or not. And if not,
+ an error code can be returned (see swigerrors.swg for the codes).
+
+ Use the following macros/flags to set or process the returning
+ states.
+
+ In old swig versions, you usually write code as:
+
+ if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+ // success code
+ } else {
+ //fail code
+ }
+
+ Now you can be more explicit as:
+
+ int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ // fail code
+ }
+
+ that seems to be the same, but now you can also do
+
+ Type *ptr;
+ int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ if (SWIG_IsNewObj(res) {
+ ...
+ delete *ptr;
+ } else {
+ ...
+ }
+ } else {
+ // fail code
+ }
+
+ I.e., now SWIG_ConvertPtr can return new objects and you can
+ identify the case and take care of the deallocation. Of course that
+ requires also to SWIG_ConvertPtr to return new result values, as
+
+ int SWIG_ConvertPtr(obj, ptr,...) {
+ if (<obj is ok>) {
+ if (<need new object>) {
+ *ptr = <ptr to new allocated object>;
+ return SWIG_NEWOBJ;
+ } else {
+ *ptr = <ptr to old object>;
+ return SWIG_OLDOBJ;
+ }
+ } else {
+ return SWIG_BADOBJ;
+ }
+ }
+
+ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+ more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+ swig errors code.
+
+ Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+ allows to return the 'cast rank', for example, if you have this
+
+ int food(double)
+ int fooi(int);
+
+ and you call
+
+ food(1) // cast rank '1' (1 -> 1.0)
+ fooi(1) // cast rank '0'
+
+ just use the SWIG_AddCast()/SWIG_CheckState()
+
+
+ */
+#define SWIG_OK (0)
+#define SWIG_ERROR (-1)
+#define SWIG_IsOK(r) (r >= 0)
+#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ (SWIG_ERROR)
+#define SWIG_OLDOBJ (SWIG_OK)
+#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+# ifndef SWIG_TypeRank
+# define SWIG_TypeRank unsigned long
+# endif
+# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
+# define SWIG_MAXCASTRANK (2)
+# endif
+# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
+# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+ return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+ return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+# define SWIG_AddCast
+# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+ const char *name; /* mangled name of this type */
+ const char *str; /* human readable name of this type */
+ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
+ struct swig_cast_info *cast; /* linked list of types that can cast into this type */
+ void *clientdata; /* language specific type data */
+ int owndata; /* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+ swig_type_info *type; /* pointer to type that is equivalent to this type */
+ swig_converter_func converter; /* function to cast the void pointers */
+ struct swig_cast_info *next; /* pointer to next cast in linked list */
+ struct swig_cast_info *prev; /* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+ swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
+ size_t size; /* Number of types in this module */
+ struct swig_module_info *next; /* Pointer to next element in circularly linked list */
+ swig_type_info **type_initial; /* Array of initially generated type structures */
+ swig_cast_info **cast_initial; /* Array of initially generated casting structures */
+ void *clientdata; /* Language specific module data */
+} swig_module_info;
+
+/*
+ Compare two type names skipping the space characters, therefore
+ "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+ Return 0 when the two name types are equivalent, as in
+ strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+ const char *f2, const char *l2) {
+ for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+ while ((*f1 == ' ') && (f1 != l1)) ++f1;
+ while ((*f2 == ' ') && (f2 != l2)) ++f2;
+ if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+ }
+ return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+/*
+ Check type equivalence in a name list like <name1>|<name2>|...
+ Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+ int equiv = 0;
+ const char* te = tb + strlen(tb);
+ const char* ne = nb;
+ while (!equiv && *ne) {
+ for (nb = ne; *ne; ++ne) {
+ if (*ne == '|') break;
+ }
+ equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+ if (*ne) ++ne;
+ }
+ return equiv;
+}
+
+
+/* think of this as a c++ template<> or a scheme macro */
+#define SWIG_TypeCheck_Template(comparison, ty) \
+ if (ty) { \
+ swig_cast_info *iter = ty->cast; \
+ while (iter) { \
+ if (comparison) { \
+ if (iter == ty->cast) return iter; \
+ /* Move iter to the top of the linked list */ \
+ iter->prev->next = iter->next; \
+ if (iter->next) \
+ iter->next->prev = iter->prev; \
+ iter->next = ty->cast; \
+ iter->prev = 0; \
+ if (ty->cast) ty->cast->prev = iter; \
+ ty->cast = iter; \
+ return iter; \
+ } \
+ iter = iter->next; \
+ } \
+ } \
+ return 0
+
+/*
+ Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+ SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
+}
+
+/* Same as previous function, except strcmp is replaced with a pointer comparison */
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
+ SWIG_TypeCheck_Template(iter->type == from, into);
+}
+
+/*
+ Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+ return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+ Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+ swig_type_info *lastty = ty;
+ if (!ty || !ty->dcast) return ty;
+ while (ty && (ty->dcast)) {
+ ty = (*ty->dcast)(ptr);
+ if (ty) lastty = ty;
+ }
+ return lastty;
+}
+
+/*
+ Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+ return ty->name;
+}
+
+/*
+ Return the pretty name associated with this type,
+ that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+ /* The "str" field contains the equivalent pretty names of the
+ type, separated by vertical-bar characters. We choose
+ to print the last name, as it is often (?) the most
+ specific. */
+ if (!type) return NULL;
+ if (type->str != NULL) {
+ const char *last_name = type->str;
+ const char *s;
+ for (s = type->str; *s; s++)
+ if (*s == '|') last_name = s+1;
+ return last_name;
+ }
+ else
+ return type->name;
+}
+
+/*
+ Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+ swig_cast_info *cast = ti->cast;
+ /* if (ti->clientdata == clientdata) return; */
+ ti->clientdata = clientdata;
+
+ while (cast) {
+ if (!cast->converter) {
+ swig_type_info *tc = cast->type;
+ if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+ }
+ }
+ cast = cast->next;
+ }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+ SWIG_TypeClientData(ti, clientdata);
+ ti->owndata = 1;
+}
+
+/*
+ Search for a swig_type_info structure only by mangled name
+ Search is a O(log #types)
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ swig_module_info *iter = start;
+ do {
+ if (iter->size) {
+ register size_t l = 0;
+ register size_t r = iter->size - 1;
+ do {
+ /* since l+r >= 0, we can (>> 1) instead (/ 2) */
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+ register int compare = strcmp(name, iname);
+ if (compare == 0) {
+ return iter->types[i];
+ } else if (compare < 0) {
+ if (i) {
+ r = i - 1;
+ } else {
+ break;
+ }
+ } else if (compare > 0) {
+ l = i + 1;
+ }
+ } else {
+ break; /* should never happen */
+ }
+ } while (l <= r);
+ }
+ iter = iter->next;
+ } while (iter != end);
+ return 0;
+}
+
+/*
+ Search for a swig_type_info structure for either a mangled name or a human readable name.
+ It first searches the mangled names of the types, which is a O(log #types)
+ If a type is not found it then searches the human readable names, which is O(#types).
+
+ We start searching at module start, and finish searching when start == end.
+ Note: if start == end at the beginning of the function, we go all the way around
+ the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+ swig_module_info *end,
+ const char *name) {
+ /* STEP 1: Search the name field using binary search */
+ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+ if (ret) {
+ return ret;
+ } else {
+ /* STEP 2: If the type hasn't been found, do a complete search
+ of the str field (the human readable name) */
+ swig_module_info *iter = start;
+ do {
+ register size_t i = 0;
+ for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+ return iter->types[i];
+ }
+ iter = iter->next;
+ } while (iter != end);
+ }
+
+ /* neither found a match */
+ return 0;
+}
+
+/*
+ Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+ static const char hex[17] = "0123456789abcdef";
+ register const unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register unsigned char uu = *u;
+ *(c++) = hex[(uu & 0xf0) >> 4];
+ *(c++) = hex[uu & 0xf];
+ }
+ return c;
+}
+
+/*
+ Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+ register unsigned char *u = (unsigned char *) ptr;
+ register const unsigned char *eu = u + sz;
+ for (; u != eu; ++u) {
+ register char d = *(c++);
+ register unsigned char uu;
+ if ((d >= '0') && (d <= '9'))
+ uu = ((d - '0') << 4);
+ else if ((d >= 'a') && (d <= 'f'))
+ uu = ((d - ('a'-10)) << 4);
+ else
+ return (char *) 0;
+ d = *(c++);
+ if ((d >= '0') && (d <= '9'))
+ uu |= (d - '0');
+ else if ((d >= 'a') && (d <= 'f'))
+ uu |= (d - ('a'-10));
+ else
+ return (char *) 0;
+ *u = uu;
+ }
+ return c;
+}
+
+/*
+ Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+ char *r = buff;
+ if ((2*sizeof(void *) + 2) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,&ptr,sizeof(void *));
+ if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+ strcpy(r,name);
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ *ptr = (void *) 0;
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+ char *r = buff;
+ size_t lname = (name ? strlen(name) : 0);
+ if ((2*sz + 2 + lname) > bsz) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r,ptr,sz);
+ if (lname) {
+ strncpy(r,name,lname+1);
+ } else {
+ *r = 0;
+ }
+ return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+ if (*c != '_') {
+ if (strcmp(c,"NULL") == 0) {
+ memset(ptr,0,sz);
+ return name;
+ } else {
+ return 0;
+ }
+ }
+ return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Errors in SWIG */
+#define SWIG_UnknownError -1
+#define SWIG_IOError -2
+#define SWIG_RuntimeError -3
+#define SWIG_IndexError -4
+#define SWIG_TypeError -5
+#define SWIG_DivisionByZero -6
+#define SWIG_OverflowError -7
+#define SWIG_SyntaxError -8
+#define SWIG_ValueError -9
+#define SWIG_SystemError -10
+#define SWIG_AttributeError -11
+#define SWIG_MemoryError -12
+#define SWIG_NullReferenceError -13
+
+
+
+#include <ruby.h>
+
+/* Remove global macros defined in Ruby's win32.h */
+#ifdef write
+# undef write
+#endif
+#ifdef read
+# undef read
+#endif
+
+
+/* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */
+#ifndef NUM2LL
+#define NUM2LL(x) NUM2LONG((x))
+#endif
+#ifndef LL2NUM
+#define LL2NUM(x) INT2NUM((long) (x))
+#endif
+#ifndef ULL2NUM
+#define ULL2NUM(x) UINT2NUM((unsigned long) (x))
+#endif
+
+/* Ruby 1.7 doesn't (yet) define NUM2ULL() */
+#ifndef NUM2ULL
+#ifdef HAVE_LONG_LONG
+#define NUM2ULL(x) rb_num2ull((x))
+#else
+#define NUM2ULL(x) NUM2ULONG(x)
+#endif
+#endif
+
+/* RSTRING_LEN, etc are new in Ruby 1.9, but ->ptr and ->len no longer work */
+/* Define these for older versions so we can just write code the new way */
+#ifndef RSTRING_LEN
+# define RSTRING_LEN(x) RSTRING(x)->len
+#endif
+#ifndef RSTRING_PTR
+# define RSTRING_PTR(x) RSTRING(x)->ptr
+#endif
+#ifndef RSTRING_END
+# define RSTRING_END(x) (RSTRING_PTR(x) + RSTRING_LEN(x))
+#endif
+#ifndef RARRAY_LEN
+# define RARRAY_LEN(x) RARRAY(x)->len
+#endif
+#ifndef RARRAY_PTR
+# define RARRAY_PTR(x) RARRAY(x)->ptr
+#endif
+#ifndef RFLOAT_VALUE
+# define RFLOAT_VALUE(x) RFLOAT(x)->value
+#endif
+#ifndef DOUBLE2NUM
+# define DOUBLE2NUM(x) rb_float_new(x)
+#endif
+#ifndef RHASH_TBL
+# define RHASH_TBL(x) (RHASH(x)->tbl)
+#endif
+#ifndef RHASH_ITER_LEV
+# define RHASH_ITER_LEV(x) (RHASH(x)->iter_lev)
+#endif
+#ifndef RHASH_IFNONE
+# define RHASH_IFNONE(x) (RHASH(x)->ifnone)
+#endif
+#ifndef RHASH_SIZE
+# define RHASH_SIZE(x) (RHASH(x)->tbl->num_entries)
+#endif
+#ifndef RHASH_EMPTY_P
+# define RHASH_EMPTY_P(x) (RHASH_SIZE(x) == 0)
+#endif
+#ifndef RSTRUCT_LEN
+# define RSTRUCT_LEN(x) RSTRUCT(x)->len
+#endif
+#ifndef RSTRUCT_PTR
+# define RSTRUCT_PTR(x) RSTRUCT(x)->ptr
+#endif
+
+
+
+/*
+ * Need to be very careful about how these macros are defined, especially
+ * when compiling C++ code or C code with an ANSI C compiler.
+ *
+ * VALUEFUNC(f) is a macro used to typecast a C function that implements
+ * a Ruby method so that it can be passed as an argument to API functions
+ * like rb_define_method() and rb_define_singleton_method().
+ *
+ * VOIDFUNC(f) is a macro used to typecast a C function that implements
+ * either the "mark" or "free" stuff for a Ruby Data object, so that it
+ * can be passed as an argument to API functions like Data_Wrap_Struct()
+ * and Data_Make_Struct().
+ */
+
+#ifdef __cplusplus
+# ifndef RUBY_METHOD_FUNC /* These definitions should work for Ruby 1.4.6 */
+# define PROTECTFUNC(f) ((VALUE (*)()) f)
+# define VALUEFUNC(f) ((VALUE (*)()) f)
+# define VOIDFUNC(f) ((void (*)()) f)
+# else
+# ifndef ANYARGS /* These definitions should work for Ruby 1.6 */
+# define PROTECTFUNC(f) ((VALUE (*)()) f)
+# define VALUEFUNC(f) ((VALUE (*)()) f)
+# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
+# else /* These definitions should work for Ruby 1.7+ */
+# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
+# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
+# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
+# endif
+# endif
+#else
+# define VALUEFUNC(f) (f)
+# define VOIDFUNC(f) (f)
+#endif
+
+/* Don't use for expressions have side effect */
+#ifndef RB_STRING_VALUE
+#define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s)))
+#endif
+#ifndef StringValue
+#define StringValue(s) RB_STRING_VALUE(s)
+#endif
+#ifndef StringValuePtr
+#define StringValuePtr(s) RSTRING_PTR(RB_STRING_VALUE(s))
+#endif
+#ifndef StringValueLen
+#define StringValueLen(s) RSTRING_LEN(RB_STRING_VALUE(s))
+#endif
+#ifndef SafeStringValue
+#define SafeStringValue(v) do {\
+ StringValue(v);\
+ rb_check_safe_str(v);\
+} while (0)
+#endif
+
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+#define rb_define_alloc_func(klass, func) rb_define_singleton_method((klass), "new", VALUEFUNC((func)), -1)
+#define rb_undef_alloc_func(klass) rb_undef_method(CLASS_OF((klass)), "new")
+#endif
+
+static VALUE _mSWIG = Qnil;
+
+/* -----------------------------------------------------------------------------
+ * error manipulation
+ * ----------------------------------------------------------------------------- */
+
+
+/* Define some additional error types */
+#define SWIG_ObjectPreviouslyDeletedError -100
+
+
+/* Define custom exceptions for errors that do not map to existing Ruby
+ exceptions. Note this only works for C++ since a global cannot be
+ initialized by a funtion in C. For C, fallback to rb_eRuntimeError.*/
+
+SWIGINTERN VALUE
+getNullReferenceError(void) {
+ static int init = 0;
+ static VALUE rb_eNullReferenceError ;
+ if (!init) {
+ init = 1;
+ rb_eNullReferenceError = rb_define_class("NullReferenceError", rb_eRuntimeError);
+ }
+ return rb_eNullReferenceError;
+}
+
+SWIGINTERN VALUE
+getObjectPreviouslyDeletedError(void) {
+ static int init = 0;
+ static VALUE rb_eObjectPreviouslyDeleted ;
+ if (!init) {
+ init = 1;
+ rb_eObjectPreviouslyDeleted = rb_define_class("ObjectPreviouslyDeleted", rb_eRuntimeError);
+ }
+ return rb_eObjectPreviouslyDeleted;
+}
+
+
+SWIGINTERN VALUE
+SWIG_Ruby_ErrorType(int SWIG_code) {
+ VALUE type;
+ switch (SWIG_code) {
+ case SWIG_MemoryError:
+ type = rb_eNoMemError;
+ break;
+ case SWIG_IOError:
+ type = rb_eIOError;
+ break;
+ case SWIG_RuntimeError:
+ type = rb_eRuntimeError;
+ break;
+ case SWIG_IndexError:
+ type = rb_eIndexError;
+ break;
+ case SWIG_TypeError:
+ type = rb_eTypeError;
+ break;
+ case SWIG_DivisionByZero:
+ type = rb_eZeroDivError;
+ break;
+ case SWIG_OverflowError:
+ type = rb_eRangeError;
+ break;
+ case SWIG_SyntaxError:
+ type = rb_eSyntaxError;
+ break;
+ case SWIG_ValueError:
+ type = rb_eArgError;
+ break;
+ case SWIG_SystemError:
+ type = rb_eFatal;
+ break;
+ case SWIG_AttributeError:
+ type = rb_eRuntimeError;
+ break;
+ case SWIG_NullReferenceError:
+ type = getNullReferenceError();
+ break;
+ case SWIG_ObjectPreviouslyDeletedError:
+ type = getObjectPreviouslyDeletedError();
+ break;
+ case SWIG_UnknownError:
+ type = rb_eRuntimeError;
+ break;
+ default:
+ type = rb_eRuntimeError;
+ }
+ return type;
+}
+
+
+/* This function is called when a user inputs a wrong argument to
+ a method.
+ */
+SWIGINTERN
+const char* Ruby_Format_TypeError( const char* msg,
+ const char* type,
+ const char* name,
+ const int argn,
+ VALUE input )
+{
+ char buf[128];
+ VALUE str;
+ VALUE asStr;
+ if ( msg && *msg )
+ {
+ str = rb_str_new2(msg);
+ }
+ else
+ {
+ str = rb_str_new(NULL, 0);
+ }
+
+ str = rb_str_cat2( str, "Expected argument " );
+ sprintf( buf, "%d of type ", argn-1 );
+ str = rb_str_cat2( str, buf );
+ str = rb_str_cat2( str, type );
+ str = rb_str_cat2( str, ", but got " );
+ str = rb_str_cat2( str, rb_obj_classname(input) );
+ str = rb_str_cat2( str, " " );
+ asStr = rb_inspect(input);
+ if ( RSTRING_LEN(asStr) > 30 )
+ {
+ str = rb_str_cat( str, StringValuePtr(asStr), 30 );
+ str = rb_str_cat2( str, "..." );
+ }
+ else
+ {
+ str = rb_str_append( str, asStr );
+ }
+
+ if ( name )
+ {
+ str = rb_str_cat2( str, "\n\tin SWIG method '" );
+ str = rb_str_cat2( str, name );
+ str = rb_str_cat2( str, "'" );
+ }
+
+ return StringValuePtr( str );
+}
+
+/* This function is called when an overloaded method fails */
+SWIGINTERN
+void Ruby_Format_OverloadedError(
+ const int argc,
+ const int maxargs,
+ const char* method,
+ const char* prototypes
+ )
+{
+ const char* msg = "Wrong # of arguments";
+ if ( argc <= maxargs ) msg = "Wrong arguments";
+ rb_raise(rb_eArgError,"%s for overloaded method '%s'.\n"
+ "Possible C/C++ prototypes are:\n%s",
+ msg, method, prototypes);
+}
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * rubytracking.swg
+ *
+ * This file contains support for tracking mappings from
+ * Ruby objects to C++ objects. This functionality is needed
+ * to implement mark functions for Ruby's mark and sweep
+ * garbage collector.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Ruby 1.8 actually assumes the first case. */
+#if SIZEOF_VOIDP == SIZEOF_LONG
+# define SWIG2NUM(v) LONG2NUM((unsigned long)v)
+# define NUM2SWIG(x) (unsigned long)NUM2LONG(x)
+#elif SIZEOF_VOIDP == SIZEOF_LONG_LONG
+# define SWIG2NUM(v) LL2NUM((unsigned long long)v)
+# define NUM2SWIG(x) (unsigned long long)NUM2LL(x)
+#else
+# error sizeof(void*) is not the same as long or long long
+#endif
+
+
+/* Global Ruby hash table to store Trackings from C/C++
+ structs to Ruby Objects.
+*/
+static VALUE swig_ruby_trackings = Qnil;
+
+/* Global variable that stores a reference to the ruby
+ hash table delete function. */
+static ID swig_ruby_hash_delete;
+
+/* Setup a Ruby hash table to store Trackings */
+SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
+ /* Create a ruby hash table to store Trackings from C++
+ objects to Ruby objects. */
+
+ /* Try to see if some other .so has already created a
+ tracking hash table, which we keep hidden in an instance var
+ in the SWIG module.
+ This is done to allow multiple DSOs to share the same
+ tracking table.
+ */
+ ID trackings_id = rb_intern( "@__trackings__" );
+ VALUE verbose = rb_gv_get("VERBOSE");
+ rb_gv_set("VERBOSE", Qfalse);
+ swig_ruby_trackings = rb_ivar_get( _mSWIG, trackings_id );
+ rb_gv_set("VERBOSE", verbose);
+
+ /* No, it hasn't. Create one ourselves */
+ if ( swig_ruby_trackings == Qnil )
+ {
+ swig_ruby_trackings = rb_hash_new();
+ rb_ivar_set( _mSWIG, trackings_id, swig_ruby_trackings );
+ }
+
+ /* Now store a reference to the hash table delete function
+ so that we only have to look it up once.*/
+ swig_ruby_hash_delete = rb_intern("delete");
+}
+
+/* Get a Ruby number to reference a pointer */
+SWIGRUNTIME VALUE SWIG_RubyPtrToReference(void* ptr) {
+ /* We cast the pointer to an unsigned long
+ and then store a reference to it using
+ a Ruby number object. */
+
+ /* Convert the pointer to a Ruby number */
+ return SWIG2NUM(ptr);
+}
+
+/* Get a Ruby number to reference an object */
+SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) {
+ /* We cast the object to an unsigned long
+ and then store a reference to it using
+ a Ruby number object. */
+
+ /* Convert the Object to a Ruby number */
+ return SWIG2NUM(object);
+}
+
+/* Get a Ruby object from a previously stored reference */
+SWIGRUNTIME VALUE SWIG_RubyReferenceToObject(VALUE reference) {
+ /* The provided Ruby number object is a reference
+ to the Ruby object we want.*/
+
+ /* Convert the Ruby number to a Ruby object */
+ return NUM2SWIG(reference);
+}
+
+/* Add a Tracking from a C/C++ struct to a Ruby object */
+SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) {
+ /* In a Ruby hash table we store the pointer and
+ the associated Ruby object. The trick here is
+ that we cannot store the Ruby object directly - if
+ we do then it cannot be garbage collected. So
+ instead we typecast it as a unsigned long and
+ convert it to a Ruby number object.*/
+
+ /* Get a reference to the pointer as a Ruby number */
+ VALUE key = SWIG_RubyPtrToReference(ptr);
+
+ /* Get a reference to the Ruby object as a Ruby number */
+ VALUE value = SWIG_RubyObjectToReference(object);
+
+ /* Store the mapping to the global hash table. */
+ rb_hash_aset(swig_ruby_trackings, key, value);
+}
+
+/* Get the Ruby object that owns the specified C/C++ struct */
+SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
+ /* Get a reference to the pointer as a Ruby number */
+ VALUE key = SWIG_RubyPtrToReference(ptr);
+
+ /* Now lookup the value stored in the global hash table */
+ VALUE value = rb_hash_aref(swig_ruby_trackings, key);
+
+ if (value == Qnil) {
+ /* No object exists - return nil. */
+ return Qnil;
+ }
+ else {
+ /* Convert this value to Ruby object */
+ return SWIG_RubyReferenceToObject(value);
+ }
+}
+
+/* Remove a Tracking from a C/C++ struct to a Ruby object. It
+ is very important to remove objects once they are destroyed
+ since the same memory address may be reused later to create
+ a new object. */
+SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) {
+ /* Get a reference to the pointer as a Ruby number */
+ VALUE key = SWIG_RubyPtrToReference(ptr);
+
+ /* Delete the object from the hash table by calling Ruby's
+ do this we need to call the Hash.delete method.*/
+ rb_funcall(swig_ruby_trackings, swig_ruby_hash_delete, 1, key);
+}
+
+/* This is a helper method that unlinks a Ruby object from its
+ underlying C++ object. This is needed if the lifetime of the
+ Ruby object is longer than the C++ object */
+SWIGRUNTIME void SWIG_RubyUnlinkObjects(void* ptr) {
+ VALUE object = SWIG_RubyInstanceFor(ptr);
+
+ if (object != Qnil) {
+ DATA_PTR(object) = 0;
+ }
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Ruby API portion that goes into the runtime
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+SWIGINTERN VALUE
+SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
+ if (NIL_P(target)) {
+ target = o;
+ } else {
+ if (TYPE(target) != T_ARRAY) {
+ VALUE o2 = target;
+ target = rb_ary_new();
+ rb_ary_push(target, o2);
+ }
+ rb_ary_push(target, o);
+ }
+ return target;
+}
+
+/* For ruby1.8.4 and earlier. */
+#ifndef RUBY_INIT_STACK
+ RUBY_EXTERN void Init_stack(VALUE* addr);
+# define RUBY_INIT_STACK \
+ VALUE variable_in_this_stack_frame; \
+ Init_stack(&variable_in_this_stack_frame);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * rubyrun.swg
+ *
+ * This file contains the runtime support for Ruby modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* For backward compatibility only */
+#define SWIG_POINTER_EXCEPTION 0
+
+/* for raw pointers */
+#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
+#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, own)
+#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Ruby_NewPointerObj(ptr, type, flags)
+#define SWIG_AcquirePtr(ptr, own) SWIG_Ruby_AcquirePtr(ptr, own)
+#define swig_owntype ruby_owntype
+
+/* for raw packed data */
+#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty, flags)
+#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Ruby_NewPackedObj(ptr, sz, type)
+
+/* for class or struct pointers */
+#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags)
+
+/* for C or C++ function pointers */
+#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0)
+#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0)
+
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Ruby_NewPackedObj(ptr, sz, type)
+
+
+/* Runtime API */
+
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
+
+
+/* Error manipulation */
+
+#define SWIG_ErrorType(code) SWIG_Ruby_ErrorType(code)
+#define SWIG_Error(code, msg) rb_raise(SWIG_Ruby_ErrorType(code), msg)
+#define SWIG_fail goto fail
+
+
+/* Ruby-specific SWIG API */
+
+#define SWIG_InitRuntime() SWIG_Ruby_InitRuntime()
+#define SWIG_define_class(ty) SWIG_Ruby_define_class(ty)
+#define SWIG_NewClassInstance(value, ty) SWIG_Ruby_NewClassInstance(value, ty)
+#define SWIG_MangleStr(value) SWIG_Ruby_MangleStr(value)
+#define SWIG_CheckConvert(value, ty) SWIG_Ruby_CheckConvert(value, ty)
+
+#include "assert.h"
+
+/* -----------------------------------------------------------------------------
+ * pointers/data manipulation
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ VALUE klass;
+ VALUE mImpl;
+ void (*mark)(void *);
+ void (*destroy)(void *);
+ int trackObjects;
+} swig_class;
+
+
+/* Global pointer used to keep some internal SWIG stuff */
+static VALUE _cSWIG_Pointer = Qnil;
+static VALUE swig_runtime_data_type_pointer = Qnil;
+
+/* Global IDs used to keep some internal SWIG stuff */
+static ID swig_arity_id = 0;
+static ID swig_call_id = 0;
+
+/*
+ If your swig extension is to be run within an embedded ruby and has
+ director callbacks, you should set -DRUBY_EMBEDDED during compilation.
+ This will reset ruby's stack frame on each entry point from the main
+ program the first time a virtual director function is invoked (in a
+ non-recursive way).
+ If this is not done, you run the risk of Ruby trashing the stack.
+*/
+
+#ifdef RUBY_EMBEDDED
+
+# define SWIG_INIT_STACK \
+ if ( !swig_virtual_calls ) { RUBY_INIT_STACK } \
+ ++swig_virtual_calls;
+# define SWIG_RELEASE_STACK --swig_virtual_calls;
+# define Ruby_DirectorTypeMismatchException(x) \
+ rb_raise( rb_eTypeError, x ); return c_result;
+
+ static unsigned int swig_virtual_calls = 0;
+
+#else /* normal non-embedded extension */
+
+# define SWIG_INIT_STACK
+# define SWIG_RELEASE_STACK
+# define Ruby_DirectorTypeMismatchException(x) \
+ throw Swig::DirectorTypeMismatchException( x );
+
+#endif /* RUBY_EMBEDDED */
+
+
+SWIGRUNTIME VALUE
+getExceptionClass(void) {
+ static int init = 0;
+ static VALUE rubyExceptionClass ;
+ if (!init) {
+ init = 1;
+ rubyExceptionClass = rb_const_get(_mSWIG, rb_intern("Exception"));
+ }
+ return rubyExceptionClass;
+}
+
+/* This code checks to see if the Ruby object being raised as part
+ of an exception inherits from the Ruby class Exception. If so,
+ the object is simply returned. If not, then a new Ruby exception
+ object is created and that will be returned to Ruby.*/
+SWIGRUNTIME VALUE
+SWIG_Ruby_ExceptionType(swig_type_info *desc, VALUE obj) {
+ VALUE exceptionClass = getExceptionClass();
+ if (rb_obj_is_kind_of(obj, exceptionClass)) {
+ return obj;
+ } else {
+ return rb_exc_new3(rb_eRuntimeError, rb_obj_as_string(obj));
+ }
+}
+
+/* Initialize Ruby runtime support */
+SWIGRUNTIME void
+SWIG_Ruby_InitRuntime(void)
+{
+ if (_mSWIG == Qnil) {
+ _mSWIG = rb_define_module("SWIG");
+ swig_call_id = rb_intern("call");
+ swig_arity_id = rb_intern("arity");
+ }
+}
+
+/* Define Ruby class for C type */
+SWIGRUNTIME void
+SWIG_Ruby_define_class(swig_type_info *type)
+{
+ VALUE klass;
+ char *klass_name = (char *) malloc(4 + strlen(type->name) + 1);
+ sprintf(klass_name, "TYPE%s", type->name);
+ if (NIL_P(_cSWIG_Pointer)) {
+ _cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject);
+ rb_undef_method(CLASS_OF(_cSWIG_Pointer), "new");
+ }
+ klass = rb_define_class_under(_mSWIG, klass_name, _cSWIG_Pointer);
+ free((void *) klass_name);
+}
+
+/* Create a new pointer object */
+SWIGRUNTIME VALUE
+SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
+{
+ int own = flags & SWIG_POINTER_OWN;
+ int track;
+ char *klass_name;
+ swig_class *sklass;
+ VALUE klass;
+ VALUE obj;
+
+ if (!ptr)
+ return Qnil;
+
+ if (type->clientdata) {
+ sklass = (swig_class *) type->clientdata;
+
+ /* Are we tracking this class and have we already returned this Ruby object? */
+ track = sklass->trackObjects;
+ if (track) {
+ obj = SWIG_RubyInstanceFor(ptr);
+
+ /* Check the object's type and make sure it has the correct type.
+ It might not in cases where methods do things like
+ downcast methods. */
+ if (obj != Qnil) {
+ VALUE value = rb_iv_get(obj, "@__swigtype__");
+ char* type_name = RSTRING_PTR(value);
+
+ if (strcmp(type->name, type_name) == 0) {
+ return obj;
+ }
+ }
+ }
+
+ /* Create a new Ruby object */
+ obj = Data_Wrap_Struct(sklass->klass, VOIDFUNC(sklass->mark),
+ ( own ? VOIDFUNC(sklass->destroy) :
+ (track ? VOIDFUNC(SWIG_RubyRemoveTracking) : 0 )
+ ), ptr);
+
+ /* If tracking is on for this class then track this object. */
+ if (track) {
+ SWIG_RubyAddTracking(ptr, obj);
+ }
+ } else {
+ klass_name = (char *) malloc(4 + strlen(type->name) + 1);
+ sprintf(klass_name, "TYPE%s", type->name);
+ klass = rb_const_get(_mSWIG, rb_intern(klass_name));
+ free((void *) klass_name);
+ obj = Data_Wrap_Struct(klass, 0, 0, ptr);
+ }
+ rb_iv_set(obj, "@__swigtype__", rb_str_new2(type->name));
+
+ return obj;
+}
+
+/* Create a new class instance (always owned) */
+SWIGRUNTIME VALUE
+SWIG_Ruby_NewClassInstance(VALUE klass, swig_type_info *type)
+{
+ VALUE obj;
+ swig_class *sklass = (swig_class *) type->clientdata;
+ obj = Data_Wrap_Struct(klass, VOIDFUNC(sklass->mark), VOIDFUNC(sklass->destroy), 0);
+ rb_iv_set(obj, "@__swigtype__", rb_str_new2(type->name));
+ return obj;
+}
+
+/* Get type mangle from class name */
+SWIGRUNTIMEINLINE char *
+SWIG_Ruby_MangleStr(VALUE obj)
+{
+ VALUE stype = rb_iv_get(obj, "@__swigtype__");
+ return StringValuePtr(stype);
+}
+
+/* Acquire a pointer value */
+typedef void (*ruby_owntype)(void*);
+
+SWIGRUNTIME ruby_owntype
+SWIG_Ruby_AcquirePtr(VALUE obj, ruby_owntype own) {
+ if (obj) {
+ ruby_owntype oldown = RDATA(obj)->dfree;
+ RDATA(obj)->dfree = own;
+ return oldown;
+ } else {
+ return 0;
+ }
+}
+
+/* Convert a pointer value */
+SWIGRUNTIME int
+SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags, ruby_owntype *own)
+{
+ char *c;
+ swig_cast_info *tc;
+ void *vptr = 0;
+
+ /* Grab the pointer */
+ if (NIL_P(obj)) {
+ *ptr = 0;
+ return SWIG_OK;
+ } else {
+ if (TYPE(obj) != T_DATA) {
+ return SWIG_ERROR;
+ }
+ Data_Get_Struct(obj, void, vptr);
+ }
+
+ if (own) *own = RDATA(obj)->dfree;
+
+ /* Check to see if the input object is giving up ownership
+ of the underlying C struct or C++ object. If so then we
+ need to reset the destructor since the Ruby object no
+ longer owns the underlying C++ object.*/
+ if (flags & SWIG_POINTER_DISOWN) {
+ /* Is tracking on for this class? */
+ int track = 0;
+ if (ty && ty->clientdata) {
+ swig_class *sklass = (swig_class *) ty->clientdata;
+ track = sklass->trackObjects;
+ }
+
+ if (track) {
+ /* We are tracking objects for this class. Thus we change the destructor
+ * to SWIG_RubyRemoveTracking. This allows us to
+ * remove the mapping from the C++ to Ruby object
+ * when the Ruby object is garbage collected. If we don't
+ * do this, then it is possible we will return a reference
+ * to a Ruby object that no longer exists thereby crashing Ruby. */
+ RDATA(obj)->dfree = SWIG_RubyRemoveTracking;
+ } else {
+ RDATA(obj)->dfree = 0;
+ }
+ }
+
+ /* Do type-checking if type info was provided */
+ if (ty) {
+ if (ty->clientdata) {
+ if (rb_obj_is_kind_of(obj, ((swig_class *) (ty->clientdata))->klass)) {
+ if (vptr == 0) {
+ /* The object has already been deleted */
+ return SWIG_ObjectPreviouslyDeletedError;
+ }
+ *ptr = vptr;
+ return SWIG_OK;
+ }
+ }
+ if ((c = SWIG_MangleStr(obj)) == NULL) {
+ return SWIG_ERROR;
+ }
+ tc = SWIG_TypeCheck(c, ty);
+ if (!tc) {
+ return SWIG_ERROR;
+ } else {
+ int newmemory = 0;
+ *ptr = SWIG_TypeCast(tc, vptr, &newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
+ }
+ } else {
+ *ptr = vptr;
+ }
+
+ return SWIG_OK;
+}
+
+/* Check convert */
+SWIGRUNTIMEINLINE int
+SWIG_Ruby_CheckConvert(VALUE obj, swig_type_info *ty)
+{
+ char *c = SWIG_MangleStr(obj);
+ if (!c) return 0;
+ return SWIG_TypeCheck(c,ty) != 0;
+}
+
+SWIGRUNTIME VALUE
+SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
+ char result[1024];
+ char *r = result;
+ if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
+ *(r++) = '_';
+ r = SWIG_PackData(r, ptr, sz);
+ strcpy(r, type->name);
+ return rb_str_new2(result);
+}
+
+/* Convert a packed value value */
+SWIGRUNTIME int
+SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
+ swig_cast_info *tc;
+ const char *c;
+
+ if (TYPE(obj) != T_STRING) goto type_error;
+ c = StringValuePtr(obj);
+ /* Pointer values must start with leading underscore */
+ if (*c != '_') goto type_error;
+ c++;
+ c = SWIG_UnpackData(c, ptr, sz);
+ if (ty) {
+ tc = SWIG_TypeCheck(c, ty);
+ if (!tc) goto type_error;
+ }
+ return SWIG_OK;
+
+ type_error:
+ return SWIG_ERROR;
+}
+
+SWIGRUNTIME swig_module_info *
+SWIG_Ruby_GetModule(void)
+{
+ VALUE pointer;
+ swig_module_info *ret = 0;
+ VALUE verbose = rb_gv_get("VERBOSE");
+
+ /* temporarily disable warnings, since the pointer check causes warnings with 'ruby -w' */
+ rb_gv_set("VERBOSE", Qfalse);
+
+ /* first check if pointer already created */
+ pointer = rb_gv_get("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
+ if (pointer != Qnil) {
+ Data_Get_Struct(pointer, swig_module_info, ret);
+ }
+
+ /* reinstate warnings */
+ rb_gv_set("VERBOSE", verbose);
+ return ret;
+}
+
+SWIGRUNTIME void
+SWIG_Ruby_SetModule(swig_module_info *pointer)
+{
+ /* register a new class */
+ VALUE cl = rb_define_class("swig_runtime_data", rb_cObject);
+ /* create and store the structure pointer to a global variable */
+ swig_runtime_data_type_pointer = Data_Wrap_Struct(cl, 0, 0, pointer);
+ rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer);
+}
+
+/* This function can be used to check whether a proc or method or similarly
+ callable function has been passed. Usually used in a %typecheck, like:
+
+ %typecheck(c_callback_t, precedence=SWIG_TYPECHECK_POINTER) {
+ $result = SWIG_Ruby_isCallable( $input );
+ }
+ */
+SWIGINTERN
+int SWIG_Ruby_isCallable( VALUE proc )
+{
+ if ( rb_respond_to( proc, swig_call_id ) == Qtrue )
+ return 1;
+ return 0;
+}
+
+/* This function can be used to check the arity (number of arguments)
+ a proc or method can take. Usually used in a %typecheck.
+ Valid arities will be that equal to minimal or those < 0
+ which indicate a variable number of parameters at the end.
+ */
+SWIGINTERN
+int SWIG_Ruby_arity( VALUE proc, int minimal )
+{
+ if ( rb_respond_to( proc, swig_arity_id ) == Qtrue )
+ {
+ VALUE num = rb_funcall( proc, swig_arity_id, 0 );
+ int arity = NUM2INT(num);
+ if ( arity < 0 && (arity+1) < -minimal ) return 1;
+ if ( arity == minimal ) return 1;
+ return 1;
+ }
+ return 0;
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
+
+#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_ESLconnection swig_types[0]
+#define SWIGTYPE_p_ESLevent swig_types[1]
+#define SWIGTYPE_p_char swig_types[2]
+#define SWIGTYPE_p_esl_event_t swig_types[3]
+#define SWIGTYPE_p_esl_priority_t swig_types[4]
+static swig_type_info *swig_types[6];
+static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#define SWIG_init Init_ESL
+#define SWIG_name "ESL"
+
+static VALUE mESL;
+
+#define SWIG_RUBY_THREAD_BEGIN_BLOCK
+#define SWIG_RUBY_THREAD_END_BLOCK
+
+
+#define SWIGVERSION 0x010335
+#define SWIG_VERSION SWIGVERSION
+
+
+#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a))
+#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a))
+
+
+#include <stdexcept>
+
+
+#include "esl.h"
+#include "esl_oop.h"
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+ static int init = 0;
+ static swig_type_info* info = 0;
+ if (!init) {
+ info = SWIG_TypeQuery("_p_char");
+ init = 1;
+ }
+ return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
+{
+ if (TYPE(obj) == T_STRING) {
+ #if defined(StringValuePtr)
+ char *cstr = StringValuePtr(obj);
+ #else
+ char *cstr = STR2CSTR(obj);
+ #endif
+ size_t size = RSTRING_LEN(obj) + 1;
+ if (cptr) {
+ if (alloc) {
+ if (*alloc == SWIG_NEWOBJ) {
+ *cptr = reinterpret_cast< char* >(memcpy((new char[size]), cstr, sizeof(char)*(size)));
+ } else {
+ *cptr = cstr;
+ *alloc = SWIG_OLDOBJ;
+ }
+ }
+ }
+ if (psize) *psize = size;
+ return SWIG_OK;
+ } else {
+ swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+ if (pchar_descriptor) {
+ void* vptr = 0;
+ if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+ if (cptr) *cptr = (char *)vptr;
+ if (psize) *psize = vptr ? (strlen((char*)vptr) + 1) : 0;
+ if (alloc) *alloc = SWIG_OLDOBJ;
+ return SWIG_OK;
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+
+
+
+SWIGINTERNINLINE VALUE
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+ if (carray) {
+ if (size > LONG_MAX) {
+ swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+ return pchar_descriptor ?
+ SWIG_NewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : Qnil;
+ } else {
+ return rb_str_new(carray, static_cast< long >(size));
+ }
+ } else {
+ return Qnil;
+ }
+}
+
+
+SWIGINTERNINLINE VALUE
+SWIG_FromCharPtr(const char *cptr)
+{
+ return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+
+
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+# define LLONG_MAX __LONG_LONG_MAX__
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+SWIGINTERN VALUE
+SWIG_ruby_failed(void)
+{
+ return Qnil;
+}
+
+
+/*@SWIG:/usr/share/swig/1.3.35/ruby/rubyprimtypes.swg,23,%ruby_aux_method@*/
+SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
+{
+ VALUE obj = args[0];
+ VALUE type = TYPE(obj);
+ long *res = (long *)(args[1]);
+ *res = type == T_FIXNUM ? NUM2LONG(obj) : rb_big2long(obj);
+ return obj;
+}
+/*@SWIG@*/
+
+SWIGINTERN int
+SWIG_AsVal_long (VALUE obj, long* val)
+{
+ VALUE type = TYPE(obj);
+ if ((type == T_FIXNUM) || (type == T_BIGNUM)) {
+ long v;
+ VALUE a[2];
+ a[0] = obj;
+ a[1] = (VALUE)(&v);
+ if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2LONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_int (VALUE obj, int *val)
+{
+ long v;
+ int res = SWIG_AsVal_long (obj, &v);
+ if (SWIG_IsOK(res)) {
+ if ((v < INT_MIN || v > INT_MAX)) {
+ return SWIG_OverflowError;
+ } else {
+ if (val) *val = static_cast< int >(v);
+ }
+ }
+ return res;
+}
+
+
+ #define SWIG_From_long LONG2NUM
+
+
+SWIGINTERNINLINE VALUE
+SWIG_From_int (int value)
+{
+ return SWIG_From_long (value);
+}
+
+
+SWIGINTERNINLINE VALUE
+SWIG_From_bool (bool value)
+{
+ return value ? Qtrue : Qfalse;
+}
+
+swig_class cESLevent;
+
+SWIGINTERN VALUE
+_wrap_ESLevent_event_set(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *arg2 = (esl_event_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","event", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_esl_event_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "esl_event_t *","event", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< esl_event_t * >(argp2);
+ if (arg1) (arg1)->event = arg2;
+
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_event_get(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_event_t *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","event", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (esl_event_t *) ((arg1)->event);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_esl_event_t, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_serialized_string_set(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","serialized_string", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char *","serialized_string", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (arg1->serialized_string) delete[] arg1->serialized_string;
+ if (arg2) {
+ size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1;
+ arg1->serialized_string = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size)));
+ } else {
+ arg1->serialized_string = 0;
+ }
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_serialized_string_get(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","serialized_string", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *) ((arg1)->serialized_string);
+ vresult = SWIG_FromCharPtr((const char *)result);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_mine_set(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","mine", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","mine", 2, argv[0] ));
+ }
+ arg2 = static_cast< int >(val2);
+ if (arg1) (arg1)->mine = arg2;
+
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_mine_get(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","mine", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (int) ((arg1)->mine);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_new_ESLevent__SWIG_0(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","ESLevent", 1, argv[0] ));
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ if (argc > 1) {
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ESLevent", 2, argv[1] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (ESLevent *)new ESLevent((char const *)arg1,(char const *)arg2);DATA_PTR(self) = result;
+
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return self;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_new_ESLevent__SWIG_1(int argc, VALUE *argv, VALUE self) {
+ esl_event_t *arg1 = (esl_event_t *) 0 ;
+ int arg2 = (int) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_esl_event_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "esl_event_t *","ESLevent", 1, argv[0] ));
+ }
+ arg1 = reinterpret_cast< esl_event_t * >(argp1);
+ if (argc > 1) {
+ ecode2 = SWIG_AsVal_int(argv[1], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","ESLevent", 2, argv[1] ));
+ }
+ arg2 = static_cast< int >(val2);
+ }
+ result = (ESLevent *)new ESLevent(arg1,arg2);DATA_PTR(self) = result;
+
+ return self;
+fail:
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_ESLevent_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_ESLevent_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_ESLevent);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_ESLevent__SWIG_2(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","ESLevent", 1, argv[0] ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (ESLevent *)new ESLevent(arg1);DATA_PTR(self) = result;
+
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE _wrap_new_ESLevent(int nargs, VALUE *args, VALUE self) {
+ int argc;
+ VALUE argv[2];
+ int ii;
+
+ argc = nargs;
+ if (argc > 2) SWIG_fail;
+ for (ii = 0; (ii < argc); ++ii) {
+ argv[ii] = args[ii];
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_esl_event_t, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_1(nargs, args, self);
+ }
+ {
+ int res = SWIG_AsVal_int(argv[1], NULL);
+ _v = SWIG_CheckState(res);
+ }
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_1(nargs, args, self);
+ }
+ }
+ }
+ if (argc == 1) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_ESLevent, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_2(nargs, args, self);
+ }
+ }
+ if ((argc >= 1) && (argc <= 2)) {
+ int _v;
+ int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ if (argc <= 1) {
+ return _wrap_new_ESLevent__SWIG_0(nargs, args, self);
+ }
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLevent__SWIG_0(nargs, args, self);
+ }
+ }
+ }
+
+fail:
+ Ruby_Format_OverloadedError( argc, 2, "ESLevent.new",
+ " ESLevent.new(char const *type, char const *subclass_name)\n"
+ " ESLevent.new(esl_event_t *wrap_me, int free_me)\n"
+ " ESLevent.new(ESLevent *me)\n");
+
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_ESLevent(ESLevent *arg1) {
+ delete arg1;
+}
+
+SWIGINTERN VALUE
+_wrap_ESLevent_serialize(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) NULL ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","serialize", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (argc > 0) {
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","serialize", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ }
+ result = (char *)(arg1)->serialize((char const *)arg2);
+ vresult = SWIG_FromCharPtr((const char *)result);
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_setPriority(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ esl_priority_t arg2 = (esl_priority_t) ESL_PRIORITY_NORMAL ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 ;
+ int res2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","setPriority", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ if (argc > 0) {
+ {
+ res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_esl_priority_t, 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "esl_priority_t","setPriority", 2, argv[0] ));
+ }
+ if (!argp2) {
+ SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "esl_priority_t","setPriority", 2, argv[0]));
+ } else {
+ arg2 = *(reinterpret_cast< esl_priority_t * >(argp2));
+ }
+ }
+ }
+ result = (bool)(arg1)->setPriority(arg2);
+ vresult = SWIG_From_bool(static_cast< bool >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_getHeader(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","getHeader", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","getHeader", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (char *)(arg1)->getHeader((char const *)arg2);
+ vresult = SWIG_FromCharPtr((const char *)result);
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_getBody(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","getBody", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getBody();
+ vresult = SWIG_FromCharPtr((const char *)result);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_getType(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","getType", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->getType();
+ vresult = SWIG_FromCharPtr((const char *)result);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_addBody(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","addBody", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","addBody", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->addBody((char const *)arg2);
+ vresult = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_addHeader(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","addHeader", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","addHeader", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","addHeader", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3);
+ vresult = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_delHeader(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *arg2 = (char *) 0 ;
+ bool result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","delHeader", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","delHeader", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (bool)(arg1)->delHeader((char const *)arg2);
+ vresult = SWIG_From_bool(static_cast< bool >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_firstHeader(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","firstHeader", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->firstHeader();
+ vresult = SWIG_FromCharPtr((const char *)result);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLevent_nextHeader(int argc, VALUE *argv, VALUE self) {
+ ESLevent *arg1 = (ESLevent *) 0 ;
+ char *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","nextHeader", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLevent * >(argp1);
+ result = (char *)(arg1)->nextHeader();
+ vresult = SWIG_FromCharPtr((const char *)result);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+swig_class cESLconnection;
+
+SWIGINTERN VALUE
+_wrap_new_ESLconnection__SWIG_0(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLconnection *result = 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+
+ if ((argc < 3) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","ESLconnection", 1, argv[0] ));
+ }
+ arg1 = reinterpret_cast< char * >(buf1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ESLconnection", 2, argv[1] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","ESLconnection", 3, argv[2] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLconnection *)new ESLconnection((char const *)arg1,(char const *)arg2,(char const *)arg3);DATA_PTR(self) = result;
+
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return self;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_ESLconnection_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_ESLconnection_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_ESLconnection);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_ESLconnection__SWIG_1(int argc, VALUE *argv, VALUE self) {
+ int arg1 ;
+ ESLconnection *result = 0 ;
+ int val1 ;
+ int ecode1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","ESLconnection", 1, argv[0] ));
+ }
+ arg1 = static_cast< int >(val1);
+ result = (ESLconnection *)new ESLconnection(arg1);DATA_PTR(self) = result;
+
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE _wrap_new_ESLconnection(int nargs, VALUE *args, VALUE self) {
+ int argc;
+ VALUE argv[3];
+ int ii;
+
+ argc = nargs;
+ if (argc > 3) SWIG_fail;
+ for (ii = 0; (ii < argc); ++ii) {
+ argv[ii] = args[ii];
+ }
+ if (argc == 1) {
+ int _v;
+ {
+ int res = SWIG_AsVal_int(argv[0], NULL);
+ _v = SWIG_CheckState(res);
+ }
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_1(nargs, args, self);
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_new_ESLconnection__SWIG_0(nargs, args, self);
+ }
+ }
+ }
+ }
+
+fail:
+ Ruby_Format_OverloadedError( argc, 3, "ESLconnection.new",
+ " ESLconnection.new(char const *host, char const *port, char const *password)\n"
+ " ESLconnection.new(int socket)\n");
+
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_ESLconnection(ESLconnection *arg1) {
+ delete arg1;
+}
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_socketDescriptor(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","socketDescriptor", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->socketDescriptor();
+ vresult = SWIG_From_int(static_cast< int >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_connected(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","connected", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->connected();
+ vresult = SWIG_From_int(static_cast< int >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_getInfo(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","getInfo", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->getInfo();
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_send(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","send", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","send", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->send((char const *)arg2);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_sendRecv(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","sendRecv", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","sendRecv", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (ESLevent *)(arg1)->sendRecv((char const *)arg2);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_api(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","api", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","api", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (argc > 1) {
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","api", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->api((char const *)arg2,(char const *)arg3);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_bgapi(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","bgapi", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","bgapi", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (argc > 1) {
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","bgapi", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ result = (ESLevent *)(arg1)->bgapi((char const *)arg2,(char const *)arg3);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_sendEvent(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *arg2 = (ESLevent *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","sendEvent", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_ESLevent, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "ESLevent *","sendEvent", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< ESLevent * >(argp2);
+ result = (int)(arg1)->sendEvent(arg2);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_recvEvent(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","recvEvent", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (ESLevent *)(arg1)->recvEvent();
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_recvEventTimed(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int arg2 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","recvEventTimed", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","recvEventTimed", 2, argv[0] ));
+ }
+ arg2 = static_cast< int >(val2);
+ result = (ESLevent *)(arg1)->recvEventTimed(arg2);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_filter(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ ESLevent *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","filter", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","filter", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","filter", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (ESLevent *)(arg1)->filter((char const *)arg2,(char const *)arg3);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ESLevent, SWIG_POINTER_OWN | 0 );
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_events(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","events", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","events", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","events", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ result = (int)(arg1)->events((char const *)arg2,(char const *)arg3);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_execute(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","execute", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","execute", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (argc > 1) {
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","execute", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (argc > 2) {
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","execute", 4, argv[2] ));
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->execute((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_executeAsync(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) NULL ;
+ char *arg4 = (char *) NULL ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","executeAsync", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","executeAsync", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ if (argc > 1) {
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","executeAsync", 3, argv[1] ));
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ }
+ if (argc > 2) {
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","executeAsync", 4, argv[2] ));
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ }
+ result = (int)(arg1)->executeAsync((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_setAsyncExecute(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","setAsyncExecute", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","setAsyncExecute", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setAsyncExecute((char const *)arg2);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_setEventLock(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","setEventLock", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","setEventLock", 2, argv[0] ));
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ result = (int)(arg1)->setEventLock((char const *)arg2);
+ vresult = SWIG_From_int(static_cast< int >(result));
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_ESLconnection_disconnect(int argc, VALUE *argv, VALUE self) {
+ ESLconnection *arg1 = (ESLconnection *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLconnection, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLconnection *","disconnect", 1, self ));
+ }
+ arg1 = reinterpret_cast< ESLconnection * >(argp1);
+ result = (int)(arg1)->disconnect();
+ vresult = SWIG_From_int(static_cast< int >(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_eslSetLogLevel(int argc, VALUE *argv, VALUE self) {
+ int arg1 ;
+ int val1 ;
+ int ecode1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","eslSetLogLevel", 1, argv[0] ));
+ }
+ arg1 = static_cast< int >(val1);
+ eslSetLogLevel(arg1);
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_ESLconnection = {"_p_ESLconnection", "ESLconnection *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESLevent = {"_p_ESLevent", "ESLevent *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_event_t = {"_p_esl_event_t", "esl_event_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_esl_priority_t = {"_p_esl_priority_t", "esl_priority_t *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_ESLconnection,
+ &_swigt__p_ESLevent,
+ &_swigt__p_char,
+ &_swigt__p_esl_event_t,
+ &_swigt__p_esl_priority_t,
+};
+
+static swig_cast_info _swigc__p_ESLconnection[] = { {&_swigt__p_ESLconnection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESLevent[] = { {&_swigt__p_ESLevent, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_event_t[] = { {&_swigt__p_esl_event_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_esl_priority_t[] = { {&_swigt__p_esl_priority_t, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_ESLconnection,
+ _swigc__p_ESLevent,
+ _swigc__p_char,
+ _swigc__p_esl_event_t,
+ _swigc__p_esl_priority_t,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ * 1) If the cast->type has already been loaded AND the type we are adding
+ * casting info to has not been loaded (it is in this module), THEN we
+ * replace the cast->type pointer with the type pointer that has already
+ * been loaded.
+ * 2) If BOTH types (the one we are adding casting info to, and the
+ * cast->type) are loaded, THEN the cast info has already been loaded by
+ * the previous module so we just ignore it.
+ * 3) Finally, if cast->type has not already been loaded, then we add that
+ * swig_cast_info to the linked list (because the cast->type) pointer will
+ * be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+ size_t i;
+ swig_module_info *module_head, *iter;
+ int found, init;
+
+ clientdata = clientdata;
+
+ /* check to see if the circular list has been setup, if not, set it up */
+ if (swig_module.next==0) {
+ /* Initialize the swig_module */
+ swig_module.type_initial = swig_type_initial;
+ swig_module.cast_initial = swig_cast_initial;
+ swig_module.next = &swig_module;
+ init = 1;
+ } else {
+ init = 0;
+ }
+
+ /* Try and load any already created modules */
+ module_head = SWIG_GetModule(clientdata);
+ if (!module_head) {
+ /* This is the first module loaded for this interpreter */
+ /* so set the swig module into the interpreter */
+ SWIG_SetModule(clientdata, &swig_module);
+ module_head = &swig_module;
+ } else {
+ /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+ found=0;
+ iter=module_head;
+ do {
+ if (iter==&swig_module) {
+ found=1;
+ break;
+ }
+ iter=iter->next;
+ } while (iter!= module_head);
+
+ /* if the is found in the list, then all is done and we may leave */
+ if (found) return;
+ /* otherwise we must add out module into the list */
+ swig_module.next = module_head->next;
+ module_head->next = &swig_module;
+ }
+
+ /* When multiple interpeters are used, a module could have already been initialized in
+ a different interpreter, but not yet have a pointer in this interpreter.
+ In this case, we do not want to continue adding types... everything should be
+ set up already */
+ if (init == 0) return;
+
+ /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+ for (i = 0; i < swig_module.size; ++i) {
+ swig_type_info *type = 0;
+ swig_type_info *ret;
+ swig_cast_info *cast;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+
+ /* if there is another module already loaded */
+ if (swig_module.next != &swig_module) {
+ type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+ }
+ if (type) {
+ /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+ if (swig_module.type_initial[i]->clientdata) {
+ type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+ }
+ } else {
+ type = swig_module.type_initial[i];
+ }
+
+ /* Insert casting types */
+ cast = swig_module.cast_initial[i];
+ while (cast->type) {
+
+ /* Don't need to add information already in the list */
+ ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+ if (swig_module.next != &swig_module) {
+ ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+ }
+ if (ret) {
+ if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+ cast->type = ret;
+ ret = 0;
+ } else {
+ /* Check for casting already in the list */
+ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+ if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+ if (!ocast) ret = 0;
+ }
+ }
+
+ if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+ printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+ if (type->cast) {
+ type->cast->prev = cast;
+ cast->next = type->cast;
+ }
+ type->cast = cast;
+ }
+ cast++;
+ }
+ /* Set entry in modules->types array equal to the type */
+ swig_module.types[i] = type;
+ }
+ swig_module.types[i] = 0;
+
+#ifdef SWIGRUNTIME_DEBUG
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+ for (i = 0; i < swig_module.size; ++i) {
+ int j = 0;
+ swig_cast_info *cast = swig_module.cast_initial[i];
+ printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+ while (cast->type) {
+ printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+ cast++;
+ ++j;
+ }
+ printf("---- Total casts: %d\n",j);
+ }
+ printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types. It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+ size_t i;
+ swig_cast_info *equiv;
+ static int init_run = 0;
+
+ if (init_run) return;
+ init_run = 1;
+
+ for (i = 0; i < swig_module.size; i++) {
+ if (swig_module.types[i]->clientdata) {
+ equiv = swig_module.types[i]->cast;
+ while (equiv) {
+ if (!equiv->converter) {
+ if (equiv->type && !equiv->type->clientdata)
+ SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+ }
+ equiv = equiv->next;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+#if 0
+{ /* c-mode */
+#endif
+}
+#endif
+
+/*
+
+*/
+#ifdef __cplusplus
+extern "C"
+#endif
+SWIGEXPORT void Init_ESL(void) {
+ size_t i;
+
+ SWIG_InitRuntime();
+ mESL = rb_define_module("ESL");
+
+ SWIG_InitializeModule(0);
+ for (i = 0; i < swig_module.size; i++) {
+ SWIG_define_class(swig_module.types[i]);
+ }
+
+ SWIG_RubyInitializeTrackings();
+
+ cESLevent.klass = rb_define_class_under(mESL, "ESLevent", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_ESLevent, (void *) &cESLevent);
+ rb_define_alloc_func(cESLevent.klass, _wrap_ESLevent_allocate);
+ rb_define_method(cESLevent.klass, "initialize", VALUEFUNC(_wrap_new_ESLevent), -1);
+ rb_define_method(cESLevent.klass, "event=", VALUEFUNC(_wrap_ESLevent_event_set), -1);
+ rb_define_method(cESLevent.klass, "event", VALUEFUNC(_wrap_ESLevent_event_get), -1);
+ rb_define_method(cESLevent.klass, "serialized_string=", VALUEFUNC(_wrap_ESLevent_serialized_string_set), -1);
+ rb_define_method(cESLevent.klass, "serialized_string", VALUEFUNC(_wrap_ESLevent_serialized_string_get), -1);
+ rb_define_method(cESLevent.klass, "mine=", VALUEFUNC(_wrap_ESLevent_mine_set), -1);
+ rb_define_method(cESLevent.klass, "mine", VALUEFUNC(_wrap_ESLevent_mine_get), -1);
+ rb_define_method(cESLevent.klass, "serialize", VALUEFUNC(_wrap_ESLevent_serialize), -1);
+ rb_define_method(cESLevent.klass, "setPriority", VALUEFUNC(_wrap_ESLevent_setPriority), -1);
+ rb_define_method(cESLevent.klass, "getHeader", VALUEFUNC(_wrap_ESLevent_getHeader), -1);
+ rb_define_method(cESLevent.klass, "getBody", VALUEFUNC(_wrap_ESLevent_getBody), -1);
+ rb_define_method(cESLevent.klass, "getType", VALUEFUNC(_wrap_ESLevent_getType), -1);
+ rb_define_method(cESLevent.klass, "addBody", VALUEFUNC(_wrap_ESLevent_addBody), -1);
+ rb_define_method(cESLevent.klass, "addHeader", VALUEFUNC(_wrap_ESLevent_addHeader), -1);
+ rb_define_method(cESLevent.klass, "delHeader", VALUEFUNC(_wrap_ESLevent_delHeader), -1);
+ rb_define_method(cESLevent.klass, "firstHeader", VALUEFUNC(_wrap_ESLevent_firstHeader), -1);
+ rb_define_method(cESLevent.klass, "nextHeader", VALUEFUNC(_wrap_ESLevent_nextHeader), -1);
+ cESLevent.mark = 0;
+ cESLevent.destroy = (void (*)(void *)) free_ESLevent;
+ cESLevent.trackObjects = 0;
+
+ cESLconnection.klass = rb_define_class_under(mESL, "ESLconnection", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_ESLconnection, (void *) &cESLconnection);
+ rb_define_alloc_func(cESLconnection.klass, _wrap_ESLconnection_allocate);
+ rb_define_method(cESLconnection.klass, "initialize", VALUEFUNC(_wrap_new_ESLconnection), -1);
+ rb_define_method(cESLconnection.klass, "socketDescriptor", VALUEFUNC(_wrap_ESLconnection_socketDescriptor), -1);
+ rb_define_method(cESLconnection.klass, "connected", VALUEFUNC(_wrap_ESLconnection_connected), -1);
+ rb_define_method(cESLconnection.klass, "getInfo", VALUEFUNC(_wrap_ESLconnection_getInfo), -1);
+ rb_define_method(cESLconnection.klass, "send", VALUEFUNC(_wrap_ESLconnection_send), -1);
+ rb_define_method(cESLconnection.klass, "sendRecv", VALUEFUNC(_wrap_ESLconnection_sendRecv), -1);
+ rb_define_method(cESLconnection.klass, "api", VALUEFUNC(_wrap_ESLconnection_api), -1);
+ rb_define_method(cESLconnection.klass, "bgapi", VALUEFUNC(_wrap_ESLconnection_bgapi), -1);
+ rb_define_method(cESLconnection.klass, "sendEvent", VALUEFUNC(_wrap_ESLconnection_sendEvent), -1);
+ rb_define_method(cESLconnection.klass, "recvEvent", VALUEFUNC(_wrap_ESLconnection_recvEvent), -1);
+ rb_define_method(cESLconnection.klass, "recvEventTimed", VALUEFUNC(_wrap_ESLconnection_recvEventTimed), -1);
+ rb_define_method(cESLconnection.klass, "filter", VALUEFUNC(_wrap_ESLconnection_filter), -1);
+ rb_define_method(cESLconnection.klass, "events", VALUEFUNC(_wrap_ESLconnection_events), -1);
+ rb_define_method(cESLconnection.klass, "execute", VALUEFUNC(_wrap_ESLconnection_execute), -1);
+ rb_define_method(cESLconnection.klass, "executeAsync", VALUEFUNC(_wrap_ESLconnection_executeAsync), -1);
+ rb_define_method(cESLconnection.klass, "setAsyncExecute", VALUEFUNC(_wrap_ESLconnection_setAsyncExecute), -1);
+ rb_define_method(cESLconnection.klass, "setEventLock", VALUEFUNC(_wrap_ESLconnection_setEventLock), -1);
+ rb_define_method(cESLconnection.klass, "disconnect", VALUEFUNC(_wrap_ESLconnection_disconnect), -1);
+ cESLconnection.mark = 0;
+ cESLconnection.destroy = (void (*)(void *)) free_ESLconnection;
+ cESLconnection.trackObjects = 0;
+ rb_define_module_function(mESL, "eslSetLogLevel", VALUEFUNC(_wrap_eslSetLogLevel), -1);
+}
+
Deleted: freeswitch/branches/seven/libs/esl/ruby/server3.rb
Copied: freeswitch/branches/seven/libs/esl/ruby/server3.rb (from rev 14471, freeswitch/trunk/libs/esl/ruby/server3.rb) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ruby/server3.rb (rev 0)
+++ freeswitch/branches/seven/libs/esl/ruby/server3.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,66 @@
+#!/usr/bin/ruby
+
+# Simple Ruby ESL example that forks a new process for every connection.
+# Called like this: <action application="socket" data="localhost:8086 async full"/>
+#
+# Try pressing 5, 8 or 9 when the file is played and see what happens
+#
+# Contributed by Mikael Bjerkeland
+
+require "ESL"
+require 'socket'
+include Socket::Constants
+bind_address = "127.0.0.1"
+bind_port = 8086
+
+def time_now
+ Time.now.strftime("%Y-%m-%d %H:%M:%S")
+end
+
+socket = Socket.new(AF_INET, SOCK_STREAM, 0)
+sockaddr = Socket.sockaddr_in(bind_port, bind_address)
+socket.bind(sockaddr)
+socket.listen(5)
+puts "Listening for connections on #{bind_address}:#{bind_port}"
+loop do
+ client_socket, client_sockaddr = socket.accept #_nonblock
+ pid = fork do
+ @con = ESL::ESLconnection.new(client_socket.fileno)
+ info = @con.getInfo
+ uuid = info.getHeader("UNIQUE-ID")
+ @con.sendRecv("myevents")
+ @con.sendRecv("divert_events on")
+
+ puts "#{time_now} [#{uuid}] Call to [#{info.getHeader("Caller-Destination-Number")}]"
+ @con.execute("log", "1, Wee-wa-wee-wa")
+ @con.execute("info", "")
+ @con.execute("answer", "")
+ @con.execute("playback", "/usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav")
+
+ while @con.connected
+ e = @con.recvEvent
+
+ if e
+ name = e.getHeader("Event-Name")
+ puts "EVENT: #{name}"
+ break if name == "SERVER_DISCONNECTED"
+ if name == "DTMF"
+ digit = e.getHeader("DTMF-DIGIT")
+ duration = e.getHeader("DTMF-DURATION")
+ puts "DTMF DIGIT #{digit} (#{duration})"
+ if digit == "5"
+ @con.execute("log", "1, WHA HA HA. User pressed 5")
+ elsif digit == "8"
+ # TODO: close connection without hangup in order to proceed in dialplan. How?
+ elsif digit == "9"
+ @con.execute("transfer", "99355151")
+ end
+ end
+
+ end
+ end
+ puts "Connection closed"
+ end
+
+ Process.detach(pid)
+end
Deleted: freeswitch/branches/seven/libs/esl/ruby/single_command.rb
Copied: freeswitch/branches/seven/libs/esl/ruby/single_command.rb (from rev 14471, freeswitch/trunk/libs/esl/ruby/single_command.rb) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/ruby/single_command.rb (rev 0)
+++ freeswitch/branches/seven/libs/esl/ruby/single_command.rb 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,8 @@
+#! /usr/bin/ruby
+
+require "ESL"
+
+command = ARGV.join(" ")
+con = ESL::ESLconnection.new("localhost", "8021", "ClueCon")
+e = con.sendRecv("api #{command}")
+puts e.getBody()
Property changes: freeswitch/branches/seven/libs/esl/src
Name: svn:ignore
- Debug
*.user
Release
+ Debug
*.user
Release
x64
Modified: freeswitch/branches/seven/libs/esl/src/esl.2008.vcproj (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/esl.2008.vcproj 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/esl.2008.vcproj 2009-08-09 18:53:22 UTC (rev 14472)
@@ -12,6 +12,9 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -82,6 +85,72 @@
/>
</Configuration>
<Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_DECLARE_STATIC"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="false"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4706;4100"
+ EnablePREfast="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)Release"
IntermediateDirectory="$(ConfigurationName)"
@@ -144,6 +213,70 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_DECLARE_STATIC"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="false"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4706;4100"
+ EnablePREfast="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
Modified: freeswitch/branches/seven/libs/esl/src/esl.c (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/esl.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/esl.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -380,9 +380,9 @@
static void sock_setup(esl_handle_t *handle)
{
-#ifdef WIN32
- BOOL bOptVal = TRUE;
- int bOptLen = sizeof(BOOL);
+#ifdef WIN32
+ BOOL bOptVal = TRUE;
+ int bOptLen = sizeof(BOOL);
setsockopt(handle->sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&bOptVal, bOptLen);
#else
int x = 1;
@@ -390,10 +390,12 @@
#endif
}
-ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr)
+ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in *addr)
{
handle->sock = socket;
- handle->addr = addr;
+ if (addr) {
+ handle->addr = *addr;
+ }
if (handle->sock == ESL_SOCK_INVALID) {
return ESL_FAIL;
@@ -425,16 +427,19 @@
ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event)
{
char *txt;
+ char event_buf[256] = "";
- if (!handle->connected) {
+ if (!handle->connected || !event) {
return ESL_FAIL;
}
- esl_event_serialize(handle->last_ievent, &txt, ESL_TRUE);
+ esl_event_serialize(event, &txt, ESL_FALSE);
esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt);
- send(handle->sock, "sendevent\n", 10, 0);
+ snprintf(event_buf, sizeof(event_buf), "sendevent %s\n", esl_event_name(event->event_id));
+
+ send(handle->sock, event_buf, strlen(event_buf), 0);
send(handle->sock, txt, strlen(txt), 0);
send(handle->sock, "\n\n", 2, 0);
@@ -448,6 +453,8 @@
char cmd_buf[128] = "sendmsg";
char app_buf[512] = "";
char arg_buf[512] = "";
+ const char *el_buf = "event-lock: true\n";
+ const char *bl_buf = "async: true\n";
char send_buf[1292] = "";
if (!handle->connected) {
@@ -466,7 +473,8 @@
snprintf(arg_buf, sizeof(arg_buf), "execute-app-arg: %s\n", arg);
}
- snprintf(send_buf, sizeof(send_buf), "%s\ncall-command: execute\n%s%s\n", cmd_buf, app_buf, arg_buf);
+ snprintf(send_buf, sizeof(send_buf), "%s\ncall-command: execute\n%s%s%s%s\n",
+ cmd_buf, app_buf, arg_buf, handle->event_lock ? el_buf : "", handle->async_execute ? bl_buf : "");
return esl_send_recv(handle, send_buf);
}
@@ -557,8 +565,8 @@
status = ESL_FAIL;
goto end;
}
-
- callback(server_sock, client_sock, echoClntAddr);
+
+ callback(server_sock, client_sock, &echoClntAddr);
}
end:
@@ -638,7 +646,7 @@
hval = esl_event_get_header(handle->last_event, "content-type");
- if (strcasecmp(hval, "auth/request")) {
+ if (esl_safe_strcasecmp(hval, "auth/request")) {
snprintf(handle->err, sizeof(handle->err), "Connection Error");
goto fail;
}
@@ -648,15 +656,15 @@
if (esl_recv(handle)) {
- snprintf(handle->err, sizeof(handle->err), "Connection Error");
+ snprintf(handle->err, sizeof(handle->err), "Authentication Error");
goto fail;
}
hval = esl_event_get_header(handle->last_event, "reply-text");
- if (strcasecmp(hval, "+OK accepted")) {
- snprintf(handle->err, sizeof(handle->err), "Connection Error");
+ if (esl_safe_strcasecmp(hval, "+OK accepted")) {
+ snprintf(handle->err, sizeof(handle->err), "Authentication Error");
goto fail;
}
@@ -678,6 +686,7 @@
esl_mutex_lock(mutex);
}
+ esl_event_safe_destroy(&handle->race_event);
esl_event_safe_destroy(&handle->last_event);
esl_event_safe_destroy(&handle->last_sr_event);
esl_event_safe_destroy(&handle->last_ievent);
@@ -700,20 +709,29 @@
return status;
}
-ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event)
+ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, int check_q, esl_event_t **save_event)
{
fd_set rfds, efds;
struct timeval tv = { 0 };
int max, activity;
esl_status_t status = ESL_SUCCESS;
- if (!handle->connected) {
+ if (check_q) {
+ esl_mutex_lock(handle->mutex);
+ if (handle->race_event) {
+ esl_mutex_unlock(handle->mutex);
+ return esl_recv_event(handle, check_q, save_event);
+ }
+ esl_mutex_unlock(handle->mutex);
+ }
+
+ if (!handle || !handle->connected || handle->sock == -1) {
return ESL_FAIL;
}
tv.tv_usec = ms * 1000;
- esl_mutex_lock(handle->mutex);
+
FD_ZERO(&rfds);
FD_ZERO(&efds);
@@ -731,21 +749,21 @@
max = handle->sock + 1;
if ((activity = select(max, &rfds, NULL, &efds, &tv)) < 0) {
- status = ESL_FAIL;
- goto done;
+ return ESL_FAIL;
}
+ if (esl_mutex_trylock(handle->mutex) != ESL_SUCCESS) {
+ return ESL_BREAK;
+ }
+
if (activity && FD_ISSET(handle->sock, &rfds)) {
- if (esl_recv_event(handle, save_event)) {
+ if (esl_recv_event(handle, check_q, save_event)) {
status = ESL_FAIL;
- goto done;
}
} else {
status = ESL_BREAK;
}
- done:
-
if (handle->mutex) esl_mutex_unlock(handle->mutex);
return status;
@@ -753,27 +771,43 @@
}
-ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event)
+ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_event_t **save_event)
{
char *c;
esl_ssize_t rrval;
int crc = 0;
- esl_event_t *revent = NULL;
+ esl_event_t *revent = NULL, *qevent = NULL;
char *beg;
char *hname, *hval;
char *col;
char *cl;
esl_ssize_t len;
int zc = 0;
-
if (!handle->connected) {
return ESL_FAIL;
}
-
+
esl_mutex_lock(handle->mutex);
+ esl_event_safe_destroy(&handle->last_event);
+ esl_event_safe_destroy(&handle->last_ievent);
+
+ if (check_q && handle->race_event) {
+ qevent = handle->race_event;
+ handle->race_event = handle->race_event->next;
+ qevent->next = NULL;
- esl_event_safe_destroy(&handle->last_event);
+ if (save_event) {
+ *save_event = qevent;
+ qevent = NULL;
+ } else {
+ handle->last_event = qevent;
+ }
+
+ esl_mutex_unlock(handle->mutex);
+ return ESL_SUCCESS;
+ }
+
memset(handle->header_buf, 0, sizeof(handle->header_buf));
c = handle->header_buf;
@@ -781,12 +815,11 @@
while(handle->connected) {
rrval = recv(handle->sock, c, 1, 0);
-
if (rrval == 0) {
if (++zc >= 100) {
esl_disconnect(handle);
esl_mutex_unlock(handle->mutex);
- return ESL_FAIL;
+ return ESL_DISCONNECTED;
}
} else if (rrval < 0) {
strerror_r(handle->errnum, handle->err, sizeof(handle->err));
@@ -830,7 +863,7 @@
c++;
}
}
-
+
if (!revent) {
goto fail;
}
@@ -858,6 +891,7 @@
if (save_event) {
*save_event = revent;
+ revent = NULL;
} else {
handle->last_event = revent;
}
@@ -871,21 +905,14 @@
hval = esl_event_get_header(revent, "content-type");
- if (!esl_strlen_zero(hval) && !strcasecmp(hval, "text/event-plain") && revent->body) {
- const char *en;
+ if (!esl_safe_strcasecmp(hval, "text/disconnect-notice") && revent->body) {
+ goto fail;
+ }
+
+ if (!esl_safe_strcasecmp(hval, "text/event-plain") && revent->body) {
esl_event_types_t et = ESL_EVENT_COMMAND;
char *body = strdup(revent->body);
- esl_event_safe_destroy(&handle->last_ievent);
-
- if ((en = esl_stristr("event-name:", body))) {
- en++;
- while(*en == ' ') en++;
- if (en) {
- esl_name_event(en, &et);
- }
- }
-
esl_event_create(&handle->last_ievent, et);
beg = body;
@@ -909,35 +936,27 @@
if (hname && hval) {
esl_url_decode(hval);
esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval);
+ if (!strcasecmp(hname, "event-name")) {
+ esl_event_del_header(handle->last_ievent, "event-name");
+ }
esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval);
+ esl_name_event(hval, &handle->last_ievent->event_id);
}
beg = c + 1;
+
+ if (*beg == '\n') {
+ beg++;
+ break;
+ }
}
-
- free(body);
-
+
if ((cl = esl_event_get_header(handle->last_ievent, "content-length"))) {
- esl_ssize_t sofar = 0;
-
- len = atol(cl);
- body = malloc(len+1);
- esl_assert(body);
- *(body + len) = '\0';
-
- do {
- esl_ssize_t r;
- if ((r = recv(handle->sock, body + sofar, len - sofar, 0)) < 0) {
- strerror_r(handle->errnum, handle->err, sizeof(handle->err));
- goto fail;
- }
- sofar += r;
- } while (sofar < len);
-
- handle->last_ievent->body = body;
+ handle->last_ievent->body = strdup(beg);
}
+
+ free(body);
-
if (esl_log_level >= 7) {
char *foo;
esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE);
@@ -1001,20 +1020,51 @@
return ESL_FAIL;
}
+
esl_mutex_lock(handle->mutex);
+ esl_event_safe_destroy(&handle->last_event);
+ esl_event_safe_destroy(&handle->last_sr_event);
+
+ *handle->last_sr_reply = '\0';
+
if ((status = esl_send(handle, cmd))) {
+ esl_mutex_unlock(handle->mutex);
return status;
}
- status = esl_recv_event(handle, &handle->last_sr_event);
-
+ recv:
+
+ status = esl_recv_event(handle, 0, &handle->last_sr_event);
+
if (handle->last_sr_event) {
- hval = esl_event_get_header(handle->last_sr_event, "reply-text");
+ char *ct = esl_event_get_header(handle->last_sr_event,"content-type");
- if (!esl_strlen_zero(hval)) {
- strncpy(handle->last_sr_reply, hval, sizeof(handle->last_sr_reply));
+ if (strcasecmp(ct, "api/response") && strcasecmp(ct, "command/reply")) {
+ esl_event_t *ep;
+
+ for(ep = handle->race_event; ep && ep->next; ep = ep->next);
+
+ if (ep) {
+ ep->next = handle->last_sr_event;
+ } else {
+ handle->race_event = handle->last_sr_event;
+ }
+
+ handle->last_sr_event = NULL;
+
+ esl_mutex_unlock(handle->mutex);
+ esl_mutex_lock(handle->mutex);
+ goto recv;
}
+
+ if (handle->last_sr_event) {
+ hval = esl_event_get_header(handle->last_sr_event, "reply-text");
+
+ if (!esl_strlen_zero(hval)) {
+ strncpy(handle->last_sr_reply, hval, sizeof(handle->last_sr_reply));
+ }
+ }
}
esl_mutex_unlock(handle->mutex);
Modified: freeswitch/branches/seven/libs/esl/src/esl_event.c (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/esl_event.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/esl_event.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -59,11 +59,13 @@
*/
static const char *EVENT_NAMES[] = {
"CUSTOM",
+ "CLONE",
"CHANNEL_CREATE",
"CHANNEL_DESTROY",
"CHANNEL_STATE",
"CHANNEL_ANSWER",
"CHANNEL_HANGUP",
+ "CHANNEL_HANGUP_COMPLETE",
"CHANNEL_EXECUTE",
"CHANNEL_EXECUTE_COMPLETE",
"CHANNEL_BRIDGE",
@@ -118,6 +120,12 @@
"GENERAL",
"COMMAND",
"SESSION_HEARTBEAT",
+ "CLIENT_DISCONNECTED",
+ "SERVER_DISCONNECTED",
+ "SEND_INFO",
+ "RECV_INFO",
+ "CALL_SECURE",
+ "NAT",
"ALL"
};
@@ -145,7 +153,7 @@
{
*event = NULL;
- if (event_id != ESL_EVENT_CUSTOM && subclass_name) {
+ if ((event_id != ESL_EVENT_CLONE && event_id != ESL_EVENT_CUSTOM) && subclass_name) {
return ESL_FAIL;
}
@@ -155,12 +163,15 @@
memset(*event, 0, sizeof(esl_event_t));
- (*event)->event_id = event_id;
+ if (event_id != ESL_EVENT_CLONE) {
+ (*event)->event_id = event_id;
+ esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Name", esl_event_name((*event)->event_id));
+ }
if (subclass_name) {
(*event)->subclass_name = DUP(subclass_name);
esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Subclass", subclass_name);
- }
+ }
return ESL_SUCCESS;
}
@@ -361,22 +372,25 @@
ESL_DECLARE(void) esl_event_destroy(esl_event_t **event)
{
- esl_event_t *ep = *event;
- esl_event_header_t *hp, *this;
+ esl_event_t *ep = *event, *this_event;
+ esl_event_header_t *hp, *this_header;
- if (ep) {
- for (hp = ep->headers; hp;) {
- this = hp;
+ for (ep = *event ; ep ;) {
+ this_event = ep;
+ ep = ep->next;
+
+ for (hp = this_event->headers; hp;) {
+ this_header = hp;
hp = hp->next;
- FREE(this->name);
- FREE(this->value);
- memset(this, 0, sizeof(*this));
- FREE(this);
+ FREE(this_header->name);
+ FREE(this_header->value);
+ memset(this_header, 0, sizeof(*this_header));
+ FREE(this_header);
}
- FREE(ep->body);
- FREE(ep->subclass_name);
- memset(ep, 0, sizeof(*ep));
- FREE(ep);
+ FREE(this_event->body);
+ FREE(this_event->subclass_name);
+ memset(this_event, 0, sizeof(*this_event));
+ FREE(this_event);
}
*event = NULL;
}
@@ -385,36 +399,19 @@
ESL_DECLARE(esl_status_t) esl_event_dup(esl_event_t **event, esl_event_t *todup)
{
- esl_event_header_t *header, *hp, *hp2, *last = NULL;
+ esl_event_header_t *hp;
- if (esl_event_create_subclass(event, todup->event_id, todup->subclass_name) != ESL_SUCCESS) {
+ if (esl_event_create_subclass(event, ESL_EVENT_CLONE, todup->subclass_name) != ESL_SUCCESS) {
return ESL_FAIL;
}
- if (todup->subclass_name) {
- (*event)->subclass_name = DUP(todup->subclass_name);
- }
+ (*event)->event_id = todup->event_id;
+
(*event)->event_user_data = todup->event_user_data;
(*event)->bind_user_data = todup->bind_user_data;
- hp2 = (*event)->headers;
-
for (hp = todup->headers; hp; hp = hp->next) {
- header = ALLOC(sizeof(*header));
- esl_assert(header);
-
- memset(header, 0, sizeof(*header));
-
- header->name = DUP(hp->name);
- header->value = DUP(hp->value);
-
- if (last) {
- last->next = header;
- } else {
- (*event)->headers = header;
- }
-
- (*event)->last_header = last = header;
+ esl_event_add_header_string(*event, ESL_STACK_BOTTOM, hp->name, hp->value);
}
if (todup->body) {
@@ -483,7 +480,7 @@
if (encode) {
esl_url_encode(hp->value, encode_buf, encode_len);
} else {
- esl_snprintf(encode_buf, encode_len, "[%s]", hp->value);
+ esl_snprintf(encode_buf, encode_len, "%s", hp->value);
}
llen = strlen(hp->name) + strlen(encode_buf) + 8;
@@ -530,7 +527,7 @@
}
if (blen) {
- snprintf(buf + len, dlen - len, "\n%s", event->body);
+ snprintf(buf + len, dlen - len, "Content-Length: %d\n\n%s", (int)strlen(event->body), event->body);
} else {
snprintf(buf + len, dlen - len, "\n");
}
Copied: freeswitch/branches/seven/libs/esl/src/esl_oop.cpp (from rev 14471, freeswitch/trunk/libs/esl/src/esl_oop.cpp) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/src/esl_oop.cpp (rev 0)
+++ freeswitch/branches/seven/libs/esl/src/esl_oop.cpp 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,424 @@
+#include <esl.h>
+#include <esl_oop.h>
+
+#define connection_construct_common() memset(&handle, 0, sizeof(handle))
+#define event_construct_common() event = NULL; serialized_string = NULL; mine = 0; hp = NULL
+
+void eslSetLogLevel(int level)
+{
+ esl_global_set_default_logger(level);
+}
+
+ESLconnection::ESLconnection(const char *host, const char *port, const char *password)
+{
+ connection_construct_common();
+ int x_port = atoi(port);
+
+ esl_connect(&handle, host, x_port, password);
+}
+
+
+ESLconnection::ESLconnection(int socket)
+{
+ connection_construct_common();
+ esl_attach_handle(&handle, (esl_socket_t)socket, NULL);
+}
+
+ESLconnection::~ESLconnection()
+{
+ if (handle.connected) {
+ esl_disconnect(&handle);
+ }
+
+}
+
+int ESLconnection::socketDescriptor()
+{
+ if (handle.connected) {
+ return (int) handle.sock;
+ }
+
+ return -1;
+}
+
+
+int ESLconnection::disconnect()
+{
+ if (handle.connected) {
+ return esl_disconnect(&handle);
+ }
+
+ return 0;
+}
+
+int ESLconnection::connected()
+{
+ return handle.connected;
+}
+
+int ESLconnection::send(const char *cmd)
+{
+ return esl_send(&handle, cmd);
+}
+
+ESLevent *ESLconnection::sendRecv(const char *cmd)
+{
+ if (esl_send_recv(&handle, cmd) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle.last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+}
+
+ESLevent *ESLconnection::api(const char *cmd, const char *arg)
+{
+ size_t len;
+ char *cmd_buf;
+
+ if (!cmd) {
+ return NULL;
+ }
+
+ len = strlen(cmd) + (arg ? strlen(arg) : 0) + 10;
+
+ cmd_buf = (char *) malloc(len + 1);
+ assert(cmd_buf);
+
+ snprintf(cmd_buf, len, "api %s %s", cmd, arg ? arg : "");
+ *(cmd_buf + (len)) = '\0';
+
+
+ if (esl_send_recv(&handle, cmd_buf) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle.last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ free(cmd_buf);
+
+ return NULL;
+}
+
+ESLevent *ESLconnection::bgapi(const char *cmd, const char *arg)
+{
+ size_t len;
+ char *cmd_buf;
+
+ if (!cmd) {
+ return NULL;
+ }
+
+ len = strlen(cmd) + (arg ? strlen(arg) : 0) + 10;
+
+ cmd_buf = (char *) malloc(len + 1);
+ assert(cmd_buf);
+
+ snprintf(cmd_buf, len, "bgapi %s %s", cmd, arg ? arg : "");
+ *(cmd_buf + (len)) = '\0';
+
+ if (esl_send_recv(&handle, cmd_buf) == ESL_SUCCESS) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle.last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ free(cmd_buf);
+
+ return NULL;
+}
+
+ESLevent *ESLconnection::getInfo()
+{
+ if (handle.connected && handle.info_event) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle.info_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+}
+
+int ESLconnection::setAsyncExecute(const char *val)
+{
+ if (val) {
+ handle.async_execute = esl_true(val);
+ }
+ return handle.async_execute;
+}
+
+int ESLconnection::setEventLock(const char *val)
+{
+ if (val) {
+ handle.event_lock = esl_true(val);
+ }
+ return handle.event_lock;
+}
+
+int ESLconnection::execute(const char *app, const char *arg, const char *uuid)
+{
+ return esl_execute(&handle, app, arg, uuid);
+}
+
+
+int ESLconnection::executeAsync(const char *app, const char *arg, const char *uuid)
+{
+ int async = handle.async_execute;
+ int r;
+
+ handle.async_execute = 1;
+ r = esl_execute(&handle, app, arg, uuid);
+ handle.async_execute = async;
+
+ return r;
+}
+
+int ESLconnection::sendEvent(ESLevent *send_me)
+{
+ return esl_sendevent(&handle, send_me->event);
+}
+
+ESLevent *ESLconnection::recvEvent()
+{
+ if (esl_recv_event(&handle, 1, NULL) == ESL_SUCCESS) {
+ esl_event_t *e = handle.last_ievent ? handle.last_ievent : handle.last_event;
+ if (e) {
+ esl_event_t *event;
+ esl_event_dup(&event, e);
+ return new ESLevent(event, 1);
+ }
+ }
+
+ return new ESLevent("server_disconnected");
+}
+
+ESLevent *ESLconnection::recvEventTimed(int ms)
+{
+
+ if (esl_recv_event_timed(&handle, ms, 1, NULL) == ESL_SUCCESS) {
+ esl_event_t *e = handle.last_ievent ? handle.last_ievent : handle.last_event;
+ if (e) {
+ esl_event_t *event;
+ esl_event_dup(&event, e);
+ return new ESLevent(event, 1);
+ }
+ }
+
+ return NULL;
+}
+
+ESLevent *ESLconnection::filter(const char *header, const char *value)
+{
+ esl_status_t status = esl_filter(&handle, header, value);
+
+ if (status == ESL_SUCCESS && handle.last_sr_event) {
+ esl_event_t *event;
+ esl_event_dup(&event, handle.last_sr_event);
+ return new ESLevent(event, 1);
+ }
+
+ return NULL;
+
+}
+
+int ESLconnection::events(const char *etype, const char *value)
+{
+ esl_event_type_t type_id = ESL_EVENT_TYPE_PLAIN;
+
+ if (!strcmp(etype, "xml")) {
+ type_id = ESL_EVENT_TYPE_XML;
+ }
+
+ return esl_events(&handle, type_id, value);
+}
+
+// ESLevent
+///////////////////////////////////////////////////////////////////////
+
+ESLevent::ESLevent(const char *type, const char *subclass_name)
+{
+ esl_event_types_t event_id;
+
+ event_construct_common();
+
+ if (esl_name_event(type, &event_id) != ESL_SUCCESS) {
+ event_id = ESL_EVENT_MESSAGE;
+ }
+
+ if (!esl_strlen_zero(subclass_name) && event_id != ESL_EVENT_CUSTOM) {
+ esl_log(ESL_LOG_WARNING, "Changing event type to custom because you specified a subclass name!\n");
+ event_id = ESL_EVENT_CUSTOM;
+ }
+
+ if (esl_event_create_subclass(&event, event_id, subclass_name) != ESL_SUCCESS) {
+ esl_log(ESL_LOG_ERROR, "Failed to create event!\n");
+ event = NULL;
+ }
+
+ serialized_string = NULL;
+ mine = 1;
+}
+
+ESLevent::ESLevent(esl_event_t *wrap_me, int free_me)
+{
+ event_construct_common();
+ event = wrap_me;
+ mine = free_me;
+ serialized_string = NULL;
+}
+
+
+ESLevent::ESLevent(ESLevent *me)
+{
+ /* workaround for silly php thing */
+ event = me->event;
+ mine = me->mine;
+ serialized_string = NULL;
+ me->event = NULL;
+ me->mine = 0;
+ esl_safe_free(me->serialized_string);
+}
+
+ESLevent::~ESLevent()
+{
+
+ if (serialized_string) {
+ free(serialized_string);
+ }
+
+ if (event && mine) {
+ esl_event_destroy(&event);
+ }
+}
+
+const char *ESLevent::nextHeader(void)
+{
+ const char *name = NULL;
+
+ if (hp) {
+ name = hp->name;
+ hp = hp->next;
+ }
+
+ return name;
+}
+
+const char *ESLevent::firstHeader(void)
+{
+ if (event) {
+ hp = event->headers;
+ }
+
+ return nextHeader();
+}
+
+const char *ESLevent::serialize(const char *format)
+{
+ this_check("");
+
+ esl_safe_free(serialized_string);
+
+ if (!event) {
+ return "";
+ }
+
+ if (esl_event_serialize(event, &serialized_string, ESL_TRUE) == ESL_SUCCESS) {
+ return serialized_string;
+ }
+
+ return "";
+
+}
+
+bool ESLevent::setPriority(esl_priority_t priority)
+{
+ this_check(false);
+
+ if (event) {
+ esl_event_set_priority(event, priority);
+ return true;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to setPriority an event that does not exist!\n");
+ }
+ return false;
+}
+
+const char *ESLevent::getHeader(const char *header_name)
+{
+ this_check("");
+
+ if (event) {
+ return esl_event_get_header(event, header_name);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getHeader an event that does not exist!\n");
+ }
+ return NULL;
+}
+
+bool ESLevent::addHeader(const char *header_name, const char *value)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_add_header_string(event, ESL_STACK_BOTTOM, header_name, value) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to addHeader an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+bool ESLevent::delHeader(const char *header_name)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_del_header(event, header_name) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to delHeader an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+
+bool ESLevent::addBody(const char *value)
+{
+ this_check(false);
+
+ if (event) {
+ return esl_event_add_body(event, "%s", value) == ESL_SUCCESS ? true : false;
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to addBody an event that does not exist!\n");
+ }
+
+ return false;
+}
+
+char *ESLevent::getBody(void)
+{
+
+ this_check((char *)"");
+
+ if (event) {
+ return esl_event_get_body(event);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getBody an event that does not exist!\n");
+ }
+
+ return NULL;
+}
+
+const char *ESLevent::getType(void)
+{
+ this_check("");
+
+ if (event) {
+ return esl_event_name(event->event_id);
+ } else {
+ esl_log(ESL_LOG_ERROR, "Trying to getType an event that does not exist!\n");
+ }
+
+ return (char *) "invalid";
+}
Modified: freeswitch/branches/seven/libs/esl/src/include/esl.h (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/include/esl.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/include/esl.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -36,9 +36,9 @@
#include <stdarg.h>
-#ifdef _cplusplus
+#ifdef __cplusplus
extern "C" {
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
#define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1)
#define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x))
@@ -174,6 +174,8 @@
#include <stdlib.h>
#include <string.h>
#ifndef WIN32
+#include <sys/types.h>
+#include <sys/select.h>
#include <netinet/tcp.h>
#include <sys/signal.h>
#include <unistd.h>
@@ -248,7 +250,8 @@
typedef enum {
ESL_SUCCESS,
ESL_FAIL,
- ESL_BREAK
+ ESL_BREAK,
+ ESL_DISCONNECTED
} esl_status_t;
#include <esl_threadmutex.h>
@@ -265,11 +268,14 @@
char last_sr_reply[1024];
esl_event_t *last_event;
esl_event_t *last_sr_event;
+ esl_event_t *race_event;
esl_event_t *last_ievent;
esl_event_t *info_event;
int connected;
struct sockaddr_in addr;
esl_mutex_t *mutex;
+ int async_execute;
+ int event_lock;
} esl_handle_t;
typedef enum {
@@ -321,9 +327,9 @@
ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...);
-typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr);
+typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr);
-ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr);
+ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in *addr);
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback);
ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid);
ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event);
@@ -331,21 +337,29 @@
ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password);
ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle);
ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd);
-ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event);
-ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event);
+ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_event_t **save_event);
+ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, int check_q, esl_event_t **save_event);
ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd);
ESL_DECLARE(esl_status_t) esl_filter(esl_handle_t *handle, const char *header, const char *value);
ESL_DECLARE(esl_status_t) esl_events(esl_handle_t *handle, esl_event_type_t etype, const char *value);
-#define esl_recv(_h) esl_recv_event(_h, NULL)
-#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL)
+#define esl_recv(_h) esl_recv_event(_h, 0, NULL)
+#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, 0, NULL)
+static __inline__ int esl_safe_strcasecmp(const char *s1, const char *s2)
+{
+ if (!(s1 && s2)) {
+ return 1;
+ }
-#ifdef _cplusplus
+ return strcasecmp(s1, s2);
}
-#endif /* defined(_cplusplus) */
+#ifdef __cplusplus
+}
+#endif /* defined(__cplusplus) */
+
#endif /* defined(_ESL_H_) */
/* For Emacs:
Modified: freeswitch/branches/seven/libs/esl/src/include/esl_config.h (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/include/esl_config.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/include/esl_config.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -54,9 +54,9 @@
#include "esl.h"
-#ifdef _cplusplus
+#ifdef __cplusplus
extern "C" {
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
#define ESL_URL_SEPARATOR "://"
@@ -160,9 +160,9 @@
/** @} */
-#ifdef _cplusplus
+#ifdef __cplusplus
}
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
#endif /* defined(ESL_CONFIG_H) */
Modified: freeswitch/branches/seven/libs/esl/src/include/esl_event.h (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/include/esl_event.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/include/esl_event.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -36,9 +36,9 @@
#include <esl.h>
-#ifdef _cplusplus
+#ifdef __cplusplus
extern "C" {
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
typedef enum {
ESL_STACK_BOTTOM,
@@ -47,11 +47,13 @@
typedef enum {
ESL_EVENT_CUSTOM,
+ ESL_EVENT_CLONE,
ESL_EVENT_CHANNEL_CREATE,
ESL_EVENT_CHANNEL_DESTROY,
ESL_EVENT_CHANNEL_STATE,
ESL_EVENT_CHANNEL_ANSWER,
ESL_EVENT_CHANNEL_HANGUP,
+ ESL_EVENT_CHANNEL_HANGUP_COMPLETE,
ESL_EVENT_CHANNEL_EXECUTE,
ESL_EVENT_CHANNEL_EXECUTE_COMPLETE,
ESL_EVENT_CHANNEL_BRIDGE,
@@ -106,6 +108,12 @@
ESL_EVENT_GENERAL,
ESL_EVENT_COMMAND,
ESL_EVENT_SESSION_HEARTBEAT,
+ ESL_EVENT_CLIENT_DISCONNECTED,
+ ESL_EVENT_SERVER_DISCONNECTED,
+ ESL_EVENT_SEND_INFO,
+ ESL_EVENT_RECV_INFO,
+ ESL_EVENT_CALL_SECURE,
+ ESL_EVENT_NAT,
ESL_EVENT_ALL
} esl_event_types_t;
@@ -272,9 +280,9 @@
///\}
-#ifdef _cplusplus
+#ifdef __cplusplus
}
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
#endif /* defined(ESL_EVENT_H) */
Copied: freeswitch/branches/seven/libs/esl/src/include/esl_oop.h (from rev 14471, freeswitch/trunk/libs/esl/src/include/esl_oop.h) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/src/include/esl_oop.h (rev 0)
+++ freeswitch/branches/seven/libs/esl/src/include/esl_oop.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2007, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _ESL_OOP_H_
+#define _ESL_OOP_H_
+#include <esl.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define this_check(x) do { if (!this) { esl_log(ESL_LOG_ERROR, "object is not initalized\n"); return x;}} while(0)
+#define this_check_void() do { if (!this) { esl_log(ESL_LOG_ERROR, "object is not initalized\n"); return;}} while(0)
+
+
+class ESLevent {
+ private:
+ esl_event_header_t *hp;
+ public:
+ esl_event_t *event;
+ char *serialized_string;
+ int mine;
+
+ ESLevent(const char *type, const char *subclass_name = NULL);
+ ESLevent(esl_event_t *wrap_me, int free_me = 0);
+ ESLevent(ESLevent *me);
+ virtual ~ESLevent();
+ const char *serialize(const char *format = NULL);
+ bool setPriority(esl_priority_t priority = ESL_PRIORITY_NORMAL);
+ const char *getHeader(const char *header_name);
+ char *getBody(void);
+ const char *getType(void);
+ bool addBody(const char *value);
+ bool addHeader(const char *header_name, const char *value);
+ bool delHeader(const char *header_name);
+ const char *firstHeader(void);
+ const char *nextHeader(void);
+};
+
+
+
+class ESLconnection {
+ private:
+ esl_handle_t handle;
+ public:
+ ESLconnection(const char *host, const char *port, const char *password);
+ ESLconnection(int socket);
+ virtual ~ESLconnection();
+ int socketDescriptor();
+ int connected();
+ ESLevent *getInfo();
+ int send(const char *cmd);
+ ESLevent *sendRecv(const char *cmd);
+ ESLevent *api(const char *cmd, const char *arg = NULL);
+ ESLevent *bgapi(const char *cmd, const char *arg = NULL);
+ int sendEvent(ESLevent *send_me);
+ ESLevent *recvEvent();
+ ESLevent *recvEventTimed(int ms);
+ ESLevent *filter(const char *header, const char *value);
+ int events(const char *etype, const char *value);
+ int execute(const char *app, const char *arg = NULL, const char *uuid = NULL);
+ int executeAsync(const char *app, const char *arg = NULL, const char *uuid = NULL);
+ int setAsyncExecute(const char *val);
+ int setEventLock(const char *val);
+ int disconnect(void);
+};
+
+void eslSetLogLevel(int level);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Modified: freeswitch/branches/seven/libs/esl/src/include/esl_threadmutex.h (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/src/include/esl_threadmutex.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/src/include/esl_threadmutex.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -23,9 +23,9 @@
#include "esl.h"
-#ifdef _cplusplus
+#ifdef __cplusplus
extern "C" {
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
typedef struct esl_mutex esl_mutex_t;
typedef struct esl_thread esl_thread_t;
@@ -40,9 +40,9 @@
ESL_DECLARE(esl_status_t) esl_mutex_trylock(esl_mutex_t *mutex);
ESL_DECLARE(esl_status_t) esl_mutex_unlock(esl_mutex_t *mutex);
-#ifdef _cplusplus
+#ifdef __cplusplus
}
-#endif /* defined(_cplusplus) */
+#endif /* defined(__cplusplus) */
#endif /* defined(_ESL_THREADMUTEX_H) */
Copied: freeswitch/branches/seven/libs/esl/test.pl (from rev 14471, freeswitch/trunk/libs/esl/test.pl) (0 => 14472)
--- freeswitch/branches/seven/libs/esl/test.pl (rev 0)
+++ freeswitch/branches/seven/libs/esl/test.pl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+require ESL;
+use Data::Dumper;
+
+my $fd = fileno(STDIN);
+my $con = new ESL::ESLconnection($fd);
+my $info = $con->getInfo();
+
+select STDERR;
+
+print $info->serialize();
+
+my $uuid = $info->getHeader("unique-id");
+
+$con->execute("answer", "", $uuid);
+$con->execute("playback", "/ram/swimp.raw", $uuid);
+
+
+$con->disconnect();
+
+
Modified: freeswitch/branches/seven/libs/esl/testserver.c (14471 => 14472)
--- freeswitch/branches/seven/libs/esl/testserver.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/esl/testserver.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -2,7 +2,7 @@
#include <stdlib.h>
#include <esl.h>
-static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr)
+static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr)
{
esl_handle_t handle = {{0}};
int done = 0;
Property changes: freeswitch/branches/seven/libs/iksemel
Name: svn:ignore
- Makefile.in
configure
config.log
.complete
iksemel.pc
Makefile
config.status
libtool
autom4te.cache
aclocal.m4
+ Makefile.in
configure
config.log
.complete
iksemel.pc
Makefile
config.status
libtool
autom4te.cache
aclocal.m4
depcomp
compile
config.guess
config.sub
missing
install-sh
configure.lineno
Modified: freeswitch/branches/seven/libs/iksemel/.update (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/.update 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/.update 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1 +0,0 @@
-Fri Mar 16 17:15:40 EDT 2007
Modified: freeswitch/branches/seven/libs/iksemel/ChangeLog (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/ChangeLog 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/ChangeLog 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,32 @@
+2007-08-02 Gurer
+ * tst-iks.c: test for new append/prepend functions added.
+
+2007-08-01 Gurer
+ * Patch from Benjamin Bennett:
+ base64.c: fix padding
+ * sha.c: 64bit fix (long -> int)
+ * iks.c: new funcs: iks_append, iks_prepend
+ iks_append_cdata, iks_prepend_cdata
+ * stream.c: iks_sasl_challenge split into smaller functions
+ This change also fixes some possible leaks which are detected
+ by Coverity Inc's excellent Prevent product.
+
+2006-05-19 Gurer
+ * dom.c: fixed (size % FILE_IO_BUFFER_SIZE) problem in iks_load()
+
+2005-08-29 Gurer
+ * Patch from Jakob Schroter:
+ iksemel.texi: small documentation update
+ * Patch from Darrell Karbott:
+ sax.c: use fixed instead of floating point (for arm)
+ mark static const data properly
+ explicit char* uchar* casts
+
+2004-08-14 Gurer
+ * version bump to 1.3
+ * patch from Roland Hedberg
+ io-posix.c: io_connect now tries all addrinfo values.
+
2004-08-05 Gurer
* iksemel.h: ikstransport cosmetic cleanup.
* iksemel.texi: mingw notice added.
Modified: freeswitch/branches/seven/libs/iksemel/INSTALL (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/INSTALL 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/INSTALL 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,27 +1,43 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
Basic Installation
==================
- These are generic installation instructions.
+These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
The simplest way to compile this package is:
@@ -54,20 +70,22 @@
Compilers and Options
=====================
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
-Or on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
Compiling For Multiple Architectures
====================================
- You can compile the package for more than one kind of computer at the
+You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
@@ -75,28 +93,28 @@
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
- If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
+ If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory. After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
Installation Names
==================
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
+options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
@@ -107,7 +125,7 @@
Optional Features
=================
- Some packages pay attention to `--enable-FEATURE' options to
+Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@@ -122,48 +140,86 @@
Specifying the System Type
==========================
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
CPU-COMPANY-SYSTEM
-See the file `config.sub' for the possible values of each field. If
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
+need to know the machine type.
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
Sharing Defaults
================
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
-Operation Controls
+Defining Variables
==================
- `configure' recognizes the following options to control how it
-operates.
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
+ ./configure CC=/usr/local2/bin/gcc
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script). Here is a another example:
+
+ /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
`--help'
+`-h'
Print a summary of the options to `configure', and exit.
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
`--quiet'
`--silent'
`-q'
@@ -175,8 +231,6 @@
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
-`configure' also accepts some other, not widely useful, options.
Modified: freeswitch/branches/seven/libs/iksemel/NEWS (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/NEWS 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/NEWS 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,3 +1,22 @@
+V1.3 (2007-08-02)
+* Project is moved to
+ http://code.google.com/p/iksemel/
+ there is also a new mailing list at:
+ http://groups.google.com/group/iksemel
+ Please use those instead of old jabberstudio.org addresses.
+* iksemel is now participating in Coverity Inc's free software
+ quality improvement program (http://scan.coverity.com). As a
+ first result, a few problems found by Coverity's static analysis
+ tool in the iks_sasl_challenge() are fixed in this release, and
+ other than that, iksemel passes from defect test with no problems.
+* Extra padding problem in the base64 encoder is fixed. Some servers
+ were having problems with extra '=' padded SASL digests.
+* New dom functions: iks_append(), iks_prepend(), iks_append_cdata(),
+ iks_prepend_cdata(). You can append/prepend new nodes within the
+ siblings with them, insert_ functions were only appending at the
+ last child. Thus editing a tree is much easier now.
+* iks_load was giving error on files with multiply of 4Kb sizes, fixed.
+
V1.2 (2004-08-06)
* SASL authentication.
* SSH connections via gnutls library.
Modified: freeswitch/branches/seven/libs/iksemel/README (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/README 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,5 +1,5 @@
- iksemel 1.2
+ iksemel 1.3
Copyright (c) 2000-2004 Gurer Ozen <madcat@e-kolay.net>
Property changes: freeswitch/branches/seven/libs/iksemel/build
Name: svn:ignore
- depcomp
compile
missing
config.guess
ltmain.sh
config.sub
install-sh
+ depcomp
compile
missing
config.guess
ltmain.sh
config.sub
install-sh
texinfo.tex
Modified: freeswitch/branches/seven/libs/iksemel/build/libgnutls.m4 (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/build/libgnutls.m4 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/build/libgnutls.m4 2009-08-09 18:53:22 UTC (rev 14472)
@@ -31,7 +31,7 @@
no_libgnutls=yes
else
LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags`
- LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs`
+ LIBGNUTLS_LIBS="`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs` -lpthread"
libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version`
Deleted: freeswitch/branches/seven/libs/iksemel/build/texinfo.tex
Modified: freeswitch/branches/seven/libs/iksemel/configure.ac (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/configure.ac 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/configure.ac 2009-08-09 18:53:22 UTC (rev 14472)
@@ -3,7 +3,7 @@
AC_PREREQ(2.50)
AC_CONFIG_AUX_DIR(build)
AC_CONFIG_SRCDIR([configure.ac])
-AM_INIT_AUTOMAKE(iksemel,1.2)
+AM_INIT_AUTOMAKE(iksemel,1.3)
AC_CONFIG_HEADERS(include/config.h)
AC_CANONICAL_HOST
Modified: freeswitch/branches/seven/libs/iksemel/doc/Makefile.am (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/doc/Makefile.am 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/doc/Makefile.am 2009-08-09 18:53:22 UTC (rev 14472)
@@ -2,4 +2,4 @@
## Process this file with automake to produce Makefile.in
##
-info_TEXINFOS = iksemel.texi
+#info_TEXINFOS = iksemel.texi
Deleted: freeswitch/branches/seven/libs/iksemel/doc/iksemel
Modified: freeswitch/branches/seven/libs/iksemel/doc/iksemel.texi (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/doc/iksemel.texi 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/doc/iksemel.texi 2009-08-09 18:53:22 UTC (rev 14472)
@@ -594,28 +594,30 @@
@deftypefun char* iks_name (iks* @var{x});
Returns the name of the tag for nodes with the type @var{IKS_TAG}.
+Returns an attribute's name for nodes of type IKS_ATTRIBUTE.
@end deftypefun
@deftypefun char* iks_cdata (iks* @var{x});
Returns a pointer to node's character data if available, NULL otherwise.
+Returns an attribute's value for nodes of type IKS_ATTRIBUTE.
@end deftypefun
-@deftypefun size_t iks_cdata_size (iks* @var{x});
+@deftypefun size_t iks_cdata_size (iks *@var{x});
Returns the size of the node's character data in bytes.
@end deftypefun
-@deftypefun int iks_has_children (iks* @var{x});
+@deftypefun int iks_has_children (iks *@var{x});
Returns a non-zero value if node @var{x} has a child node.
@end deftypefun
-@deftypefun int iks_has_attribs (iks* @var{x});
+@deftypefun int iks_has_attribs (iks *@var{x});
Returns a non-zero value if node @var{x} has attributes.
@end deftypefun
Last group of the functions simplifies finding and accessing the content
of a specific node:
-@deftypefun iks* iks_find (iks* @var{x}, const char* @var{name});
+@deftypefun iks* iks_find (iks *@var{x}, const char *@var{name});
Searches a IKS_TAG type of node with @var{name} as tag name in child
nodes of @var{x}. Returns a pointer to the node if found, NULL otherwise.
@end deftypefun
Modified: freeswitch/branches/seven/libs/iksemel/include/iksemel.h (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/include/iksemel.h 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/include/iksemel.h 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,5 +1,5 @@
/* iksemel (XML parser for Jabber)
-** Copyright (C) 2000-2004 Gurer Ozen <madcat@e-kolay.net>
+** Copyright (C) 2000-2007 Gurer Ozen <madcat@e-kolay.net>
** This code is free software; you can redistribute it and/or
** modify it under the terms of GNU Lesser General Public License.
*/
@@ -26,7 +26,6 @@
void iks_stack_stat (ikstack *s, size_t *allocated, size_t *used);
void iks_stack_delete (ikstack **sp);
-
/***** utilities *****/
void *iks_malloc (size_t size);
@@ -63,6 +62,10 @@
iks *iks_insert_cdata (iks *x, const char *data, size_t len);
iks *iks_insert_attrib (iks *x, const char *name, const char *value);
iks *iks_insert_node (iks *x, iks *y);
+iks *iks_append (iks *x, const char *name);
+iks *iks_prepend (iks *x, const char *name);
+iks *iks_append_cdata (iks *x, const char *data, size_t len);
+iks *iks_prepend_cdata (iks *x, const char *data, size_t len);
void iks_hide (iks *x);
void iks_delete (iks *x);
iks *iks_next (iks *x);
Modified: freeswitch/branches/seven/libs/iksemel/ltmain.sh (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/ltmain.sh 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/ltmain.sh 2009-08-09 18:53:22 UTC (rev 14472)
@@ -46,10 +46,16 @@
VERSION=1.5.22
TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes.
-if test -n "${ZSH_VERSION+set}" ; then
+# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
# Check that we have a working $echo.
@@ -105,12 +111,14 @@
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
+for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ fi"
+done
# Make sure IFS has a sensible default
lt_nl='
@@ -136,6 +144,8 @@
preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
#####################################
# Shell function definitions:
@@ -327,7 +337,17 @@
*) my_xabs=`pwd`"/$my_xlib" ;;
esac
my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
- my_xdir="$my_gentop/$my_xlib"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ extracted_serial=`expr $extracted_serial + 1`
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
$show "${rm}r $my_xdir"
$run ${rm}r "$my_xdir"
@@ -758,6 +778,7 @@
*.f90) xform=f90 ;;
*.for) xform=for ;;
*.java) xform=java ;;
+ *.obj) xform=obj ;;
esac
libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
@@ -1138,8 +1159,9 @@
for arg
do
case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
$echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
fi
@@ -1147,12 +1169,20 @@
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=yes
- else
+ ;;
+ -static)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=built
- fi
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
build_libtool_libs=no
build_old_libs=yes
break
@@ -1712,7 +1742,7 @@
continue
;;
- -static)
+ -static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
@@ -2490,7 +2520,9 @@
if test "$linkmode,$pass" = "prog,link"; then
if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
# We need to hardcode the library path
if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
# Make sure the rpath contains only unique directories.
@@ -3186,7 +3218,7 @@
# which has an extra 1 added just for fun
#
case $version_type in
- darwin|linux|osf|windows)
+ darwin|linux|osf|windows|none)
current=`expr $number_major + $number_minor`
age="$number_minor"
revision="$number_revision"
@@ -3410,11 +3442,11 @@
fi
# Eliminate all temporary directories.
- for path in $notinst_path; do
- lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
- deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
- dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
- done
+# for path in $notinst_path; do
+# lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
+# deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
+# dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+# done
if test -n "$xrpath"; then
# If the user specified any rpath flags, then add them.
@@ -3515,13 +3547,12 @@
int main() { return 0; }
EOF
$rm conftest
- $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
- if test "$?" -eq 0 ; then
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
ldd_output=`ldd conftest`
for i in $deplibs; do
name=`expr $i : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" -ne "0"; then
+ if test "$name" != "" && test "$name" != "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
@@ -3560,9 +3591,7 @@
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" != "0"; then
$rm conftest
- $LTCC $LTCFLAGS -o conftest conftest.c $i
- # Did it work?
- if test "$?" -eq 0 ; then
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
ldd_output=`ldd conftest`
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
@@ -3594,7 +3623,7 @@
droppeddeps=yes
$echo
$echo "*** Warning! Library $i is needed by this library but I was not able to"
- $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** make it link in! You will probably need to install it or some"
$echo "*** library that it depends on before this library will be fully"
$echo "*** functional. Installing it before continuing would be even better."
fi
@@ -4239,12 +4268,14 @@
reload_conv_objs=
gentop=
# reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
wl=
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
else
gentop="$output_objdir/${obj}x"
generated="$generated $gentop"
@@ -4692,16 +4723,16 @@
case $host in
*cygwin* | *mingw* )
if test -f "$output_objdir/${outputname}.def" ; then
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
else
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
fi
;;
* )
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
;;
esac
;;
@@ -4716,13 +4747,13 @@
# really was required.
# Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
fi
if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
# Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
link_command="$compile_command$compile_rpath"
# We have no uninstalled library dependencies, so finalize right now.
@@ -4809,7 +4840,7 @@
if test "$fast_install" != no; then
link_command="$finalize_var$compile_command$finalize_rpath"
if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
else
# fast_install is set to needless
relink_command=
@@ -4846,7 +4877,7 @@
fi
done
relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
fi
# Quote $echo for shipping.
@@ -5253,6 +5284,18 @@
Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'
+# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
@@ -5395,7 +5438,7 @@
;;
esac
$echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ \$echo \"\$0: cannot exec \$program \$*\"
exit $EXIT_FAILURE
fi
else
@@ -5581,7 +5624,7 @@
done
# Quote the link command for shipping.
relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
if test "$hardcode_automatic" = yes ; then
relink_command=
fi
@@ -5926,9 +5969,9 @@
if test -n "$inst_prefix_dir"; then
# Stick the inst_prefix_dir data into the link command.
- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
else
- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
fi
$echo "$modename: warning: relinking \`$file'" 1>&2
@@ -6137,7 +6180,7 @@
file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
outputname="$tmpdir/$file"
# Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+ relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
$show "$relink_command"
if $run eval "$relink_command"; then :
@@ -6413,13 +6456,16 @@
fi
# Restore saved environment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
+ for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
# Now prepare to actually exec the command.
exec_cmd="\$cmd$args"
else
@@ -6775,9 +6821,9 @@
-dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
+ try to export only the symbols listed in SYMFILE
-export-symbols-regex REGEX
- try to export only the symbols matching REGEX
+ try to export only the symbols matching REGEX
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
@@ -6791,9 +6837,11 @@
-release RELEASE specify package release information
-rpath LIBDIR the created library will eventually be installed in LIBDIR
-R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
-version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
+ specify library version info [each variable defaults to 0]
All other options (arguments beginning with \`-') are ignored.
Modified: freeswitch/branches/seven/libs/iksemel/src/Makefile.am (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/Makefile.am 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/Makefile.am 2009-08-09 18:53:22 UTC (rev 14472)
@@ -24,6 +24,6 @@
md5.c \
base64.c
-libiksemel_la_LDFLAGS = -version-info 3:0:0 -no-undefined
+libiksemel_la_LDFLAGS = -version-info 4:0:1 -no-undefined
libiksemel_la_CFLAGS = $(CFLAGS) $(LIBGNUTLS_CFLAGS)
libiksemel_la_LIBADD = $(LIBGNUTLS_LIBS)
Modified: freeswitch/branches/seven/libs/iksemel/src/base64.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/base64.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/base64.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -7,27 +7,30 @@
#include "common.h"
#include "iksemel.h"
-static char base64_charset[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char base64_charset[] =
+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char *iks_base64_decode(const char *buf)
{
- char *res, *save, *foo, val;
+ char *res, *save;
+ char val;
+ const char *foo;
const char *end;
int index;
+ size_t len;
if (!buf)
return NULL;
- index = iks_strlen(buf)*6 / 8 + 1;
- save = res = iks_malloc(index);
- memset(res, 0, index);
- index = 0;
+ len = iks_strlen(buf) * 6 / 8 + 1;
+ save = res = iks_malloc(len);
if (!save)
return NULL;
+ memset(res, 0, len);
+ index = 0;
end = buf + iks_strlen(buf);
while (*buf && buf < end) {
@@ -66,6 +69,7 @@
len = (len > 0) ? (len) : (iks_strlen(buf));
save = res = iks_malloc((len*8) / 6 + 4);
+ if (!save) return NULL;
for (k = 0; k < len/3; ++k) {
*res++ = base64_charset[*buf >> 2];
@@ -85,14 +89,15 @@
buf++;
*res++ = base64_charset[t | (*buf >> 4)];
*res++ = base64_charset[((*buf++ & 0x0F) << 2)];
+ *res++ = '=';
break;
case 1:
*res++ = base64_charset[*buf >> 2];
*res++ = base64_charset[(*buf++ & 0x03) << 4];
+ *res++ = '=';
+ *res++ = '=';
break;
}
- *res++ = '=';
- *res++ = '=';
*res = 0;
return save;
}
Modified: freeswitch/branches/seven/libs/iksemel/src/dom.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/dom.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/dom.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -37,6 +37,8 @@
}
if (IKS_CLOSE == type || IKS_SINGLE == type) {
x = iks_parent (data->current);
+ if (iks_strcmp(iks_name(data->current), name) != 0)
+ return IKS_BADXML;
if (x)
data->current = x;
else {
@@ -130,8 +132,9 @@
if (len < FILE_IO_BUF_SIZE) {
if (0 == feof (f)) {
ret = IKS_FILE_RWERR;
- len = 0;
+ break;
}
+ if (0 == len) ret = IKS_OK;
done = 1;
}
if (len > 0) {
Modified: freeswitch/branches/seven/libs/iksemel/src/iks.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/iks.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/iks.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,5 +1,5 @@
/* iksemel (XML parser for Jabber)
-** Copyright (C) 2000-2004 Gurer Ozen <madcat@e-kolay.net>
+** Copyright (C) 2000-2007 Gurer Ozen <madcat@e-kolay.net>
** This code is free software; you can redistribute it and/or
** modify it under the terms of GNU Lesser General Public License.
*/
@@ -183,6 +183,106 @@
return y;
}
+iks *
+iks_append (iks *x, const char *name)
+{
+ iks *y;
+
+ if (!x) return NULL;
+ y = iks_new_within (name, x->s);
+ if (!y) return NULL;
+
+ if (x->next) {
+ x->next->prev = y;
+ } else {
+ IKS_TAG_LAST_CHILD (x->parent) = y;
+ }
+ y->next = x->next;
+ x->next = y;
+ y->parent = x->parent;
+ y->prev = x;
+
+ return y;
+}
+
+iks *
+iks_prepend (iks *x, const char *name)
+{
+ iks *y;
+
+ if (!x) return NULL;
+ y = iks_new_within (name, x->s);
+ if (!y) return NULL;
+
+ if (x->prev) {
+ x->prev->next = y;
+ } else {
+ IKS_TAG_CHILDREN (x->parent) = y;
+ }
+ y->prev = x->prev;
+ x->prev = y;
+ y->parent = x->parent;
+ y->next = x;
+
+ return y;
+}
+
+iks *
+iks_append_cdata (iks *x, const char *data, size_t len)
+{
+ iks *y;
+
+ if (!x || !data) return NULL;
+ if (len == 0) len = strlen (data);
+
+ y = iks_new_within (NULL, x->s);
+ if (!y) return NULL;
+ y->type = IKS_CDATA;
+ IKS_CDATA_CDATA (y) = iks_stack_strdup (x->s, data, len);
+ if (!IKS_CDATA_CDATA (y)) return NULL;
+ IKS_CDATA_LEN (y) = len;
+
+ if (x->next) {
+ x->next->prev = y;
+ } else {
+ IKS_TAG_LAST_CHILD (x->parent) = y;
+ }
+ y->next = x->next;
+ x->next = y;
+ y->parent = x->parent;
+ y->prev = x;
+
+ return y;
+}
+
+iks *
+iks_prepend_cdata (iks *x, const char *data, size_t len)
+{
+ iks *y;
+
+ if (!x || !data) return NULL;
+ if (len == 0) len = strlen (data);
+
+ y = iks_new_within (NULL, x->s);
+ if (!y) return NULL;
+ y->type = IKS_CDATA;
+ IKS_CDATA_CDATA(y) = iks_stack_strdup (x->s, data, len);
+ if (!IKS_CDATA_CDATA (y)) return NULL;
+ IKS_CDATA_LEN (y) = len;
+
+ if (x->prev) {
+ x->prev->next = y;
+ } else {
+ IKS_TAG_CHILDREN (x->parent) = y;
+ }
+ y->prev = x->prev;
+ x->prev = y;
+ y->parent = x->parent;
+ y->next = x;
+
+ return y;
+}
+
void
iks_hide (iks *x)
{
@@ -379,7 +479,7 @@
iks_name (iks *x)
{
if (x) {
- if (IKS_TAG == x->type)
+ if (IKS_TAG == x->type)
return IKS_TAG_NAME (x);
else
return IKS_ATTRIB_NAME (x);
Modified: freeswitch/branches/seven/libs/iksemel/src/ikstack.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/ikstack.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/ikstack.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -192,10 +192,11 @@
}
s = *sp;
-
+
if (!s) {
return;
}
+
*sp = NULL;
c = s->meta->next;
while (c) {
@@ -210,5 +211,4 @@
c = tmp;
}
iks_free (s);
-
}
Modified: freeswitch/branches/seven/libs/iksemel/src/io-posix.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/io-posix.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/io-posix.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -36,6 +36,7 @@
struct addrinfo hints;
struct addrinfo *addr_res, *addr_ptr;
char port_str[6];
+ int err = 0;
hints.ai_flags = AI_CANONNAME;
hints.ai_family = PF_UNSPEC;
@@ -52,14 +53,20 @@
addr_ptr = addr_res;
while (addr_ptr) {
+ err = IKS_NET_NOSOCK;
sock = socket (addr_ptr->ai_family, addr_ptr->ai_socktype, addr_ptr->ai_protocol);
- if (sock != -1) break;
+ if (sock != -1) {
+ err = IKS_NET_NOCONN;
+ tmp = connect (sock, addr_ptr->ai_addr, addr_ptr->ai_addrlen);
+ if (tmp == 0) break;
+ io_close ((void *) sock);
+ sock = -1;
+ }
addr_ptr = addr_ptr->ai_next;
}
- if (sock == -1) return IKS_NET_NOSOCK;
+ freeaddrinfo (addr_res);
- tmp = connect (sock, addr_ptr->ai_addr, addr_ptr->ai_addrlen);
- freeaddrinfo (addr_res);
+ if (sock == -1) return err;
#else
struct hostent *host;
struct sockaddr_in sin;
@@ -74,11 +81,11 @@
if (sock == -1) return IKS_NET_NOSOCK;
tmp = connect (sock, (struct sockaddr *)&sin, sizeof (struct sockaddr_in));
-#endif
if (tmp != 0) {
io_close ((void *) sock);
return IKS_NET_NOCONN;
}
+#endif
*socketptr = (void *) sock;
@@ -101,6 +108,7 @@
fd_set fds;
struct timeval tv, *tvptr;
int len;
+ char *bound;
tv.tv_sec = 0;
tv.tv_usec = 0;
@@ -108,20 +116,22 @@
FD_ZERO (&fds);
FD_SET (sock, &fds);
tv.tv_sec = timeout;
+
if (timeout != -1) tvptr = &tv; else tvptr = NULL;
if (select (sock + 1, &fds, NULL, NULL, tvptr) > 0) {
len = recv (sock, buffer, buf_len, 0);
if (len > 0) {
char *p, *e = NULL, *t = NULL;
- *(buffer+buf_len+1) = '\0';
- for (p = buffer; p && *p; p++) {
+ bound = buffer + (len -1);
+
+ for (p = buffer; p < bound; p++) {
if (*p == '>') {
e = p;
t = p+1;
if (*t == '<') {
continue;
}
- while(t && *t) {
+ while(p < bound && t < bound) {
if (*t != ' ' && *t != '<') {
t = e = NULL;
break;
@@ -135,7 +145,6 @@
}
t++;
-
}
}
}
Modified: freeswitch/branches/seven/libs/iksemel/src/jabber.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/jabber.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/jabber.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -173,8 +173,8 @@
char buf[41];
iksha *sha;
sha = iks_sha_new ();
- iks_sha_hash (sha, sid, strlen (sid), 0);
- iks_sha_hash (sha, pass, strlen (pass), 1);
+ iks_sha_hash (sha, (const unsigned char*)sid, strlen (sid), 0);
+ iks_sha_hash (sha, (const unsigned char*)pass, strlen (pass), 1);
iks_sha_print (sha, buf);
iks_sha_delete (sha);
iks_insert_cdata (iks_insert (y, "digest"), buf, 40);
Modified: freeswitch/branches/seven/libs/iksemel/src/md5.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/md5.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/md5.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -43,7 +43,7 @@
unsigned char blen;
};
-static unsigned long int T[] =
+static const unsigned long int T[] =
{ 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
@@ -151,7 +151,7 @@
{
iksmd5 *md5 = iks_md5_new();
- iks_md5_hash(md5, data, strlen(data), 1);
+ iks_md5_hash(md5, (const unsigned char*)data, strlen(data), 1);
iks_md5_print(md5, buf);
iks_md5_delete(md5);
}
Modified: freeswitch/branches/seven/libs/iksemel/src/sax.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/sax.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/sax.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -149,7 +149,8 @@
if (need < prs->stack_max) {
need = prs->stack_max * 2;
} else {
- need = prs->stack_max + (need * 1.2);
+ /* need x 1.2 for integer only archs like ARM */
+ need = prs->stack_max + ( (need * 6) / 5);
}
tmp = iks_malloc (need);
if (!tmp) return 0;
Modified: freeswitch/branches/seven/libs/iksemel/src/sha.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/sha.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/sha.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -11,10 +11,10 @@
static void sha_calculate (iksha *sha);
struct iksha_struct {
- unsigned long hash[5];
- unsigned long buf[80];
+ unsigned int hash[5];
+ unsigned int buf[80];
int blen;
- unsigned long lenhi, lenlo;
+ unsigned int lenhi, lenlo;
};
iksha *
@@ -32,11 +32,11 @@
iks_sha_reset (iksha *sha)
{
memset (sha, 0, sizeof (iksha));
- sha->hash[0] = 0x67452301L;
- sha->hash[1] = 0xefcdab89L;
- sha->hash[2] = 0x98badcfeL;
- sha->hash[3] = 0x10325476L;
- sha->hash[4] = 0xc3d2e1f0L;
+ sha->hash[0] = 0x67452301;
+ sha->hash[1] = 0xefcdab89;
+ sha->hash[2] = 0x98badcfe;
+ sha->hash[3] = 0x10325476;
+ sha->hash[4] = 0xc3d2e1f0;
}
void
@@ -74,7 +74,7 @@
for (i=0; i<5; i++)
{
- sprintf (hash, "%08lx", sha->hash[i]);
+ sprintf (hash, "%08x", sha->hash[i]);
hash += 8;
}
}
@@ -91,7 +91,7 @@
iksha *sha;
sha = iks_sha_new ();
- iks_sha_hash (sha, data, strlen (data), 1);
+ iks_sha_hash (sha, (const unsigned char*)data, strlen (data), 1);
iks_sha_print (sha, hash);
iks_free (sha);
}
@@ -103,7 +103,7 @@
for (i=0; i<len; i++) {
sha->buf[sha->blen / 4] <<= 8;
- sha->buf[sha->blen / 4] |= (unsigned long)data[i];
+ sha->buf[sha->blen / 4] |= (unsigned int)data[i];
if ((++sha->blen) % 64 == 0) {
sha_calculate (sha);
sha->blen = 0;
@@ -128,7 +128,7 @@
sha_calculate (iksha *sha)
{
int i;
- unsigned long A, B, C, D, E, TMP;
+ unsigned int A, B, C, D, E, TMP;
for (i=16; i<80; i++)
sha->buf[i] = SRL (sha->buf[i-3] ^ sha->buf[i-8] ^ sha->buf[i-14] ^ sha->buf[i-16], 1);
@@ -139,10 +139,10 @@
D = sha->hash[3];
E = sha->hash[4];
- SHA (0, 19, ((C^D)&B)^D, 0x5a827999L);
- SHA (20, 39, B^C^D, 0x6ed9eba1L);
- SHA (40, 59, (B&C)|(D&(B|C)), 0x8f1bbcdcL);
- SHA (60, 79, B^C^D, 0xca62c1d6L);
+ SHA (0, 19, ((C^D)&B)^D, 0x5a827999);
+ SHA (20, 39, B^C^D, 0x6ed9eba1);
+ SHA (40, 59, (B&C)|(D&(B|C)), 0x8f1bbcdc);
+ SHA (60, 79, B^C^D, 0xca62c1d6);
sha->hash[0] += A;
sha->hash[1] += B;
Modified: freeswitch/branches/seven/libs/iksemel/src/stream.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/src/stream.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/src/stream.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -1,9 +1,17 @@
/* iksemel (XML parser for Jabber)
-** Copyright (C) 2000-2004 Gurer Ozen <madcat@e-kolay.net>
+** Copyright (C) 2000-2007 Gurer Ozen <madcat@e-kolay.net>
** This code is free software; you can redistribute it and/or
** modify it under the terms of GNU Lesser General Public License.
*/
+#include "config.h"
+#ifdef HAVE_GNUTLS
+#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
+#include <pthread.h>
+#endif
+
+
#include "common.h"
#include "iksemel.h"
@@ -37,13 +45,16 @@
};
#ifdef HAVE_GNUTLS
+#ifndef WIN32
+#include <gcrypt.h>
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+#endif
static size_t
tls_push (iksparser *prs, const char *buffer, size_t len)
{
struct stream_data *data = iks_user_data (prs);
int ret;
-
ret = data->trans->send (data->sock, buffer, len);
if (ret) return (size_t) -1;
return len;
@@ -54,7 +65,6 @@
{
struct stream_data *data = iks_user_data (prs);
int ret;
-
ret = data->trans->recv (data->sock, buffer, len, -1);
if (ret == -1) return (size_t) -1;
return ret;
@@ -70,6 +80,10 @@
const int mac_priority[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
int ret;
+#ifndef WIN32
+ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+#endif
+
if (gnutls_global_init () != 0)
return IKS_NOMEM;
@@ -87,8 +101,10 @@
gnutls_mac_set_priority(data->sess, mac_priority);
gnutls_credentials_set (data->sess, GNUTLS_CRD_CERTIFICATE, data->cred);
+
gnutls_transport_set_push_function (data->sess, (gnutls_push_func) tls_push);
gnutls_transport_set_pull_function (data->sess, (gnutls_pull_func) tls_pull);
+
gnutls_transport_set_ptr (data->sess, data->prs);
ret = gnutls_handshake (data->sess);
@@ -122,108 +138,145 @@
#define CNONCE_LEN 4
static void
-iks_sasl_challenge (struct stream_data *data, iks *challenge)
+parse_digest (char *message, const char *key, char **value_ptr, char **value_end_ptr)
{
- char *b;
- iks *x;
+ char *t;
- b = iks_cdata (iks_child (challenge));
- if (!b) return;
+ *value_ptr = NULL;
+ *value_end_ptr = NULL;
- b = iks_base64_decode (b);
+ t = strstr(message, key);
+ if (t) {
+ t += strlen(key);
+ *value_ptr = t;
+ while (t[0] != '\0') {
+ if (t[0] != '\\' && t[1] == '"') {
+ ++t;
+ *value_end_ptr = t;
+ return;
+ }
+ ++t;
+ }
+ }
+}
- if (strstr (b, "rspauth")) {
- x = iks_new("response");
+static iks *
+make_sasl_response (struct stream_data *data, char *message)
+{
+ iks *x = NULL;
+ char *realm, *realm_end;
+ char *nonce, *nonce_end;
+ char cnonce[CNONCE_LEN*8 + 1];
+ iksmd5 *md5;
+ unsigned char a1_h[16], a1[33], a2[33], response_value[33];
+ char *response, *response_coded;
+ int i;
+
+ parse_digest(message, "realm=\"", &realm, &realm_end);
+ parse_digest(message, "nonce=\"", &nonce, &nonce_end);
+
+ /* nonce is necessary for auth */
+ if (!nonce || !nonce_end) return NULL;
+ *nonce_end = '\0';
+
+ /* if no realm is given use the server hostname */
+ if (realm) {
+ if (!realm_end) return NULL;
+ *realm_end = '\0';
} else {
- char *realm, *nonce, *charset = NULL, *algorithm = NULL;
- char *realm_end, *nonce_end, cnonce[CNONCE_LEN*8 + 1];
- unsigned char a1_h[16], a1[33], a2[33], response_value[33];
- char *response, *response_coded;
- iksmd5 *md5;
- int i;
+ realm = (char *) data->server;
+ }
- realm = strstr (b, "realm");
- if (realm) {
- realm += 7;
- do {
- realm_end = strchr(realm, '"');
- } while (*(realm_end - 1) == '\\');
- } else {
- realm_end = 0;
- realm = (char *) data->server;
- }
- nonce = strstr (b, "nonce");
- if (nonce) {
- nonce += 7;
- do {
- nonce_end = strchr (nonce, '"');
- } while (*(nonce - 1) == '\\');
- } else {
- iks_free (b);
- return;
- }
- charset = strstr (b, "charset");
- if (charset) charset += 8;
- algorithm = strstr (b, "algorithm");
- if (algorithm) algorithm += 10;
- if (realm_end) *realm_end = 0;
- *nonce_end = 0;
+ /* generate random client challenge */
+ for (i = 0; i < CNONCE_LEN; ++i)
+ sprintf (cnonce + i*8, "%08x", rand());
- for (i = 0; i < CNONCE_LEN; ++i)
- sprintf (cnonce + i*8, "%08x", rand());
+ md5 = iks_md5_new();
+ if (!md5) return NULL;
- md5 = iks_md5_new();
- iks_md5_hash (md5, data->auth_username, iks_strlen (data->auth_username), 0);
- iks_md5_hash (md5, ":", 1, 0);
- iks_md5_hash (md5, realm, iks_strlen (realm), 0);
- iks_md5_hash (md5, ":", 1, 0);
- iks_md5_hash (md5, data->auth_pass, iks_strlen (data->auth_pass), 1);
- iks_md5_digest (md5, a1_h);
- iks_md5_reset (md5);
- iks_md5_hash (md5, a1_h, 16, 0);
- iks_md5_hash (md5, ":", 1, 0);
- iks_md5_hash (md5, nonce, iks_strlen (nonce), 0);
- iks_md5_hash (md5, ":", 1, 0);
- iks_md5_hash (md5, cnonce, iks_strlen (cnonce), 1);
- iks_md5_print (md5, a1);
- iks_md5_reset (md5);
- iks_md5_hash (md5, "AUTHENTICATE:xmpp/", 18, 0);
- iks_md5_hash (md5, data->server, iks_strlen (data->server), 1);
- iks_md5_print (md5, a2);
- iks_md5_reset (md5);
- iks_md5_hash (md5, a1, 32, 0);
- iks_md5_hash (md5, ":", 1, 0);
- iks_md5_hash (md5, nonce, iks_strlen (nonce), 0);
- iks_md5_hash (md5, ":00000001:", 10, 0);
- iks_md5_hash (md5, cnonce, iks_strlen (cnonce), 0);
- iks_md5_hash (md5, ":auth:", 6, 0);
- iks_md5_hash (md5, a2, 32, 1);
- iks_md5_print (md5, response_value);
- iks_md5_delete (md5);
+ iks_md5_hash (md5, (const unsigned char*)data->auth_username, iks_strlen (data->auth_username), 0);
+ iks_md5_hash (md5, (const unsigned char*)":", 1, 0);
+ iks_md5_hash (md5, (const unsigned char*)realm, iks_strlen (realm), 0);
+ iks_md5_hash (md5, (const unsigned char*)":", 1, 0);
+ iks_md5_hash (md5, (const unsigned char*)data->auth_pass, iks_strlen (data->auth_pass), 1);
+ iks_md5_digest (md5, a1_h);
- i = iks_strlen (data->auth_username) + iks_strlen (realm) +
- iks_strlen (nonce) + iks_strlen (data->server) +
- CNONCE_LEN*8 + 136;
- response = iks_malloc (i);
- sprintf (response, "username=\"%s\",realm=\"%s\",nonce=\"%s\""
- ",cnonce=\"%s\",nc=00000001,qop=auth,digest-uri=\""
- "xmpp/%s\",response=%s,charset=utf-8",
- data->auth_username, realm, nonce, cnonce,
- data->server, response_value);
- response_coded = iks_base64_encode (response, 0);
+ iks_md5_reset (md5);
+ iks_md5_hash (md5, (const unsigned char*)a1_h, 16, 0);
+ iks_md5_hash (md5, (const unsigned char*)":", 1, 0);
+ iks_md5_hash (md5, (const unsigned char*)nonce, iks_strlen (nonce), 0);
+ iks_md5_hash (md5, (const unsigned char*)":", 1, 0);
+ iks_md5_hash (md5, (const unsigned char*)cnonce, iks_strlen (cnonce), 1);
+ iks_md5_print (md5, (char*)a1);
+ iks_md5_reset (md5);
+ iks_md5_hash (md5, (const unsigned char*)"AUTHENTICATE:xmpp/", 18, 0);
+ iks_md5_hash (md5, (const unsigned char*)data->server, iks_strlen (data->server), 1);
+ iks_md5_print (md5, (char*)a2);
+
+ iks_md5_reset (md5);
+ iks_md5_hash (md5, (const unsigned char*)a1, 32, 0);
+ iks_md5_hash (md5, (const unsigned char*)":", 1, 0);
+ iks_md5_hash (md5, (const unsigned char*)nonce, iks_strlen (nonce), 0);
+ iks_md5_hash (md5, (const unsigned char*)":00000001:", 10, 0);
+ iks_md5_hash (md5, (const unsigned char*)cnonce, iks_strlen (cnonce), 0);
+ iks_md5_hash (md5, (const unsigned char*)":auth:", 6, 0);
+ iks_md5_hash (md5, (const unsigned char*)a2, 32, 1);
+ iks_md5_print (md5, (char*)response_value);
+
+ iks_md5_delete (md5);
+
+ i = iks_strlen (data->auth_username) + iks_strlen (realm) +
+ iks_strlen (nonce) + iks_strlen (data->server) +
+ CNONCE_LEN*8 + 136;
+ response = iks_malloc (i);
+ if (!response) return NULL;
+
+ sprintf (response, "username=\"%s\",realm=\"%s\",nonce=\"%s\""
+ ",cnonce=\"%s\",nc=00000001,qop=auth,digest-uri=\""
+ "xmpp/%s\",response=%s,charset=utf-8",
+ data->auth_username, realm, nonce, cnonce,
+ data->server, response_value);
+
+ response_coded = iks_base64_encode (response, 0);
+ if (response_coded) {
x = iks_new ("response");
iks_insert_cdata (x, response_coded, 0);
-
- iks_free (response);
iks_free (response_coded);
}
- iks_insert_attrib (x, "xmlns", IKS_NS_XMPP_SASL);
- iks_send (data->prs, x);
- iks_delete (x);
- iks_free (b);
+ iks_free (response);
+
+ return x;
}
+static void
+iks_sasl_challenge (struct stream_data *data, iks *challenge)
+{
+ char *message;
+ iks *x;
+ char *tmp;
+
+ tmp = iks_cdata (iks_child (challenge));
+ if (!tmp) return;
+
+ /* decode received blob */
+ message = iks_base64_decode (tmp);
+ if (!message) return;
+
+ /* reply the challenge */
+ if (strstr (message, "rspauth")) {
+ x = iks_new ("response");
+ } else {
+ x = make_sasl_response (data, message);
+ }
+ if (x) {
+ iks_insert_attrib (x, "xmlns", IKS_NS_XMPP_SASL);
+ iks_send (data->prs, x);
+ iks_delete (x);
+ }
+ iks_free (message);
+}
+
static int
tagHook (struct stream_data *data, char *name, char **atts, int type)
{
@@ -438,9 +491,15 @@
int
iks_fd (iksparser *prs)
{
- struct stream_data *data = iks_user_data (prs);
+ struct stream_data *data;
- return (int) data->sock;
+ if (prs) {
+ data = iks_user_data (prs);
+ if (data) {
+ return (int) data->sock;
+ }
+ }
+ return -1;
}
int
@@ -453,6 +512,7 @@
#ifdef HAVE_GNUTLS
if (data->flags & SF_SECURE) {
len = gnutls_record_recv (data->sess, data->buf, NET_IO_BUF_SIZE - 1);
+ if (len == 0) len = -1;
} else
#endif
{
@@ -547,8 +607,34 @@
return 0;
#endif
}
+#ifdef HAVE_GNUTLS
+
int
+iks_init(void)
+{
+ int ok = 0;
+
+#ifndef WIN32
+ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+#endif
+
+ if (gnutls_global_init () != 0)
+ return IKS_NOMEM;
+
+ return ok;
+
+}
+#else
+int
+iks_init(void)
+{
+ return 0;
+}
+#endif
+
+
+int
iks_start_tls (iksparser *prs)
{
#ifdef HAVE_GNUTLS
Modified: freeswitch/branches/seven/libs/iksemel/test/tst-iks.c (14471 => 14472)
--- freeswitch/branches/seven/libs/iksemel/test/tst-iks.c 2009-08-09 05:55:48 UTC (rev 14471)
+++ freeswitch/branches/seven/libs/iksemel/test/tst-iks.c 2009-08-09 18:53:22 UTC (rev 14472)
@@ -17,6 +17,8 @@
"<iq type='result' to='ydobon@jabber.org'><query xmlns='jabber:iq:version'>"
"<name>TestClient</name><os>SuxOS 2000</os><version><stable solidity='rock'/>"
"1.2.0 patchlevel 2</version></query></iq>";
+ static char xml2[] =
+ "<Ni><C/>lala<br/><A/>Hello World<B/></Ni>";
iks *x, *y, *z;
char *t;
@@ -52,5 +54,24 @@
}
iks_delete(x);
+
+ x = iks_new ("Ni");
+ y = iks_insert (x, "br");
+ z = iks_prepend_cdata (y, "lala", 4);
+ iks_prepend (z, "C");
+ z = iks_insert_cdata (x, "Hello", 5);
+ y = iks_append (z, "B");
+ iks_prepend (z, "A");
+ iks_append_cdata (z, " ", 1);
+ iks_prepend_cdata (y, "World", 5);
+
+ t = iks_string (iks_stack (x), x);
+ if(!t || strcmp(t, xml2) != 0) {
+ printf("Result: %s\n", t);
+ printf("Expected: %s\n", xml2);
+ return 1;
+ }
+ iks_delete(x);
+
return 0;
}
Copied: freeswitch/branches/seven/libs/ilbc (from rev 14471, freeswitch/trunk/libs/ilbc)
Property changes: freeswitch/branches/seven/libs/ilbc
Name: svn:ignore
+ Release
*.user
Debug
configure
Makefile.in
config.log
Makefile
config.status
autom4te.cache
libtool
aclocal.m4
x64
config-h.in
configure.lineno
Deleted: freeswitch/branches/seven/libs/ilbc/.update
Copied: freeswitch/branches/seven/libs/ilbc/.update (from rev 14471, freeswitch/trunk/libs/ilbc/.update) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/.update (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/.update 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+Tue Feb 17 10:22:09 CST 2009
Deleted: freeswitch/branches/seven/libs/ilbc/AUTHORS
Copied: freeswitch/branches/seven/libs/ilbc/AUTHORS (from rev 14471, freeswitch/trunk/libs/ilbc/AUTHORS) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/AUTHORS (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/AUTHORS 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+Adapted by Steve Underwood <steveu@coppice.org> from the source code
+supplied in RFC3???.
Deleted: freeswitch/branches/seven/libs/ilbc/COPYING
Copied: freeswitch/branches/seven/libs/ilbc/COPYING (from rev 14471, freeswitch/trunk/libs/ilbc/COPYING) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/COPYING (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/COPYING 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+The license conditions for the original iLBC codec may be found in the file
+ gips_iLBClicense.pdf
+No additional license conditions are claimed over this implementation.
Deleted: freeswitch/branches/seven/libs/ilbc/ChangeLog
Copied: freeswitch/branches/seven/libs/ilbc/ChangeLog (from rev 14471, freeswitch/trunk/libs/ilbc/ChangeLog) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/ChangeLog (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/ChangeLog 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+08.02.14 - 0.0.1 - Steve Underwood <steveu@coppice.org>
+ - The first version.
+
Deleted: freeswitch/branches/seven/libs/ilbc/INSTALL
Copied: freeswitch/branches/seven/libs/ilbc/INSTALL (from rev 14471, freeswitch/trunk/libs/ilbc/INSTALL) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/INSTALL (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/INSTALL 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.ac' is used to create `configure' by a program
+called `autoconf'. You only need `configure.ac' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
Deleted: freeswitch/branches/seven/libs/ilbc/Makefile.am
Copied: freeswitch/branches/seven/libs/ilbc/Makefile.am (from rev 14471, freeswitch/trunk/libs/ilbc/Makefile.am) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/Makefile.am (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/Makefile.am 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,90 @@
+##
+## iLBC - a library for the iLBC codec
+##
+## Makefile.am -- Process this file with automake to produce Makefile.in
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the Lesser GNU General Public License version 2.1, as
+## published by the Free Software Foundation.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+## $Id: Makefile.am,v 1.1.1.1 2008/02/15 12:15:55 steveu Exp $
+
+AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
+
+noinst_SCRIPTS = ilbc.spec
+
+MAINTAINERCLEANFILES = Makefile.in
+
+EXTRA_DIST = ilbc.spec \
+ wrapper.xsl \
+ gips_iLBClicense.pdf \
+ libilbc.vcproj \
+ doc/libilbc-doxygen \
+ src/ilbc/version.h.in \
+ src/libilbc.dsp \
+ src/libilbc.sln \
+ src/msvc/gettimeofday.c \
+ src/msvc/inttypes.h \
+ src/msvc/tgmath.h \
+ src/msvc/unistd.h \
+ src/msvc/sys/time.h \
+ src/msvc/ilbc.def \
+ src/msvc/msvcproj.head \
+ src/msvc/msvcproj.foot \
+ src/msvc/vc8proj.head \
+ src/msvc/vc8proj.foot \
+ debian/changelog \
+ debian/compat \
+ debian/control \
+ debian/copyright \
+ debian/libilbc.install \
+ debian/libilbc-dev.install \
+ debian/libilbc-doc.install \
+ debian/rules \
+ debian/watch
+
+if COND_DOC
+ MAYBE_DOC=doc
+endif
+if COND_TESTS
+ MAYBE_TESTS=tests
+endif
+SUBDIRS = src $(MAYBE_DOC) $(MAYBE_TESTS)
+
+DIST_SUBDIRS = src doc tests localtests
+
+faq: faq.xml
+ cd faq ; xsltproc ../wrapper.xsl ../faq.xml
+
+rpm: rpm-build
+
+rpm-build:
+ $(MAKE) -$(MAKEFLAGS) bump.rpm.release
+ $(MAKE) -$(MAKEFLAGS) dist
+ rm -rf rpm/BUILD/*
+ rm -f rpm/RPMS/*/*
+ rm -f rpm/SOURCES/*
+ rm -f rpm/SPECS/*
+ rm -f rpm/SRPMS/*
+ rpm -ta --sign @PACKAGE@-@VERSION@.tar.gz
+
+bump.rpm.release: ilbc.spec
+ VERSION="x"; \
+ test -f $(srcdir)/rpm.release && . $(srcdir)/rpm.release; \
+ NEXT_RELEASE=0; \
+ test "$$VERSION" = "@VERSION@" && NEXT_RELEASE="$$RELEASE"; \
+ RELEASE=`expr $$NEXT_RELEASE + 1`; \
+ echo "VERSION=@VERSION@" >$(srcdir)/rpm.release; \
+ echo "RELEASE=$$RELEASE" >>$(srcdir)/rpm.release; \
+ sed 's/^Release: .*/Release: '$$RELEASE'/' \
+ <ilbc.spec >ilbc.spec.new; \
+ mv ilbc.spec.new ilbc.spec
Deleted: freeswitch/branches/seven/libs/ilbc/NEWS
Copied: freeswitch/branches/seven/libs/ilbc/NEWS (from rev 14471, freeswitch/trunk/libs/ilbc/NEWS) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/NEWS (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/NEWS 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+No news is good news!
\ No newline at end of file
Deleted: freeswitch/branches/seven/libs/ilbc/README
Copied: freeswitch/branches/seven/libs/ilbc/README (from rev 14471, freeswitch/trunk/libs/ilbc/README) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/README (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/README 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,4 @@
+VoIPcodecs 0.0.1 - A set of commonly used, unencumbered, codecs for VoIP
+------------------------------------------------------------------------
+
+Steve Underwood <steveu@coppice.org>
Copied: freeswitch/branches/seven/libs/ilbc/config (from rev 14471, freeswitch/trunk/libs/ilbc/config)
Property changes: freeswitch/branches/seven/libs/ilbc/config
Name: svn:ignore
+ config.guess
config.sub
ltmain.sh
depcomp
missing
install-sh
Deleted: freeswitch/branches/seven/libs/ilbc/configure.ac
Copied: freeswitch/branches/seven/libs/ilbc/configure.ac (from rev 14471, freeswitch/trunk/libs/ilbc/configure.ac) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/configure.ac (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/configure.ac 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,292 @@
+#
+# iLBC - a library for the iLBC codec
+#
+# configure.ac -- Process this file with autoconf to produce configure
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# $Id: configure.ac,v 1.1.1.1 2008/02/15 12:15:54 steveu Exp $
+
+# @start 1
+
+AC_INIT
+
+AC_DEFUN([AX_COMPILER_VENDOR],
+[
+AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
+ [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
+ # note: don't check for GCC first, since some other compilers define __GNUC__
+ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+ vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
+#if !($vencpp)
+ thisisanerror;
+#endif
+])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
+ done
+ ])
+])
+
+ILBC_MAJOR_VERSION=0
+ILBC_MINOR_VERSION=0
+ILBC_MICRO_VERSION=1
+
+ILBC_LT_CURRENT=0
+ILBC_LT_REVISION=2
+ILBC_LT_AGE=0
+
+VERSION=$ILBC_MAJOR_VERSION.$ILBC_MINOR_VERSION.$ILBC_MICRO_VERSION
+PACKAGE=ilbc
+
+AC_SUBST(ILBC_LT_CURRENT)
+AC_SUBST(ILBC_LT_REVISION)
+AC_SUBST(ILBC_LT_AGE)
+
+AC_CONFIG_SRCDIR([src/iLBC_encode.c])
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_HEADERS([src/config.h:config-h.in])
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+
+AC_CANONICAL_HOST
+AC_CANONICAL_BUILD
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_GCC_TRADITIONAL
+AC_PROG_LIBTOOL
+AC_PROG_INSTALL
+AC_LANG([C])
+
+AX_COMPILER_VENDOR
+
+if test "${build}" != "${host}"
+then
+ # If we are doing a Canadian Cross, in which the host and build systems
+ # are not the same, we set reasonable default values for the tools.
+
+ CC=${CC-${host_alias}-gcc}
+ CFLAGS=${CFLAGS-"-g -O2"}
+ CXX=${CXX-${host_alias}-c++}
+ CXXFLAGS=${CXXFLAGS-"-g -O2"}
+ CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+else
+ # Set reasonable default values for some tools even if not Canadian.
+ # Of course, these are different reasonable default values, originally
+ # specified directly in the Makefile.
+ # We don't export, so that autoconf can do its job.
+ # Note that all these settings are above the fragment inclusion point
+ # in Makefile.in, so can still be overridden by fragments.
+ # This is all going to change when we autoconfiscate...
+ CC_FOR_BUILD="\$(CC)"
+ AC_PROG_CC
+
+ # We must set the default linker to the linker used by gcc for the correct
+ # operation of libtool. If LD is not defined and we are using gcc, try to
+ # set the LD default to the ld used by gcc.
+ if test -z "$LD"
+ then
+ if test "$GCC" = yes
+ then
+ case $build in
+ *-*-mingw*)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
+ *)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
+ esac
+ case $gcc_prog_ld in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ LD="$gcc_prog_ld" ;;
+ esac
+ fi
+ fi
+
+ CXX=${CXX-"c++"}
+ CFLAGS=${CFLAGS-"-g -O2"}
+ CXXFLAGS=${CXXFLAGS-"-g -O2"}
+fi
+
+AC_C_CONST
+AC_C_INLINE
+AC_C_VOLATILE
+
+AC_CHECK_TYPES(long long)
+AC_CHECK_TYPES(long double)
+
+AC_TYPE_SIGNAL
+
+AC_ARG_ENABLE(doc, [ --enable-doc Build the documentation])
+AC_ARG_ENABLE(tests, [ --enable-tests Build the test programs])
+AC_ARG_ENABLE(mmx, [ --enable-mmx Enable MMX support])
+AC_ARG_ENABLE(sse, [ --enable-sse Enable SSE support])
+AC_ARG_ENABLE(fixed_point, [ --enable-fixed-point Enable fixed point support])
+
+AC_FUNC_ERROR_AT_LINE
+AC_FUNC_VPRINTF
+AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_REALLOC
+AC_FUNC_SELECT_ARGTYPES
+
+AC_CHECK_FUNCS([memmove])
+AC_CHECK_FUNCS([memset])
+AC_CHECK_FUNCS([select])
+AC_CHECK_FUNCS([strcasecmp])
+AC_CHECK_FUNCS([strchr])
+AC_CHECK_FUNCS([strdup])
+AC_CHECK_FUNCS([strerror])
+AC_CHECK_FUNCS([strstr])
+AC_CHECK_FUNCS([strtol])
+AC_CHECK_FUNCS([gettimeofday])
+
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_HEADER_TIME
+
+# Check for header files.
+AC_CHECK_HEADERS([socket.h])
+AC_CHECK_HEADERS([inttypes.h], [INSERT_INTTYPES_HEADER="#include <inttypes.h>"])
+AC_CHECK_HEADERS([stdint.h], [INSERT_STDINT_HEADER="#include <stdint.h>"])
+AC_CHECK_HEADERS([unistd.h])
+AC_CHECK_HEADERS([stdlib.h])
+AC_CHECK_HEADERS([string.h])
+AC_CHECK_HEADERS([strings.h])
+AC_CHECK_HEADERS([malloc.h])
+AC_CHECK_HEADERS([tgmath.h], [INSERT_TGMATH_HEADER="#include <tgmath.h>"])
+AC_CHECK_HEADERS([math.h], [INSERT_MATH_HEADER="#include <math.h>"])
+AC_CHECK_HEADERS([float.h])
+AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_HEADERS([sys/select.h])
+AC_CHECK_HEADERS([sys/ioctl.h])
+AC_CHECK_HEADERS([sys/fcntl.h])
+AC_CHECK_HEADERS([audiofile.h])
+if test "${build}" == "${host}"
+then
+ AC_CHECK_HEADERS([X11/X.h])
+fi
+
+AC_LANG([C++])
+
+if test "${build}" == "${host}"
+then
+ case "${host}" in
+ x86_64-*)
+ AC_CHECK_FILE([${prefix}/lib64], libdir='$(exec_prefix)/lib64')
+ ;;
+ esac
+fi
+
+AC_LANG([C])
+
+if test "${build}" == "${host}"
+then
+ case "${host}" in
+ x86_64-*)
+ # X86_64 Linux machines may have both 64 bit and 32 bit libraries. We need to choose the right set
+ AC_CHECK_FILE([/usr/X11R6/lib64], [TESTLIBS="$TESTLIBS -L/usr/X11R6/lib64"], AC_CHECK_FILE([/usr/X11R6/lib], [TESTLIBS="$TESTLIBS -L/usr/X11R6/lib"]))
+ ;;
+ esac
+fi
+
+# Checks for libraries.
+AC_CHECK_LIB([m], [cos])
+AC_CHECK_LIB([m], [pow])
+AC_CHECK_LIB([m], [sqrt])
+if test -n "$enable_tests" ; then
+ AC_LANG([C++])
+ AC_LANG([C])
+ AC_CHECK_LIB([audiofile], [afOpenFile], TESTLIBS="$TESTLIBS -laudiofile", AC_MSG_ERROR("Can't make tests without libaudiofile (does your system require a libaudiofile-devel package?)"))
+ AC_CHECK_LIB([fftw3], [fftw_plan_dft_1d], TESTLIBS="$TESTLIBS -lfftw3")
+ AC_CHECK_LIB([fftw], [fftw_create_plan], TESTLIBS="$TESTLIBS -lfftw")
+fi
+
+AC_ARG_ENABLE([enable_64], [AS_HELP_STRING([--enable-64], [Enable 64bit compilation])], [enable_64="$enableval"], [enable_64="no"])
+
+case "${ax_cv_c_compiler_vendor}" in
+gnu)
+ COMP_VENDOR_CFLAGS="-std=gnu99 -ffast-math -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
+ if test "$enable_sse" = "yes" ; then
+ COMP_VENDOR_CFLAGS="-msse $COMP_VENDOR_CFLAGS"
+ fi
+ if test "$enable_mmx" = "yes" ; then
+ COMP_VENDOR_CFLAGS="-mmmx $COMP_VENDOR_CFLAGS"
+ fi
+ ;;
+sun)
+ COMP_VENDOR_CFLAGS="-xc99=all -mt -xCC -D__FUNCTION__=__func__ -xvpara"
+ if test "$enable_64" = "yes" ; then
+ COMP_VENDOR_CFLAGS="-m64 $COMP_VENDOR_CFLAGS"
+ fi
+ ;;
+*)
+ COMP_VENDOR_CFLAGS="-std=c99 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
+ ;;
+esac
+
+COMP_VENDOR_CFLAGS="-DNDEBUG $COMP_VENDOR_CFLAGS"
+
+AM_CONDITIONAL([COND_DOC], [test "$enable_doc" = yes])
+AM_CONDITIONAL([COND_TESTS], [test "$enable_tests" = yes])
+AM_CONDITIONAL([COND_MMX], [test "$enable_mmx" = yes])
+AM_CONDITIONAL([COND_SSE], [test "$enable_sse" = yes])
+if test "$enable_fixed_point" = "yes" ; then
+ AC_DEFINE([ILBC_USE_FIXED_POINT], [1], [Enable fixed point processing, where possible, instead of floating point])
+ ILBC_USE_FIXED_POINT="#define ILBC_USE_FIXED_POINT 1"
+else
+#
+# So far we deal with the embedded ARM, Blackfin, MIPS, TI DSP and XScale processors as
+# things which lack fast hardware floating point.
+#
+# Other candidates would be the small embedded Power PCs.
+#
+ case $basic_machine in
+ arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] \
+ | bfin \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | tic54x | c54x* | tic55x | c55x* | tic6x | c6x* \
+ | xscale | xscalee[bl] \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | bfin-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | xscale-* | xscalee[bl]-* )
+ AC_DEFINE([ILBC_USE_FIXED_POINT], [1], [Enable fixed point processing, where possible, instead of floating point])
+ ILBC_USE_FIXED_POINT="#define ILBC_USE_FIXED_POINT 1"
+ ;;
+ *)
+ ILBC_USE_FIXED_POINT="#undef ILBC_USE_FIXED_POINT"
+ ;;
+ esac
+fi
+
+AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(COMP_VENDOR_CFLAGS)
+AC_SUBST(TESTLIBS)
+AC_SUBST(ILBC_USE_FIXED_POINT)
+AC_SUBST(INSERT_INTTYPES_HEADER)
+AC_SUBST(INSERT_STDINT_HEADER)
+AC_SUBST(INSERT_TGMATH_HEADER)
+AC_SUBST(INSERT_MATH_HEADER)
+
+AC_CONFIG_FILES([Makefile
+ doc/Makefile
+ localtests/Makefile
+ src/Makefile
+ src/ilbc.h
+ tests/Makefile
+ ilbc.spec])
+
+AC_OUTPUT
+
+# @end 1
Deleted: freeswitch/branches/seven/libs/ilbc/configure.gnu
Copied: freeswitch/branches/seven/libs/ilbc/configure.gnu (from rev 14471, freeswitch/trunk/libs/ilbc/configure.gnu) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/configure.gnu (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/configure.gnu 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,3 @@
+#! /bin/sh
+./configure "$@" --with-pic --disable-shared
+
Copied: freeswitch/branches/seven/libs/ilbc/debian (from rev 14471, freeswitch/trunk/libs/ilbc/debian)
Deleted: freeswitch/branches/seven/libs/ilbc/debian/changelog
Copied: freeswitch/branches/seven/libs/ilbc/debian/changelog (from rev 14471, freeswitch/trunk/libs/ilbc/debian/changelog) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/changelog (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/changelog 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,6 @@
+ilbc (0.0.1) unstable; urgency=low
+
+ [ Steve Underwood ]
+ * Begun
+
+ -- Steve Underwood <steveu@coppice.org> Thu, 15 Feb 2008 09:53:06 +0300
Deleted: freeswitch/branches/seven/libs/ilbc/debian/compat
Copied: freeswitch/branches/seven/libs/ilbc/debian/compat (from rev 14471, freeswitch/trunk/libs/ilbc/debian/compat) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/compat (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/compat 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+4
Deleted: freeswitch/branches/seven/libs/ilbc/debian/control
Copied: freeswitch/branches/seven/libs/ilbc/debian/control (from rev 14471, freeswitch/trunk/libs/ilbc/debian/control) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/control (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/control 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,35 @@
+Source: ilbc
+Section: libs
+Priority: optional
+Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
+Uploaders: Jose Carlos Garcia Sogo <jsogo@debian.org>, Kilian Krause <kilian@debian.org>, Santiago Garcia Mantinan <manty@debian.org>, Mark Purcell <msp@debian.org>, Tzafrir Cohen <tzafrir.cohen@xorcom.com>, Santiago Ruano Rincón <santiago@debian.org>
+Build-Depends: debhelper (>= 4.0.0), dpatch, doxygen, autotools-dev
+Standards-Version: 3.7.2
+XS-Vcs-Svn: svn://svn.debian.org/pkg-voip/
+XS-Vcs-Browser: http://svn.debian.org/wsvn/pkg-voip/
+
+Package: libilbc
+Architecture: any
+Depends: ${shlibs:Depends}
+Conflicts: libilbc0, libilbc1, libilbc2
+Description: Telephony signal processing library
+ This package contains the iLBC low bit rate speech codec.
+ .
+ This package contains the shared library.
+
+Package: libilbc-dev
+Section: libdevel
+Architecture: any
+Depends: libilbc3 (= ${Source-Version})
+Description: Telephony signal processing library
+ This package contains the iLBC low bit rate speech codec.
+ .
+ This package contains the static library and development headers.
+ .
+ Homepage: http://www.soft-switch.org/
+
+Package: libilbc-doc
+Section: doc
+Architecture: all
+Description: Documentation for the ilbc signal processing library
+ This package contains the iLBC low bit rate speech codec.
Deleted: freeswitch/branches/seven/libs/ilbc/debian/copyright
Copied: freeswitch/branches/seven/libs/ilbc/debian/copyright (from rev 14471, freeswitch/trunk/libs/ilbc/debian/copyright) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/copyright (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/copyright 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,10 @@
+This package was debianized by Steve Underwood <steveu@coppice.org> on
+Thu, 15 Feb 2008 15:22:58 +0100.
+
+It was downloaded from http://soft-switch.org/downloads/voipcodecs/
+
+Copyright: The Internet Society and Steve Underwood <steveu@coppice.org>
+
+License:
+
+Global IP Sound iLBC Public License, v2.0
Deleted: freeswitch/branches/seven/libs/ilbc/debian/libilbc-dev.install
Copied: freeswitch/branches/seven/libs/ilbc/debian/libilbc-dev.install (from rev 14471, freeswitch/trunk/libs/ilbc/debian/libilbc-dev.install) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/libilbc-dev.install (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/libilbc-dev.install 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,4 @@
+debian/tmp/usr/include
+debian/tmp/usr/lib/libilbc.so
+debian/tmp/usr/lib/libilbc.la
+debian/tmp/usr/lib/libilbc.a
Deleted: freeswitch/branches/seven/libs/ilbc/debian/libilbc-doc.install
Copied: freeswitch/branches/seven/libs/ilbc/debian/libilbc-doc.install (from rev 14471, freeswitch/trunk/libs/ilbc/debian/libilbc-doc.install) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/libilbc-doc.install (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/libilbc-doc.install 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1 @@
+doc/api/html usr/share/doc/libilbc-doc/api/
Deleted: freeswitch/branches/seven/libs/ilbc/debian/libilbc.install
Copied: freeswitch/branches/seven/libs/ilbc/debian/libilbc.install (from rev 14471, freeswitch/trunk/libs/ilbc/debian/libilbc.install) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/libilbc.install (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/libilbc.install 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/libilbc.so.0.*
+debian/tmp/usr/lib/libilbc.so.0
Deleted: freeswitch/branches/seven/libs/ilbc/debian/rules
Copied: freeswitch/branches/seven/libs/ilbc/debian/rules (from rev 14471, freeswitch/trunk/libs/ilbc/debian/rules) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/rules (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/rules 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,106 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+DEBVERSION:=$(shell head -n 1 debian/changelog \
+ | sed -e 's/^[^(]*(\([^)]*\)).*/\1/')
+ORIGTARVER:=$(shell echo $(DEBVERSION) | sed -e 's/^.*://' -e 's/-[0-9.]*$$//')# -e 's/.dfsg$$//' -e 's/~//')
+
+UPVERSION:=$(shell echo $(ORIGTARVER) | tr -d '~')
+
+FILENAME := ilbc_$(ORIGTARVER).orig.tar.gz
+FULLNAME := ilbc-$(UPVERSION)
+URL := http://soft-switch.org/downloads/voipcodecs/ilbc-$(UPVERSION).tgz
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+
+include /usr/share/dpatch/dpatch.make
+
+
+autotools: patch-stamp
+ ln -s /usr/share/misc/config.sub config.sub
+ ln -s /usr/share/misc/config.guess config.guess
+ touch autotools
+
+config.status: autotools configure
+ dh_testdir
+ CFLAGS="$(CFLAGS)" ./configure \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --prefix=/usr \
+ --mandir=\$${prefix}/share/man \
+ --infodir=\$${prefix}/share/info \
+ --enable-doc
+
+build: build-stamp
+
+build-stamp: config.status
+ dh_testdir
+ $(MAKE)
+ touch build-stamp
+
+clean: clean-patched unpatch
+clean-patched:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp autotools
+ -$(MAKE) distclean
+
+ -$(RM) -f config.sub
+ -$(RM) -f config.guess
+
+ dh_clean
+
+install: build-stamp
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
+
+binary-indep: build-stamp install
+ dh_testdir -i
+ dh_testroot -i
+ dh_installchangelogs -i ChangeLog
+ dh_installdocs -i DueDiligence
+ dh_install -i
+ dh_compress -i
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i
+ dh_md5sums -i
+ dh_builddeb -i
+
+binary-arch: build-stamp install
+ dh_testdir -a
+ dh_testroot -a
+ dh_installchangelogs -a ChangeLog
+ dh_installdocs -a DueDiligence
+ dh_install -a
+ dh_strip -a
+ dh_compress -a
+ dh_fixperms -a
+ dh_makeshlibs -a
+ dh_installdeb -a
+ dh_shlibdeps -a
+ dh_gencontrol -a
+ dh_md5sums -a
+ dh_builddeb -a
+
+get-orig-source:
+ -@@dh_testdir
+ @@[ -d ../tarballs/. ]||mkdir -p ../tarballs
+ @@echo Downloading $(FILENAME) from $(URL) ...
+ @@wget -N -nv -T10 -t3 -O ../tarballs/$(FILENAME) $(URL)
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install patch unpatch
Deleted: freeswitch/branches/seven/libs/ilbc/debian/watch
Copied: freeswitch/branches/seven/libs/ilbc/debian/watch (from rev 14471, freeswitch/trunk/libs/ilbc/debian/watch) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/debian/watch (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/debian/watch 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,7 @@
+# See uscan(1) for format
+
+# Compulsory line, this is a version 3 file
+version=3
+
+# <Webpage URL> <string match>
+http://soft-switch.org/downloads/voipcodecs/ ilbc-(.*)\.tgz debian svn-upgrade
Copied: freeswitch/branches/seven/libs/ilbc/doc (from rev 14471, freeswitch/trunk/libs/ilbc/doc)
Property changes: freeswitch/branches/seven/libs/ilbc/doc
Name: svn:ignore
+ Makefile.in
Makefile
Deleted: freeswitch/branches/seven/libs/ilbc/doc/Makefile.am
Copied: freeswitch/branches/seven/libs/ilbc/doc/Makefile.am (from rev 14471, freeswitch/trunk/libs/ilbc/doc/Makefile.am) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/doc/Makefile.am (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/doc/Makefile.am 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,29 @@
+##
+## iLBC - a library for the iLBC codec
+##
+## Makefile.am -- Process this file with automake to produce Makefile.in
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License version 2, as
+## published by the Free Software Foundation.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+## $Id: Makefile.am,v 1.1.1.1 2008/02/15 12:15:55 steveu Exp $
+
+MAINTAINERCLEANFILES = Makefile.in
+
+EXTRA_DIST = css.css \
+ wrapper.xsl
+
+all: doxydocs
+
+doxydocs:
+ doxygen libilbc-doxygen
Deleted: freeswitch/branches/seven/libs/ilbc/doc/css.css
Copied: freeswitch/branches/seven/libs/ilbc/doc/css.css (from rev 14471, freeswitch/trunk/libs/ilbc/doc/css.css) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/doc/css.css (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/doc/css.css 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,564 @@
+body {
+ background-image: url("../images/weave.jpg");
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+
+h1 {
+ text-align: center;
+}
+
+h2 {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ border-color: #c00000;
+ color : black;
+ margin-top: 0.8em;
+ border-style: solid;
+ border-width: 0px 0px 3px 0.5em;
+ line-height : 130%;
+}
+
+h3 {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ border-color: #f02020;
+ color : black;
+ border-width: 0px 0px 2px 0.5em;
+ border-style: solid;
+ margin-right: 20%;
+ line-height : 130%;
+}
+caption {
+ font-weight: bold
+}
+a.qindex {}
+a.qindexRef {}
+a.el {
+ text-decoration: none;
+ font-weight: bold
+}
+a.elRef {
+ font-weight: bold
+}
+a.code {
+ text-decoration: none;
+ font-weight: normal;
+ color: #4444ee
+}
+a.codeRef {
+ font-weight: normal;
+ color: #4444ee
+}
+a:hover {
+ text-decoration: none;
+ background-color: #f2f2ff
+}
+dl.el {
+ margin-left: -1cm
+}
+div.fragment {
+ width: 100%;
+ border: none;
+ background-color: #eeeeee
+}
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+
+td {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ font-weight: bold;
+}
+
+.navheader {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ background-color: #B2B2ff;
+ font-weight: bold;
+}
+
+.navfooter {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ background-color: #B2B2ff;
+ font-weight: bold;
+}
+
+table.menu {
+ background-color: #000066;
+ font-weight: bold;
+ text-align: center;
+ width: 100%;
+}
+
+tr.menu {
+ background-color: #ccffff;
+ font-weight: bold;
+ text-align: center;
+}
+td.menu {
+ background-color: #f2e0d0;
+ font-weight: bold;
+ text-align: center;
+}
+
+td.md {
+ background-color: #f2f2ff;
+ font-weight: bold;
+}
+td.mdname1 {
+ background-color: #f2f2ff;
+ font-weight: bold;
+ color: #602020;
+}
+td.mdname {
+ background-color: #f2f2ff;
+ font-weight: bold;
+ color: #602020;
+ width: 600px;
+}
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold
+}
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+ font-size: smaller
+}
+td.indexkey {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+td.indexvalue {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+span.keyword {
+ color: #008000
+}
+span.keywordtype {
+ color: #604020
+}
+span.keywordflow {
+ color: #e08000
+}
+span.comment {
+ color: #800000
+}
+span.preprocessor {
+ color: #806020
+}
+span.stringliteral {
+ color: #002080
+}
+span.charliteral {
+ color: #008080
+}
+em {
+ color: #990000;
+ background-color: transparent;
+}
+h1,h2,h3,h4,h5,h6,p,center,td,th,ul,dl,div {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+body,td {
+ font-size: 90%;
+}
+h1 {
+ text-align: center;
+ font-size: 160%;
+}
+h2 {
+ font-size: 120%;
+}
+h3 {
+ font-size: 100%;
+}
+caption {
+ font-weight: bold
+}
+div.qindex {
+ width: 100%;
+ background-color: #eeeeff;
+ border: 1px solid #b0b0b0;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+div.nav {
+ width: 100%;
+ background-color: #eeeeff;
+ border: 1px solid #b0b0b0;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+div.navtab {
+ background-color: #eeeeff;
+ border: 1px solid #b0b0b0;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+td.navtab {
+ font-size: 70%;
+}
+a.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1a419d;
+}
+a.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1a419d
+}
+a.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+a.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+a.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+a.qindexHL:visited {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff
+}
+a.el {
+ text-decoration: none;
+ font-weight: bold
+}
+a.elRef {
+ font-weight: bold
+}
+a.code:link {
+ text-decoration: none;
+ font-weight: normal;
+ color: #0000FF
+}
+a.code:visited {
+ text-decoration: none;
+ font-weight: normal;
+ color: #0000FF
+}
+a.codeRef:link {
+ font-weight: normal;
+ color: #0000FF
+}
+a.codeRef:visited {
+ font-weight: normal;
+ color: #0000FF
+}
+a:hover {
+ text-decoration: none;
+ background-color: #f2f2ff
+}
+dl.el {
+ margin-left: -1cm
+}
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+pre.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+td.md {
+ background-color: #F4F4FB;
+ font-weight: bold;
+}
+td.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+td.mdname1 {
+ background-color: #F4F4FB;
+ font-weight: bold;
+ color: #602020;
+}
+td.mdname {
+ background-color: #F4F4FB;
+ font-weight: bold;
+ color: #602020;
+ width: 600px;
+}
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+ font-size: 90%
+}
+td.indexkey {
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+td.indexvalue {
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+tr.memlist {
+ background-color: #f0f0f0;
+}
+p.formulaDsp {
+ text-align: center;
+}
+img.formulaDsp {
+}
+img.formulaInl {
+ vertical-align: middle;
+}
+span.keyword {
+ color: #008000
+}
+span.keywordtype {
+ color: #604020
+}
+span.keywordflow {
+ color: #e08000
+}
+span.comment {
+ color: #800000
+}
+span.preprocessor {
+ color: #806020
+}
+span.stringliteral {
+ color: #002080
+}
+span.charliteral {
+ color: #008080
+}
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #eeeeff;
+}
+td.tiny {
+ font-size: 75%;
+}
+a {
+ color: #252e78;
+}
+a:visited {
+ color: #3d2185;
+}
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #b0b0b0;
+}
+th.dirtab {
+ background: #eeeeff;
+ font-weight: bold;
+}
+hr {
+ height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
Deleted: freeswitch/branches/seven/libs/ilbc/doc/libilbc-doxygen
Copied: freeswitch/branches/seven/libs/ilbc/doc/libilbc-doxygen (from rev 14471, freeswitch/trunk/libs/ilbc/doc/libilbc-doxygen) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/doc/libilbc-doxygen (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/doc/libilbc-doxygen 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1229 @@
+# Doxyfile 1.4.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = libvoipcodecs
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = 0.0.1
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = api
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = YES
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is YES.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the progam writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT =
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ..
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS = *.c \
+ *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 2
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT =
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = css.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT =
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT =
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that a graph may be further truncated if the graph's
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
Deleted: freeswitch/branches/seven/libs/ilbc/doc/wrapper.xsl
Copied: freeswitch/branches/seven/libs/ilbc/doc/wrapper.xsl (from rev 14471, freeswitch/trunk/libs/ilbc/doc/wrapper.xsl) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/doc/wrapper.xsl (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/doc/wrapper.xsl 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,5 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version='1.0'>
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
+ <xsl:param name="html.stylesheet">css.css</xsl:param>
+</xsl:stylesheet>
\ No newline at end of file
Deleted: freeswitch/branches/seven/libs/ilbc/gips_iLBClicense.pdf
Copied: freeswitch/branches/seven/libs/ilbc/gips_iLBClicense.pdf (from rev 14471, freeswitch/trunk/libs/ilbc/gips_iLBClicense.pdf) (0 => 14472)
--- freeswitch/branches/seven/libs/ilbc/gips_iLBClicense.pdf (rev 0)
+++ freeswitch/branches/seven/libs/ilbc/gips_iLBClicense.pdf 2009-08-09 18:53:22 UTC (rev 14472)
@@ -0,0 +1,1421 @@
+%PDF-1.4
+%\xE2\xE3\xCF\xD3
+461 0 obj <</Linearized 1/L 108196/O 465/E 23994/N 5/T 98928/H [ 1097 364]>>
+endobj
+
+xref
+461 39
+0000000016 00000 n
+0000001646 00000 n
+0000001097 00000 n
+0000001959 00000 n
+0000002100 00000 n
+0000002473 00000 n
+0000002539 00000 n
+0000002704 00000 n
+0000002868 00000 n
+0000003033 00000 n
+0000003198 00000 n
+0000003358 00000 n
+0000003523 00000 n
+0000003786 00000 n
+0000003863 00000 n
+0000004109 00000 n
+0000004349 00000 n
+0000005008 00000 n
+0000005044 00000 n
+0000005514 00000 n
+0000006235 00000 n
+0000007947 00000 n
+0000009580 00000 n
+0000011307 00000 n
+0000013071 00000 n
+0000014808 00000 n
+0000016554 00000 n
+0000016598 00000 n
+0000016854 00000 n
+0000017266 00000 n
+0000019028 00000 n
+0000020909 00000 n
+0000020990 00000 n
+0000021052 00000 n
+0000021120 00000 n
+0000021188 00000 n
+0000021256 00000 n
+0000021324 00000 n
+0000001461 00000 n
+trailer
+<</Size 500/Prev 98916/XRefStm 1461/Root 462 0 R/Info 104 0 R/ID[<13bfe91fbc302ba3aba2ed6eac74e6df><d2e6130653d5474580ceaf0e9f23c3b7>]>>
+startxref
+0
+%%EOF
+
+463 0 obj<</Length 270/Filter/FlateDecode/C 294/L 278/O 262/S 164>>stream
+x\xDAb```f``\xB3f`c`Pud\xE0c@ >V\xA0(GC\xE0A\x86ÞVˤ٤N\x87\xEDj`\xC0\x8Ft.-N\x9C \xDE\xE5\xDC\xE3\xB0\xE8,\x90\xD1\x99\x91\xC2\xFAh\xC1\xABt\x9D\xCB+\x9FLm_\xAD\xD6Ր\x96\xD6\xD1\xD1\xD1 a00\xBA\xA4\xD9li`9AA\xA0d\xDCJ \x90b`Tn\xD2\xCA@\xACQa\xE0a\x9B\xC8\x{8110E1}\x91C\xA0\x86C\xE01ӄK<\x87\xF27i]\xEBI\xBE6;\x87mi\xD6ރ\xD9\xCFM\x99.H11( ђU\xCC:\x8C8\x80H\x92\xF1\xDC*\x8C2@چ\x81A_H\xA700\xE6\x85i& \xB6\xE2\xC6p\xA00<ĥ\x80\xB4۪\xAC\x9CE;\x9F\xF69)\xCA1\xCE}(\xCB{ \xC0 B&H5
+endstream
+endobj
+499 0 obj<</Size 461/Length 34/Filter/FlateDecode/DecodeParms<</Columns 3/Predictor 12>>/W[1 1 1]/Type/XRef/Index[105 356]>>stream
+x\xDAbbJ``b``Ń3\xCE
+\x83\xD1\xF8\xC5#3>