openwrt: port customized LuCI 0.9 package to flukso v2

This commit is contained in:
Bart Van Der Meerssche 2010-12-19 20:47:20 +01:00
parent c44b378450
commit fbfc451971
4880 changed files with 652046 additions and 2404 deletions

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path="src"/>
<buildpathentry kind="con" path="org.eclipse.dltk.launching.INTERPRETER_CONTAINER"/>
</buildpath>

View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject>
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="luci" buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" name="Preference Configuration" parent="org.eclipse.cdt.build.core.prefbase.cfg">
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341." name="/" resourcePath="">
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051.1470931541" name=""/>
<builder id="org.eclipse.cdt.build.core.settings.default.builder.823611263" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1685234798" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.570824141" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.491129717" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.858094059" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.344617955" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.564526987" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1426860237" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.869454750" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.838425449" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1755775295" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" moduleId="org.eclipse.cdt.core.settings" name="Preference Configuration">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
</storageModule>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="luci.null.949486034" name="luci"/>
</storageModule>
</cproject>

View File

@ -0,0 +1,6 @@
dist/
/host
*.o
*.so
*.swp
/docs

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>luci</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.dltk.lua.core.nature</nature>
</natures>
</projectDescription>

View File

@ -1,11 +1,59 @@
K 25
svn:wc:ra_dav:version-url
V 51
/!svn/ver/6030/luci/tags/0.9.0/contrib/package/luci
V 37
/!svn/ver/6189/luci/branches/luci-0.9
END
NOTICE
K 25
svn:wc:ra_dav:version-url
V 44
/!svn/ver/4830/luci/branches/luci-0.9/NOTICE
END
LICENSE
K 25
svn:wc:ra_dav:version-url
V 45
/!svn/ver/4830/luci/branches/luci-0.9/LICENSE
END
THANKYOU
K 25
svn:wc:ra_dav:version-url
V 46
/!svn/ver/4830/luci/branches/luci-0.9/THANKYOU
END
.project
K 25
svn:wc:ra_dav:version-url
V 46
/!svn/ver/4830/luci/branches/luci-0.9/.project
END
.gitignore
K 25
svn:wc:ra_dav:version-url
V 48
/!svn/ver/4830/luci/branches/luci-0.9/.gitignore
END
INSTALL
K 25
svn:wc:ra_dav:version-url
V 45
/!svn/ver/4830/luci/branches/luci-0.9/INSTALL
END
.cproject
K 25
svn:wc:ra_dav:version-url
V 47
/!svn/ver/4830/luci/branches/luci-0.9/.cproject
END
.buildpath
K 25
svn:wc:ra_dav:version-url
V 48
/!svn/ver/4830/luci/branches/luci-0.9/.buildpath
END
Makefile
K 25
svn:wc:ra_dav:version-url
V 60
/!svn/ver/6030/luci/tags/0.9.0/contrib/package/luci/Makefile
V 46
/!svn/ver/6029/luci/branches/luci-0.9/Makefile
END

View File

@ -1,5 +1,6 @@
K 13
svn:mergeinfo
V 237
/luci/trunk/contrib/package/luci:4883,4886-4890,4941-4944,4950,4958-4959,5007-5013,5022-5023,5028-5118,5130-5143,5145-5153,5155-5161,5177-5182,5184-5189,5193-5194,5198,5315-5316,5516,5530,5902-5903,5908-5911,5919,5956,5958,5987,6024-6025
V 275
/luci/branches/luci-0.8:4367-4369
/luci/trunk:4843-4844,4848-4850,4852,4856-4859,4870-4876,4880-4881,4886-4890,4941-4944,4950,4958-4959,5007-5013,5022-5023,5028-5118,5130-5143,5145-5153,5155-5161,5177-5182,5184-5189,5193-5194,5198,5315-5316,5730-5731,5769,5902-5903,6024-6025
END

View File

@ -1,14 +1,14 @@
10
dir
6231
http://svn.luci.subsignal.org/luci/tags/0.9.0/contrib/package/luci
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9
http://svn.luci.subsignal.org
2010-04-05T17:48:51.300506Z
6030
2010-05-30T23:48:02.464313Z
6189
jow
has-props
@ -26,19 +26,53 @@ has-props
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
ipkg
i18n
dir
Makefile
NOTICE
file
2010-05-08T19:05:28.000000Z
b582584a16f51d5fc2d96aebdc65c95f
2010-04-05T17:48:51.300506Z
6030
2010-09-19T09:58:19.880068Z
d7751281978bfe53ce334bda24f92095
2009-02-22T23:19:25.382122Z
4268
Cyrus
364
LICENSE
file
2010-09-19T09:58:19.880068Z
2b42edef8fa55315f34f2370b4715ca9
2008-03-02T21:52:58.398634Z
1586
jow
has-props
@ -61,5 +95,264 @@ has-props
31424
11356
.project
file
2010-09-19T09:58:19.880068Z
bed96ce6cf0a5dd19ed3bf1f0b812376
2008-11-19T23:02:36.813498Z
3797
Cyrus
has-props
2292
themes
dir
applications
dir
.cproject
file
2010-09-19T09:58:19.880068Z
c42c7758338995b3bedfb8ab222a1a19
2008-11-20T19:22:05.238019Z
3799
Cyrus
11423
libs
dir
.buildpath
file
2010-09-19T09:58:19.880068Z
1e802a07f95960102cb049d015b48aa4
2008-03-02T21:52:58.398634Z
1586
jow
has-props
191
build
dir
contrib
dir
THANKYOU
file
2010-09-19T09:58:19.880068Z
6d80d7a21d10ea211b80cdd378bfc5f0
2008-10-27T15:19:58.537222Z
3634
jow
641
.gitignore
file
2010-09-19T09:58:19.880068Z
6743ff8fc94f58928fb29d7847b8eba2
2008-07-29T21:16:12.332664Z
2695
Cyrus
33
INSTALL
file
2010-09-19T09:58:19.880068Z
f7a20042d051414335a4cd1f00f5902b
2009-01-02T21:42:49.231244Z
3988
Cyrus
670
modules
dir
Makefile
file
2010-09-19T09:58:19.884072Z
0a644040381e3cc5de7da4089e2f4c7d
2010-04-05T17:46:20.798880Z
6029
jow
has-props
2432
po
dir

View File

@ -0,0 +1,5 @@
K 12
svn:keywords
V 2
Id
END

View File

@ -0,0 +1,5 @@
K 12
svn:keywords
V 2
Id
END

View File

@ -0,0 +1,5 @@
K 12
svn:keywords
V 2
Id
END

View File

@ -1,5 +1,6 @@
K 13
svn:mergeinfo
V 316
/luci/trunk/contrib/package/luci/Makefile:4883,4886-4890,4941-4944,4948,4950,4952,4958-4959,5007-5013,5022-5023,5028-5118,5124,5130-5143,5145-5153,5155-5161,5177-5182,5184-5189,5193-5194,5198,5315-5316,5516,5530,5534,5560,5590-5592,5642,5726,5730-5731,5760,5769,5902-5903,5908-5911,5919,5956,5958,5980,5987,6024-6025
V 298
/luci/branches/luci-0.8/Makefile:4367-4369
/luci/trunk/Makefile:4835,4843-4844,4848-4850,4852,4856-4859,4870-4876,4880-4881,4886-4890,4941-4944,4950,4958-4959,5007-5013,5022-5023,5028-5118,5130-5143,5145-5153,5155-5161,5177-5182,5184-5189,5193-5194,5198,5315-5316,5730-5731,5769,5902-5903,6024-6025
END

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path="src"/>
<buildpathentry kind="con" path="org.eclipse.dltk.launching.INTERPRETER_CONTAINER"/>
</buildpath>

View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject>
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="luci" buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" name="Preference Configuration" parent="org.eclipse.cdt.build.core.prefbase.cfg">
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341." name="/" resourcePath="">
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051.1470931541" name=""/>
<builder id="org.eclipse.cdt.build.core.settings.default.builder.823611263" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1685234798" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.570824141" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.491129717" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.858094059" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.344617955" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.564526987" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1426860237" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.869454750" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.838425449" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1755775295" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" moduleId="org.eclipse.cdt.core.settings" name="Preference Configuration">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
</storageModule>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="luci.null.949486034" name="luci"/>
</storageModule>
</cproject>

View File

@ -0,0 +1,6 @@
dist/
/host
*.o
*.so
*.swp
/docs

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>luci</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.dltk.lua.core.nature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,27 @@
LuCI Installation Instructions
TOC:
1. Kamikaze Feed
2. Kamikaze Packages
1. Kamikaze Feed
1. Change to your OpenWrt buildroot
2. Add the following line to your OpenWrt feeds.conf:
src-svn luci http://svn.luci.subsignal.org/luci/trunk/contrib/package
3. Run ./scripts/feeds update
4. Run ./scripts/feeds install -a -p luci
5. Type make menuconfig and you will find luci in the menu "Administration"
2. Kamikaze Packages
1. cd to the "package" directory of your kamikaze buildroot
3. Type: ln -s /path/to/luci/contrib/package/* ./
4. cd to your kamikaze build root and type: make menuconfig
You will find luci in the menu "Administration"

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0.
Contains code from:
coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org)
ltn12/luasocket - Copyright 2004-2007 Diego Nehab
axTLS - Copyright 2008 Cameron Rich

View File

@ -0,0 +1,26 @@
I'd like to thank the following people for contributing to this software:
* Anton Popov
- for rewriting the openwrt.org theme
* Florian Fainelli (OpenWrt)
- for the french translation
* Alina Friedrichsen
- for the reworked translation system, help on standards compliance and accessibility
* Yanira
- several applications and bugreports
Also a big thank you goes to:
* Mono (Freifunk Halle)
- for donating a Linksys WRT54GL for development purposes
* tetzlav (Freifunk Leipzig)
- for donating several boards for testing and his feedback
* Mickey (Freifunk Hannover)
- for his feedback and fixes for the OpenWrt builds

View File

@ -0,0 +1,27 @@
LuCI Installation Instructions
TOC:
1. Kamikaze Feed
2. Kamikaze Packages
1. Kamikaze Feed
1. Change to your OpenWrt buildroot
2. Add the following line to your OpenWrt feeds.conf:
src-svn luci http://svn.luci.subsignal.org/luci/trunk/contrib/package
3. Run ./scripts/feeds update
4. Run ./scripts/feeds install -a -p luci
5. Type make menuconfig and you will find luci in the menu "Administration"
2. Kamikaze Packages
1. cd to the "package" directory of your kamikaze buildroot
3. Type: ln -s /path/to/luci/contrib/package/* ./
4. cd to your kamikaze build root and type: make menuconfig
You will find luci in the menu "Administration"

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0.
Contains code from:
coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org)
ltn12/luasocket - Copyright 2004-2007 Diego Nehab
axTLS - Copyright 2008 Cameron Rich

View File

@ -0,0 +1,26 @@
I'd like to thank the following people for contributing to this software:
* Anton Popov
- for rewriting the openwrt.org theme
* Florian Fainelli (OpenWrt)
- for the french translation
* Alina Friedrichsen
- for the reworked translation system, help on standards compliance and accessibility
* Yanira
- several applications and bugreports
Also a big thank you goes to:
* Mono (Freifunk Halle)
- for donating a Linksys WRT54GL for development purposes
* tetzlav (Freifunk Leipzig)
- for donating several boards for testing and his feedback
* Mickey (Freifunk Hannover)
- for his feedback and fixes for the OpenWrt builds

View File

@ -0,0 +1,5 @@
K 25
svn:wc:ra_dav:version-url
V 50
/!svn/ver/6189/luci/branches/luci-0.9/applications
END

View File

@ -0,0 +1,103 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications
http://svn.luci.subsignal.org
2010-05-30T23:48:02.464313Z
6189
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
luci-openvpn
dir
luci-asterisk
dir
luci-tinyproxy
dir
luci-ushare
dir
luci-ddns
dir
luci-siitwizard
dir
luci-splash
dir
luci-statistics
dir
luci-coovachilli
dir
freifunk-community
dir
luci-polipo
dir
luci-qos
dir
luci-ntpc
dir
luci-hd-idle
dir
luci-initmgr
dir
luci-p910nd
dir
luci-p2pblock
dir
luci-fw
dir
luci-ffwizard-leipzig
dir
luci-livestats
dir
luci-olsr
dir
myapplication
dir
luci-mmc-over-gpio
dir
luci-upnp
dir
luci-samba
dir

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 69
/!svn/ver/4830/luci/branches/luci-0.9/applications/freifunk-community
END
Makefile
K 25
svn:wc:ra_dav:version-url
V 78
/!svn/ver/4830/luci/branches/luci-0.9/applications/freifunk-community/Makefile
END

View File

@ -0,0 +1,6 @@
K 10
svn:ignore
V 5
dist
END

View File

@ -0,0 +1,65 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/freifunk-community
http://svn.luci.subsignal.org
2009-03-25T14:05:16.359497Z
4369
jow
has-props
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
htdocs
dir
Makefile
file
2010-09-19T09:58:15.472088Z
ec5666919ab9e4d439fdf0e4944342a7
2008-09-15T16:52:58.565921Z
3301
Cyrus
59

View File

@ -0,0 +1,2 @@
include ../../build/config.mk
include ../../build/module.mk

View File

@ -0,0 +1,2 @@
include ../../build/config.mk
include ../../build/module.mk

View File

@ -0,0 +1,17 @@
K 25
svn:wc:ra_dav:version-url
V 76
/!svn/ver/4830/luci/branches/luci-0.9/applications/freifunk-community/htdocs
END
cgi-bin-nodes.html
K 25
svn:wc:ra_dav:version-url
V 95
/!svn/ver/4830/luci/branches/luci-0.9/applications/freifunk-community/htdocs/cgi-bin-nodes.html
END
cgi-bin-status.html
K 25
svn:wc:ra_dav:version-url
V 96
/!svn/ver/4830/luci/branches/luci-0.9/applications/freifunk-community/htdocs/cgi-bin-status.html
END

View File

@ -0,0 +1,96 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/freifunk-community/htdocs
http://svn.luci.subsignal.org
2008-09-29T16:57:35.553221Z
3462
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
cgi-bin-nodes.html
file
2010-09-19T09:58:15.468071Z
44291dee7890a4e4eaf518b3716cc834
2008-09-15T22:28:45.823009Z
3314
Cyrus
447
cgi-bin-status.html
file
2010-09-19T09:58:15.468071Z
44291dee7890a4e4eaf518b3716cc834
2008-09-29T16:57:35.553221Z
3462
jow
447

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci/freifunk/olsr" />
</head>
<body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/luci/freifunk/olsr">LuCI - Lua Configuration Interface</a>
</body>
</html>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci/freifunk/olsr" />
</head>
<body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/luci/freifunk/olsr">LuCI - Lua Configuration Interface</a>
</body>
</html>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci/freifunk/olsr" />
</head>
<body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/luci/freifunk/olsr">LuCI - Lua Configuration Interface</a>
</body>
</html>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci/freifunk/olsr" />
</head>
<body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/luci/freifunk/olsr">LuCI - Lua Configuration Interface</a>
</body>
</html>

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 64
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk
END
Makefile
K 25
svn:wc:ra_dav:version-url
V 73
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/Makefile
END

View File

@ -0,0 +1,6 @@
K 10
svn:ignore
V 5
dist
END

View File

@ -0,0 +1,71 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk
http://svn.luci.subsignal.org
2009-06-08T20:00:50.244792Z
4806
jow
has-props
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
root
dir
luasrc
dir
ipkg
dir
Makefile
file
2010-09-19T09:58:14.788070Z
163f74e3092245d58da2709c77536280
2009-05-19T02:18:28.983459Z
4560
jow
75

View File

@ -0,0 +1,4 @@
PO = asterisk
include ../../build/config.mk
include ../../build/module.mk

View File

@ -0,0 +1,4 @@
PO = asterisk
include ../../build/config.mk
include ../../build/module.mk

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 69
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/ipkg
END
postinst
K 25
svn:wc:ra_dav:version-url
V 78
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/ipkg/postinst
END

View File

@ -0,0 +1,62 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/ipkg
http://svn.luci.subsignal.org
2009-06-08T20:00:50.244792Z
4806
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
postinst
file
2010-09-19T09:58:14.788070Z
41ffd7376524f52cc6a1f9b03cb65f01
2009-06-08T20:00:50.244792Z
4806
jow
has-props
184

View File

@ -0,0 +1,5 @@
K 14
svn:executable
V 1
*
END

View File

@ -0,0 +1,5 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/luci-asterisk ) && rm -f /etc/uci-defaults/luci-asterisk
/etc/init.d/asterisk enabled || /etc/init.d/asterisk enable
}

View File

@ -0,0 +1,5 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/luci-asterisk ) && rm -f /etc/uci-defaults/luci-asterisk
/etc/init.d/asterisk enabled || /etc/init.d/asterisk enable
}

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 71
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc
END
asterisk.lua
K 25
svn:wc:ra_dav:version-url
V 84
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/asterisk.lua
END

View File

@ -0,0 +1,74 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/luasrc
http://svn.luci.subsignal.org
2009-05-19T02:35:25.830252Z
4561
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
model
dir
controller
dir
asterisk
dir
asterisk.lua
file
2010-09-19T09:58:14.780068Z
175948871412abf10cff516fb6bb59ef
2009-03-30T19:29:37.713765Z
4397
jow
has-props
18089
view
dir

View File

@ -0,0 +1,5 @@
K 12
svn:keywords
V 2
Id
END

View File

@ -0,0 +1,759 @@
--[[
LuCI - Lua Configuration Interface
Asterisk PBX interface library
Copyright 2009 Jo-Philipp Wich <xm@subsignal.org>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module("luci.asterisk", package.seeall)
require("luci.asterisk.cc_idd")
local _io = require("io")
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
AST_BIN = "/usr/sbin/asterisk"
AST_FLAGS = "-r -x"
--- LuCI Asterisk - Resync uci context
function uci_resync()
uci = luci.model.uci.cursor()
end
--- LuCI Asterisk io interface
-- Handles low level io.
-- @type module
io = luci.util.class()
--- Execute command and return output
-- @param command String containing the command to execute
-- @return String containing the command output
function io.exec(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
local buffer = fh:read("*a")
fh:close()
return buffer
end
--- Execute command and invoke given callback for each readed line
-- @param command String containing the command to execute
-- @param callback Function to call back for each line
-- @return Always true
function io.execl(command, callback)
local ln
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
repeat
ln = fh:read("*l")
callback(ln)
until not ln
fh:close()
return true
end
--- Execute command and return an iterator that returns one line per invokation
-- @param command String containing the command to execute
-- @return Iterator function
function io.execi(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
return function()
local ln = fh:read("*l")
if not ln then fh:close() end
return ln
end
end
--- LuCI Asterisk - core status
core = luci.util.class()
--- Retrive version string.
-- @return String containing the reported asterisk version
function core.version(self)
local version = io.exec("core show version")
return version:gsub(" *\n", "")
end
--- LuCI Asterisk - SIP information.
-- @type module
sip = luci.util.class()
--- Get a list of known SIP peers
-- @return Table containing each SIP peer
function sip.peers(self)
local head = false
local peers = { }
for line in io.execi("sip show peers") do
if not head then
head = true
elseif not line:match(" sip peers ") then
local online, delay, id, uid
local name, host, dyn, nat, acl, port, status =
line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)")
if host == '(Unspecified)' then host = nil end
if port == '0' then port = nil else port = tonumber(port) end
dyn = ( dyn == 'D' and true or false )
nat = ( nat == 'N' and true or false )
acl = ( acl ~= ' ' and true or false )
online, delay = status:match("(OK) %((%d+) ms%)")
if online == 'OK' then
online = true
delay = tonumber(delay)
elseif status ~= 'Unmonitored' then
online = false
delay = 0
else
online = nil
delay = 0
end
id, uid = name:match("(.+)/(.+)")
if not ( id and uid ) then
id = name .. "..."
uid = nil
end
peers[#peers+1] = {
online = online,
delay = delay,
name = id,
user = uid,
dynamic = dyn,
nat = nat,
acl = acl,
host = host,
port = port
}
end
end
return peers
end
--- Get informations of given SIP peer
-- @param peer String containing the name of the SIP peer
function sip.peer(peer)
local info = { }
local keys = { }
for line in io.execi("sip show peer " .. peer) do
if #line > 0 then
local key, val = line:match("(.-) *: +(.*)")
if key and val then
key = key:gsub("^ +",""):gsub(" +$", "")
val = val:gsub("^ +",""):gsub(" +$", "")
if key == "* Name" then
key = "Name"
elseif key == "Addr->IP" then
info.address, info.port = val:match("(.+) Port (.+)")
info.port = tonumber(info.port)
elseif key == "Status" then
info.online, info.delay = val:match("(OK) %((%d+) ms%)")
if info.online == 'OK' then
info.online = true
info.delay = tonumber(info.delay)
elseif status ~= 'Unmonitored' then
info.online = false
info.delay = 0
else
info.online = nil
info.delay = 0
end
end
if val == 'Yes' or val == 'yes' or val == '<Set>' then
val = true
elseif val == 'No' or val == 'no' then
val = false
elseif val == '<Not set>' or val == '(none)' then
val = nil
end
keys[#keys+1] = key
info[key] = val
end
end
end
return info, keys
end
--- LuCI Asterisk - Internal helpers
-- @type module
tools = luci.util.class()
--- Convert given value to a list of tokens. Split by white space.
-- @param val String or table value
-- @return Table containing tokens
function tools.parse_list(v)
local tokens = { }
v = type(v) == "table" and v or { v }
for _, v in ipairs(v) do
if type(v) == "string" then
for v in v:gmatch("(%S+)") do
tokens[#tokens+1] = v
end
end
end
return tokens
end
--- Convert given list to a collection of hyperlinks
-- @param list Table of tokens
-- @param url String pattern or callback function to construct urls (optional)
-- @param sep String containing the seperator (optional, default is ", ")
-- @return String containing the html fragment
function tools.hyperlinks(list, url, sep)
local html
local function mkurl(p, t)
if type(p) == "string" then
return p:format(t)
elseif type(p) == "function" then
return p(t)
else
return '#'
end
end
list = list or { }
url = url or "%s"
sep = sep or ", "
for _, token in ipairs(list) do
html = ( html and html .. sep or '' ) ..
'<a href="%s">%s</a>' %{ mkurl(url, token), token }
end
return html or ''
end
--- LuCI Asterisk - International Direct Dialing Prefixes
-- @type module
idd = luci.util.class()
--- Lookup the country name for the given IDD code.
-- @param country String containing IDD code
-- @return String containing the country name
function idd.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[3] == tostring(c) then
return v[1]
end
end
end
--- Lookup the country code for the given IDD code.
-- @param country String containing IDD code
-- @return Table containing the country code(s)
function idd.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
elseif v[3] == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Lookup the IDD code(s) for the given country.
-- @param idd String containing the country name
-- @return Table containing the IDD code(s)
function idd.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Populate given CBI field with IDD codes.
-- @param field CBI option object
-- @return (nothing)
function idd.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][3]) == "table"
and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
if v[3][1] == val[1] then
return "_%i" % i
end
else
if v[3] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Country Code Prefixes
-- @type module
cc = luci.util.class()
--- Lookup the country name for the given CC code.
-- @param country String containing CC code
-- @return String containing the country name
function cc.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[2] == tostring(c) then
return v[1]
end
end
end
--- Lookup the international dialing code for the given CC code.
-- @param cc String containing CC code
-- @return String containing IDD code
function cc.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
elseif v[2] == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Lookup the CC code(s) for the given country.
-- @param country String containing the country name
-- @return Table containing the CC code(s)
function cc.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Populate given CBI field with CC codes.
-- @param field CBI option object
-- @return (nothing)
function cc.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][2]) == "table"
and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
if v[2][1] == val[1] then
return "_%i" % i
end
else
if v[2] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Dialzone
-- @type module
dialzone = luci.util.class()
--- Parse a dialzone section
-- @param zone Table containing the zone info
-- @return Table with parsed information
function dialzone.parse(z)
if z['.name'] then
return {
trunks = tools.parse_list(z.uses),
name = z['.name'],
description = z.description or z['.name'],
addprefix = z.addprefix,
matches = tools.parse_list(z.match),
intlmatches = tools.parse_list(z.international),
countrycode = z.countrycode,
localzone = z.localzone,
localprefix = z.localprefix
}
end
end
--- Get a list of known dial zones
-- @return Associative table of zones and table of zone names
function dialzone.zones()
local zones = { }
local znames = { }
uci:foreach("asterisk", "dialzone",
function(z)
zones[z['.name']] = dialzone.parse(z)
znames[#znames+1] = z['.name']
end)
return zones, znames
end
--- Get a specific dial zone
-- @param name Name of the dial zone
-- @return Table containing zone information
function dialzone.zone(n)
local zone
uci:foreach("asterisk", "dialzone",
function(z)
if z['.name'] == n then
zone = dialzone.parse(z)
end
end)
return zone
end
--- Find uci section hash for given zone number
-- @param idx Zone number
-- @return String containing the uci hash pointing to the section
function dialzone.ucisection(i)
local hash
local index = 1
i = tonumber(i)
uci:foreach("asterisk", "dialzone",
function(z)
if not hash and index == i then
hash = z['.name']
end
index = index + 1
end)
return hash
end
--- LuCI Asterisk - Voicemailbox
-- @type module
voicemail = luci.util.class()
--- Parse a voicemail section
-- @param zone Table containing the mailbox info
-- @return Table with parsed information
function voicemail.parse(z)
if z.number and #z.number > 0 then
local v = {
id = '%s@%s' %{ z.number, z.context or 'default' },
number = z.number,
context = z.context or 'default',
name = z.name or z['.name'] or 'OpenWrt',
zone = z.zone or 'homeloc',
password = z.password or '0000',
email = z.email or '',
page = z.page or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.dialplan and #s.dialplan > 0 and
s.voicebox == v.number
then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known voicemail boxes
-- @return Associative table of boxes and table of box numbers
function voicemail.boxes()
local vboxes = { }
local vnames = { }
uci:foreach("asterisk", "voicemail",
function(z)
local v = voicemail.parse(z)
if v then
local n = '%s@%s' %{ v.number, v.context }
vboxes[n] = v
vnames[#vnames+1] = n
end
end)
return vboxes, vnames
end
--- Get a specific voicemailbox
-- @param number Number of the voicemailbox
-- @return Table containing mailbox information
function voicemail.box(n)
local box
n = n:gsub("@.+$","")
uci:foreach("asterisk", "voicemail",
function(z)
if z.number == tostring(n) then
box = voicemail.parse(z)
end
end)
return box
end
--- Find all voicemailboxes within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to mailbox info
function voicemail.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local boxes = { }
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local box = voicemail.box(s.voicebox)
if box then
boxes[s.extension] = box
end
end
end)
return boxes
end
--- Remove voicemailbox and associated extensions from config
-- @param box Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function voicemail.remove(v, ctx)
ctx = ctx or uci
local box = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box})
local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - MeetMe Conferences
-- @type module
meetme = luci.util.class()
--- Parse a meetme section
-- @param room Table containing the room info
-- @return Table with parsed information
function meetme.parse(r)
if r.room and #r.room > 0 then
local v = {
room = r.room,
pin = r.pin or '',
adminpin = r.adminpin or '',
description = r._description or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.dialplan and #s.dialplan > 0 and s.room == v.room then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known meetme rooms
-- @return Associative table of rooms and table of room numbers
function meetme.rooms()
local mrooms = { }
local mnames = { }
uci:foreach("asterisk", "meetme",
function(r)
local v = meetme.parse(r)
if v then
mrooms[v.room] = v
mnames[#mnames+1] = v.room
end
end)
return mrooms, mnames
end
--- Get a specific meetme room
-- @param number Number of the room
-- @return Table containing room information
function meetme.room(n)
local room
uci:foreach("asterisk", "meetme",
function(r)
if r.room == tostring(n) then
room = meetme.parse(r)
end
end)
return room
end
--- Find all meetme rooms within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to room info
function meetme.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local rooms = { }
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local room = meetme.room(s.room)
if room then
rooms[s.extension] = room
end
end
end)
return rooms
end
--- Remove meetme room and associated extensions from config
-- @param room Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function meetme.remove(v, ctx)
ctx = ctx or uci
local room = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "meetme", {room=room})
local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - Dialplan
-- @type module
dialplan = luci.util.class()
--- Parse a dialplan section
-- @param plan Table containing the plan info
-- @return Table with parsed information
function dialplan.parse(z)
if z['.name'] then
local plan = {
zones = { },
name = z['.name'],
description = z.description or z['.name']
}
-- dialzones
for _, name in ipairs(tools.parse_list(z.include)) do
local zone = dialzone.zone(name)
if zone then
plan.zones[#plan.zones+1] = zone
end
end
-- voicemailboxes
plan.voicemailboxes = voicemail.in_dialplan(plan)
-- meetme conferences
plan.meetmerooms = meetme.in_dialplan(plan)
return plan
end
end
--- Get a list of known dial plans
-- @return Associative table of plans and table of plan names
function dialplan.plans()
local plans = { }
local pnames = { }
uci:foreach("asterisk", "dialplan",
function(p)
plans[p['.name']] = dialplan.parse(p)
pnames[#pnames+1] = p['.name']
end)
return plans, pnames
end
--- Get a specific dial plan
-- @param name Name of the dial plan
-- @return Table containing plan information
function dialplan.plan(n)
local plan
uci:foreach("asterisk", "dialplan",
function(p)
if p['.name'] == n then
plan = dialplan.parse(p)
end
end)
return plan
end

View File

@ -0,0 +1,759 @@
--[[
LuCI - Lua Configuration Interface
Asterisk PBX interface library
Copyright 2009 Jo-Philipp Wich <xm@subsignal.org>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id: asterisk.lua 4397 2009-03-30 19:29:37Z jow $
]]--
module("luci.asterisk", package.seeall)
require("luci.asterisk.cc_idd")
local _io = require("io")
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
AST_BIN = "/usr/sbin/asterisk"
AST_FLAGS = "-r -x"
--- LuCI Asterisk - Resync uci context
function uci_resync()
uci = luci.model.uci.cursor()
end
--- LuCI Asterisk io interface
-- Handles low level io.
-- @type module
io = luci.util.class()
--- Execute command and return output
-- @param command String containing the command to execute
-- @return String containing the command output
function io.exec(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
local buffer = fh:read("*a")
fh:close()
return buffer
end
--- Execute command and invoke given callback for each readed line
-- @param command String containing the command to execute
-- @param callback Function to call back for each line
-- @return Always true
function io.execl(command, callback)
local ln
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
repeat
ln = fh:read("*l")
callback(ln)
until not ln
fh:close()
return true
end
--- Execute command and return an iterator that returns one line per invokation
-- @param command String containing the command to execute
-- @return Iterator function
function io.execi(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
return function()
local ln = fh:read("*l")
if not ln then fh:close() end
return ln
end
end
--- LuCI Asterisk - core status
core = luci.util.class()
--- Retrive version string.
-- @return String containing the reported asterisk version
function core.version(self)
local version = io.exec("core show version")
return version:gsub(" *\n", "")
end
--- LuCI Asterisk - SIP information.
-- @type module
sip = luci.util.class()
--- Get a list of known SIP peers
-- @return Table containing each SIP peer
function sip.peers(self)
local head = false
local peers = { }
for line in io.execi("sip show peers") do
if not head then
head = true
elseif not line:match(" sip peers ") then
local online, delay, id, uid
local name, host, dyn, nat, acl, port, status =
line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)")
if host == '(Unspecified)' then host = nil end
if port == '0' then port = nil else port = tonumber(port) end
dyn = ( dyn == 'D' and true or false )
nat = ( nat == 'N' and true or false )
acl = ( acl ~= ' ' and true or false )
online, delay = status:match("(OK) %((%d+) ms%)")
if online == 'OK' then
online = true
delay = tonumber(delay)
elseif status ~= 'Unmonitored' then
online = false
delay = 0
else
online = nil
delay = 0
end
id, uid = name:match("(.+)/(.+)")
if not ( id and uid ) then
id = name .. "..."
uid = nil
end
peers[#peers+1] = {
online = online,
delay = delay,
name = id,
user = uid,
dynamic = dyn,
nat = nat,
acl = acl,
host = host,
port = port
}
end
end
return peers
end
--- Get informations of given SIP peer
-- @param peer String containing the name of the SIP peer
function sip.peer(peer)
local info = { }
local keys = { }
for line in io.execi("sip show peer " .. peer) do
if #line > 0 then
local key, val = line:match("(.-) *: +(.*)")
if key and val then
key = key:gsub("^ +",""):gsub(" +$", "")
val = val:gsub("^ +",""):gsub(" +$", "")
if key == "* Name" then
key = "Name"
elseif key == "Addr->IP" then
info.address, info.port = val:match("(.+) Port (.+)")
info.port = tonumber(info.port)
elseif key == "Status" then
info.online, info.delay = val:match("(OK) %((%d+) ms%)")
if info.online == 'OK' then
info.online = true
info.delay = tonumber(info.delay)
elseif status ~= 'Unmonitored' then
info.online = false
info.delay = 0
else
info.online = nil
info.delay = 0
end
end
if val == 'Yes' or val == 'yes' or val == '<Set>' then
val = true
elseif val == 'No' or val == 'no' then
val = false
elseif val == '<Not set>' or val == '(none)' then
val = nil
end
keys[#keys+1] = key
info[key] = val
end
end
end
return info, keys
end
--- LuCI Asterisk - Internal helpers
-- @type module
tools = luci.util.class()
--- Convert given value to a list of tokens. Split by white space.
-- @param val String or table value
-- @return Table containing tokens
function tools.parse_list(v)
local tokens = { }
v = type(v) == "table" and v or { v }
for _, v in ipairs(v) do
if type(v) == "string" then
for v in v:gmatch("(%S+)") do
tokens[#tokens+1] = v
end
end
end
return tokens
end
--- Convert given list to a collection of hyperlinks
-- @param list Table of tokens
-- @param url String pattern or callback function to construct urls (optional)
-- @param sep String containing the seperator (optional, default is ", ")
-- @return String containing the html fragment
function tools.hyperlinks(list, url, sep)
local html
local function mkurl(p, t)
if type(p) == "string" then
return p:format(t)
elseif type(p) == "function" then
return p(t)
else
return '#'
end
end
list = list or { }
url = url or "%s"
sep = sep or ", "
for _, token in ipairs(list) do
html = ( html and html .. sep or '' ) ..
'<a href="%s">%s</a>' %{ mkurl(url, token), token }
end
return html or ''
end
--- LuCI Asterisk - International Direct Dialing Prefixes
-- @type module
idd = luci.util.class()
--- Lookup the country name for the given IDD code.
-- @param country String containing IDD code
-- @return String containing the country name
function idd.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[3] == tostring(c) then
return v[1]
end
end
end
--- Lookup the country code for the given IDD code.
-- @param country String containing IDD code
-- @return Table containing the country code(s)
function idd.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
elseif v[3] == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Lookup the IDD code(s) for the given country.
-- @param idd String containing the country name
-- @return Table containing the IDD code(s)
function idd.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Populate given CBI field with IDD codes.
-- @param field CBI option object
-- @return (nothing)
function idd.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][3]) == "table"
and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
if v[3][1] == val[1] then
return "_%i" % i
end
else
if v[3] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Country Code Prefixes
-- @type module
cc = luci.util.class()
--- Lookup the country name for the given CC code.
-- @param country String containing CC code
-- @return String containing the country name
function cc.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[2] == tostring(c) then
return v[1]
end
end
end
--- Lookup the international dialing code for the given CC code.
-- @param cc String containing CC code
-- @return String containing IDD code
function cc.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
elseif v[2] == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Lookup the CC code(s) for the given country.
-- @param country String containing the country name
-- @return Table containing the CC code(s)
function cc.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Populate given CBI field with CC codes.
-- @param field CBI option object
-- @return (nothing)
function cc.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][2]) == "table"
and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
if v[2][1] == val[1] then
return "_%i" % i
end
else
if v[2] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Dialzone
-- @type module
dialzone = luci.util.class()
--- Parse a dialzone section
-- @param zone Table containing the zone info
-- @return Table with parsed information
function dialzone.parse(z)
if z['.name'] then
return {
trunks = tools.parse_list(z.uses),
name = z['.name'],
description = z.description or z['.name'],
addprefix = z.addprefix,
matches = tools.parse_list(z.match),
intlmatches = tools.parse_list(z.international),
countrycode = z.countrycode,
localzone = z.localzone,
localprefix = z.localprefix
}
end
end
--- Get a list of known dial zones
-- @return Associative table of zones and table of zone names
function dialzone.zones()
local zones = { }
local znames = { }
uci:foreach("asterisk", "dialzone",
function(z)
zones[z['.name']] = dialzone.parse(z)
znames[#znames+1] = z['.name']
end)
return zones, znames
end
--- Get a specific dial zone
-- @param name Name of the dial zone
-- @return Table containing zone information
function dialzone.zone(n)
local zone
uci:foreach("asterisk", "dialzone",
function(z)
if z['.name'] == n then
zone = dialzone.parse(z)
end
end)
return zone
end
--- Find uci section hash for given zone number
-- @param idx Zone number
-- @return String containing the uci hash pointing to the section
function dialzone.ucisection(i)
local hash
local index = 1
i = tonumber(i)
uci:foreach("asterisk", "dialzone",
function(z)
if not hash and index == i then
hash = z['.name']
end
index = index + 1
end)
return hash
end
--- LuCI Asterisk - Voicemailbox
-- @type module
voicemail = luci.util.class()
--- Parse a voicemail section
-- @param zone Table containing the mailbox info
-- @return Table with parsed information
function voicemail.parse(z)
if z.number and #z.number > 0 then
local v = {
id = '%s@%s' %{ z.number, z.context or 'default' },
number = z.number,
context = z.context or 'default',
name = z.name or z['.name'] or 'OpenWrt',
zone = z.zone or 'homeloc',
password = z.password or '0000',
email = z.email or '',
page = z.page or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.dialplan and #s.dialplan > 0 and
s.voicebox == v.number
then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known voicemail boxes
-- @return Associative table of boxes and table of box numbers
function voicemail.boxes()
local vboxes = { }
local vnames = { }
uci:foreach("asterisk", "voicemail",
function(z)
local v = voicemail.parse(z)
if v then
local n = '%s@%s' %{ v.number, v.context }
vboxes[n] = v
vnames[#vnames+1] = n
end
end)
return vboxes, vnames
end
--- Get a specific voicemailbox
-- @param number Number of the voicemailbox
-- @return Table containing mailbox information
function voicemail.box(n)
local box
n = n:gsub("@.+$","")
uci:foreach("asterisk", "voicemail",
function(z)
if z.number == tostring(n) then
box = voicemail.parse(z)
end
end)
return box
end
--- Find all voicemailboxes within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to mailbox info
function voicemail.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local boxes = { }
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local box = voicemail.box(s.voicebox)
if box then
boxes[s.extension] = box
end
end
end)
return boxes
end
--- Remove voicemailbox and associated extensions from config
-- @param box Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function voicemail.remove(v, ctx)
ctx = ctx or uci
local box = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box})
local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - MeetMe Conferences
-- @type module
meetme = luci.util.class()
--- Parse a meetme section
-- @param room Table containing the room info
-- @return Table with parsed information
function meetme.parse(r)
if r.room and #r.room > 0 then
local v = {
room = r.room,
pin = r.pin or '',
adminpin = r.adminpin or '',
description = r._description or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.dialplan and #s.dialplan > 0 and s.room == v.room then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known meetme rooms
-- @return Associative table of rooms and table of room numbers
function meetme.rooms()
local mrooms = { }
local mnames = { }
uci:foreach("asterisk", "meetme",
function(r)
local v = meetme.parse(r)
if v then
mrooms[v.room] = v
mnames[#mnames+1] = v.room
end
end)
return mrooms, mnames
end
--- Get a specific meetme room
-- @param number Number of the room
-- @return Table containing room information
function meetme.room(n)
local room
uci:foreach("asterisk", "meetme",
function(r)
if r.room == tostring(n) then
room = meetme.parse(r)
end
end)
return room
end
--- Find all meetme rooms within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to room info
function meetme.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local rooms = { }
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local room = meetme.room(s.room)
if room then
rooms[s.extension] = room
end
end
end)
return rooms
end
--- Remove meetme room and associated extensions from config
-- @param room Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function meetme.remove(v, ctx)
ctx = ctx or uci
local room = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "meetme", {room=room})
local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - Dialplan
-- @type module
dialplan = luci.util.class()
--- Parse a dialplan section
-- @param plan Table containing the plan info
-- @return Table with parsed information
function dialplan.parse(z)
if z['.name'] then
local plan = {
zones = { },
name = z['.name'],
description = z.description or z['.name']
}
-- dialzones
for _, name in ipairs(tools.parse_list(z.include)) do
local zone = dialzone.zone(name)
if zone then
plan.zones[#plan.zones+1] = zone
end
end
-- voicemailboxes
plan.voicemailboxes = voicemail.in_dialplan(plan)
-- meetme conferences
plan.meetmerooms = meetme.in_dialplan(plan)
return plan
end
end
--- Get a list of known dial plans
-- @return Associative table of plans and table of plan names
function dialplan.plans()
local plans = { }
local pnames = { }
uci:foreach("asterisk", "dialplan",
function(p)
plans[p['.name']] = dialplan.parse(p)
pnames[#pnames+1] = p['.name']
end)
return plans, pnames
end
--- Get a specific dial plan
-- @param name Name of the dial plan
-- @return Table containing plan information
function dialplan.plan(n)
local plan
uci:foreach("asterisk", "dialplan",
function(p)
if p['.name'] == n then
plan = dialplan.parse(p)
end
end)
return plan
end

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 80
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/asterisk
END
cc_idd.lua
K 25
svn:wc:ra_dav:version-url
V 91
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/asterisk/cc_idd.lua
END

View File

@ -0,0 +1,62 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/asterisk
http://svn.luci.subsignal.org
2009-03-22T12:48:33.778183Z
4360
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
cc_idd.lua
file
2010-09-19T09:58:14.748069Z
32b23f7e929efca7b4521012d4bf5093
2009-03-22T12:48:33.778183Z
4360
jow
has-props
7735

View File

@ -0,0 +1,5 @@
K 12
svn:keywords
V 2
Id
END

View File

@ -0,0 +1,254 @@
--[[
LuCI - Asterisk - International Direct Dialing Prefixes and Country Codes
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
]]--
module "luci.asterisk.cc_idd"
CC_IDD = {
-- Country, CC, IDD
{ "Afghanistan", "93", "00" },
{ "Albania", "355", "00" },
{ "Algeria", "213", "00" },
{ "American Samoa", "684", "00" },
{ "Andorra", "376", "00" },
{ "Angola", "244", "00" },
{ "Anguilla", "264", "011" },
{ "Antarctica", "672", "" },
{ "Antigua", "268", "011" },
{ "Argentina", "54", "00" },
{ "Armenia", "374", "00" },
{ "Aruba", "297", "00" },
{ "Ascension Island", "247", "00" },
{ "Australia", "61", "0011" },
{ "Austria", "43", "00" },
{ "Azberbaijan", "994", "00" },
{ "Bahamas", "242", "011" },
{ "Bahrain", "973", "00" },
{ "Bangladesh", "880", "00" },
{ "Barbados", "246", "011" },
{ "Barbuda", "268", "011" },
{ "Belarus", "375", "810" },
{ "Belgium", "32", "00" },
{ "Belize", "501", "00" },
{ "Benin", "229", "00" },
{ "Bermuda", "441", "011" },
{ "Bhutan", "975", "00" },
{ "Bolivia", "591", "00" },
{ "Bosnia", "387", "00" },
{ "Botswana", "267", "00" },
{ "Brazil", "55", "00" },
{ "British Virgin Islands", "284", "011" },
{ "Brunei", "673", "00" },
{ "Bulgaria", "359", "00" },
{ "Burkina Faso", "226", "00" },
{ "Burma (Myanmar)", "95", "00" },
{ "Burundi", "257", "00" },
{ "Cambodia", "855", "001" },
{ "Cameroon", "237", "00" },
{ "Canada", "1", "011" },
{ "Cape Verde Islands", "238", "0" },
{ "Cayman Islands", "345", "011" },
{ "Central African Rep.", "236", "00" },
{ "Chad", "235", "15" },
{ "Chile", "56", "00" },
{ "China", "86", "00" },
{ "Christmas Island", "61", "0011" },
{ "Cocos Islands", "61", "0011" },
{ "Colombia", "57", "00" },
{ "Comoros", "269", "00" },
{ "Congo", "242", "00" },
{ "Congo, Dem. Rep. of", "243", "00" },
{ "Cook Islands", "682", "00" },
{ "Costa Rica", "506", "00" },
{ "Croatia", "385", "00" },
{ "Cuba", "53", "119" },
{ "Cyprus", "357", "00" },
{ "Czech Republic", "420", "00" },
{ "Denmark", "45", "00" },
{ "Diego Garcia", "246", "00" },
{ "Djibouti", "253", "00" },
{ "Dominica", "767", "011" },
{ "Dominican Rep.", "809", "011" },
{ "Ecuador", "593", "00" },
{ "Egypt", "20", "00" },
{ "El Salvador", "503", "00" },
{ "Equatorial Guinea", "240", "00" },
{ "Eritrea", "291", "00" },
{ "Estonia", "372", "00" },
{ "Ethiopia", "251", "00" },
{ "Faeroe Islands", "298", "00" },
{ "Falkland Islands", "500", "00" },
{ "Fiji Islands", "679", "00" },
{ "Finland", "358", "00" },
{ "France", "33", "00" },
{ "French Antilles", "596", "00" },
{ "French Guiana", "594", "00" },
{ "French Polynesia", "689", "00" },
{ "Gabon", "241", "00" },
{ "Gambia", "220", "00" },
{ "Georgia", "995", "810" },
{ "Germany", "49", "00" },
{ "Ghana", "233", "00" },
{ "Gibraltar", "350", "00" },
{ "Greece", "30", "00" },
{ "Greenland", "299", "00" },
{ "Grenada", "473", "011" },
{ "Guadeloupe", "590", "00" },
{ "Guam", "671", "011" },
{ "Guantanamo Bay", "5399", "00" },
{ "Guatemala", "502", "00" },
{ "Guinea", "224", "00" },
{ "Guinea Bissau", "245", "00" },
{ "Guyana", "592", "001" },
{ "Haiti", "509", "00" },
{ "Honduras", "504", "00" },
{ "Hong Kong", "852", "001" },
{ "Hungary", "36", "00" },
{ "Iceland", "354", "00" },
{ "India", "91", "00" },
{ "Indonesia", "62", { "001", "008" } },
{ "Iran", "98", "00" },
{ "Iraq", "964", "00" },
{ "Ireland", "353", "00" },
{ "Israel", "972", "00" },
{ "Italy", "39", "00" },
{ "Ivory Coast", "225", "00" },
{ "Jamaica", "876", "011" },
{ "Japan", "81", "001" },
{ "Jordan", "962", "00" },
{ "Kazakhstan", "7", "810" },
{ "Kenya", "254", "000" },
{ "Kiribati", "686", "00" },
{ "Korea, North", "850", "00" },
{ "Korea, South", "82", "001" },
{ "Kuwait", "965", "00" },
{ "Kyrgyzstan", "996", "00" },
{ "Laos", "856", "00" },
{ "Latvia", "371", "00" },
{ "Lebanon", "961", "00" },
{ "Lesotho", "266", "00" },
{ "Liberia", "231", "00" },
{ "Libya", "218", "00" },
{ "Liechtenstein", "423", "00" },
{ "Lithuania", "370", "00" },
{ "Luxembourg", "352", "00" },
{ "Macau", "853", "00" },
{ "Macedonia", "389", "00" },
{ "Madagascar", "261", "00" },
{ "Malawi", "265", "00" },
{ "Malaysia", "60", "00" },
{ "Maldives", "960", "00" },
{ "Mali", "223", "00" },
{ "Malta", "356", "00" },
{ "Mariana Islands", "670", "011" },
{ "Marshall Islands", "692", "011" },
{ "Martinique", "596", "00" },
{ "Mauritania", "222", "00" },
{ "Mauritius", "230", "00" },
{ "Mayotte Islands", "269", "00" },
{ "Mexico", "52", "00" },
{ "Micronesia", "691", "011" },
{ "Midway Island", "808", "011" },
{ "Moldova", "373", "00" },
{ "Monaco", "377", "00" },
{ "Mongolia", "976", "001" },
{ "Montserrat", "664", "011" },
{ "Morocco", "212", "00" },
{ "Mozambique", "258", "00" },
{ "Myanmar (Burma)", "95", "00" },
{ "Namibia", "264", "00" },
{ "Nauru", "674", "00" },
{ "Nepal", "977", "00" },
{ "Netherlands", "31", "00" },
{ "Netherlands Antilles", "599", "00" },
{ "Nevis", "869", "011" },
{ "New Caledonia", "687", "00" },
{ "New Zealand", "64", "00" },
{ "Nicaragua", "505", "00" },
{ "Niger", "227", "00" },
{ "Nigeria", "234", "009" },
{ "Niue", "683", "00" },
{ "Norfolk Island", "672", "00" },
{ "Norway", "47", "00" },
{ "Oman", "968", "00" },
{ "Pakistan", "92", "00" },
{ "Palau", "680", "011" },
{ "Palestine", "970", "00" },
{ "Panama", "507", "00" },
{ "Papua New Guinea", "675", "05" },
{ "Paraguay", "595", "002" },
{ "Peru", "51", "00" },
{ "Philippines", "63", "00" },
{ "Poland", "48", "00" },
{ "Portugal", "351", "00" },
{ "Puerto Rico", { "787", "939" }, "011" },
{ "Qatar", "974", "00" },
{ "Reunion Island", "262", "00" },
{ "Romania", "40", "00" },
{ "Russia", "7", "810" },
{ "Rwanda", "250", "00" },
{ "St. Helena", "290", "00" },
{ "St. Kitts", "869", "011" },
{ "St. Lucia", "758", "011" },
{ "St. Perre & Miquelon", "508", "00" },
{ "St. Vincent", "784", "011" },
{ "San Marino", "378", "00" },
{ "Sao Tome & Principe", "239", "00" },
{ "Saudi Arabia", "966", "00" },
{ "Senegal", "221", "00" },
{ "Serbia", "381", "99" },
{ "Seychelles", "248", "00" },
{ "Sierra Leone", "232", "00" },
{ "Singapore", "65", "001" },
{ "Slovakia", "421", "00" },
{ "Slovenia", "386", "00" },
{ "Solomon Islands", "677", "00" },
{ "Somalia", "252", "00" },
{ "South Africa", "27", "09" },
{ "Spain", "34", "00" },
{ "Sri Lanka", "94", "00" },
{ "Sudan", "249", "00" },
{ "Suriname", "597", "00" },
{ "Swaziland", "268", "00" },
{ "Sweden", "46", "00" },
{ "Switzerland", "41", "00" },
{ "Syria", "963", "00" },
{ "Taiwan", "886", "002" },
{ "Tajikistan", "992", "810" },
{ "Tanzania", "255", "00" },
{ "Thailand", "66", "001" },
{ "Togo", "228", "00" },
{ "Tonga", "676", "00" },
{ "Trinidad & Tobago", "868", "011" },
{ "Tunisia", "216", "00" },
{ "Turkey", "90", "00" },
{ "Turkmenistan", "993", "810" },
{ "Turks & Caicos", "649", "011" },
{ "Tuvalu", "688", "00" },
{ "Uganda", "256", "000" },
{ "Ukraine", "380", "810" },
{ "United Arab Emirates", "971", "00" },
{ "United Kingdom", "44", "00" },
{ "Uruguay", "598", "00" },
{ "USA", "1", "011" },
{ "US Virgin Islands", "340", "011" },
{ "Uzbekistan", "998", "810" },
{ "Vanuatu", "678", "00" },
{ "Vatican City", "39", "00" },
{ "Venezuela", "58", "00" },
{ "Vietnam", "84", "00" },
{ "Wake Island", "808", "00" },
{ "Wallis & Futuna", "681", "19" },
{ "Western Samoa", "685", "00" },
{ "Yemen", "967", "00" },
{ "Yugoslavia", "381", "99" },
{ "Zambia", "260", "00" },
{ "Zimbabwe", "263", "00" }
}

View File

@ -0,0 +1,254 @@
--[[
LuCI - Asterisk - International Direct Dialing Prefixes and Country Codes
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
]]--
module "luci.asterisk.cc_idd"
CC_IDD = {
-- Country, CC, IDD
{ "Afghanistan", "93", "00" },
{ "Albania", "355", "00" },
{ "Algeria", "213", "00" },
{ "American Samoa", "684", "00" },
{ "Andorra", "376", "00" },
{ "Angola", "244", "00" },
{ "Anguilla", "264", "011" },
{ "Antarctica", "672", "" },
{ "Antigua", "268", "011" },
{ "Argentina", "54", "00" },
{ "Armenia", "374", "00" },
{ "Aruba", "297", "00" },
{ "Ascension Island", "247", "00" },
{ "Australia", "61", "0011" },
{ "Austria", "43", "00" },
{ "Azberbaijan", "994", "00" },
{ "Bahamas", "242", "011" },
{ "Bahrain", "973", "00" },
{ "Bangladesh", "880", "00" },
{ "Barbados", "246", "011" },
{ "Barbuda", "268", "011" },
{ "Belarus", "375", "810" },
{ "Belgium", "32", "00" },
{ "Belize", "501", "00" },
{ "Benin", "229", "00" },
{ "Bermuda", "441", "011" },
{ "Bhutan", "975", "00" },
{ "Bolivia", "591", "00" },
{ "Bosnia", "387", "00" },
{ "Botswana", "267", "00" },
{ "Brazil", "55", "00" },
{ "British Virgin Islands", "284", "011" },
{ "Brunei", "673", "00" },
{ "Bulgaria", "359", "00" },
{ "Burkina Faso", "226", "00" },
{ "Burma (Myanmar)", "95", "00" },
{ "Burundi", "257", "00" },
{ "Cambodia", "855", "001" },
{ "Cameroon", "237", "00" },
{ "Canada", "1", "011" },
{ "Cape Verde Islands", "238", "0" },
{ "Cayman Islands", "345", "011" },
{ "Central African Rep.", "236", "00" },
{ "Chad", "235", "15" },
{ "Chile", "56", "00" },
{ "China", "86", "00" },
{ "Christmas Island", "61", "0011" },
{ "Cocos Islands", "61", "0011" },
{ "Colombia", "57", "00" },
{ "Comoros", "269", "00" },
{ "Congo", "242", "00" },
{ "Congo, Dem. Rep. of", "243", "00" },
{ "Cook Islands", "682", "00" },
{ "Costa Rica", "506", "00" },
{ "Croatia", "385", "00" },
{ "Cuba", "53", "119" },
{ "Cyprus", "357", "00" },
{ "Czech Republic", "420", "00" },
{ "Denmark", "45", "00" },
{ "Diego Garcia", "246", "00" },
{ "Djibouti", "253", "00" },
{ "Dominica", "767", "011" },
{ "Dominican Rep.", "809", "011" },
{ "Ecuador", "593", "00" },
{ "Egypt", "20", "00" },
{ "El Salvador", "503", "00" },
{ "Equatorial Guinea", "240", "00" },
{ "Eritrea", "291", "00" },
{ "Estonia", "372", "00" },
{ "Ethiopia", "251", "00" },
{ "Faeroe Islands", "298", "00" },
{ "Falkland Islands", "500", "00" },
{ "Fiji Islands", "679", "00" },
{ "Finland", "358", "00" },
{ "France", "33", "00" },
{ "French Antilles", "596", "00" },
{ "French Guiana", "594", "00" },
{ "French Polynesia", "689", "00" },
{ "Gabon", "241", "00" },
{ "Gambia", "220", "00" },
{ "Georgia", "995", "810" },
{ "Germany", "49", "00" },
{ "Ghana", "233", "00" },
{ "Gibraltar", "350", "00" },
{ "Greece", "30", "00" },
{ "Greenland", "299", "00" },
{ "Grenada", "473", "011" },
{ "Guadeloupe", "590", "00" },
{ "Guam", "671", "011" },
{ "Guantanamo Bay", "5399", "00" },
{ "Guatemala", "502", "00" },
{ "Guinea", "224", "00" },
{ "Guinea Bissau", "245", "00" },
{ "Guyana", "592", "001" },
{ "Haiti", "509", "00" },
{ "Honduras", "504", "00" },
{ "Hong Kong", "852", "001" },
{ "Hungary", "36", "00" },
{ "Iceland", "354", "00" },
{ "India", "91", "00" },
{ "Indonesia", "62", { "001", "008" } },
{ "Iran", "98", "00" },
{ "Iraq", "964", "00" },
{ "Ireland", "353", "00" },
{ "Israel", "972", "00" },
{ "Italy", "39", "00" },
{ "Ivory Coast", "225", "00" },
{ "Jamaica", "876", "011" },
{ "Japan", "81", "001" },
{ "Jordan", "962", "00" },
{ "Kazakhstan", "7", "810" },
{ "Kenya", "254", "000" },
{ "Kiribati", "686", "00" },
{ "Korea, North", "850", "00" },
{ "Korea, South", "82", "001" },
{ "Kuwait", "965", "00" },
{ "Kyrgyzstan", "996", "00" },
{ "Laos", "856", "00" },
{ "Latvia", "371", "00" },
{ "Lebanon", "961", "00" },
{ "Lesotho", "266", "00" },
{ "Liberia", "231", "00" },
{ "Libya", "218", "00" },
{ "Liechtenstein", "423", "00" },
{ "Lithuania", "370", "00" },
{ "Luxembourg", "352", "00" },
{ "Macau", "853", "00" },
{ "Macedonia", "389", "00" },
{ "Madagascar", "261", "00" },
{ "Malawi", "265", "00" },
{ "Malaysia", "60", "00" },
{ "Maldives", "960", "00" },
{ "Mali", "223", "00" },
{ "Malta", "356", "00" },
{ "Mariana Islands", "670", "011" },
{ "Marshall Islands", "692", "011" },
{ "Martinique", "596", "00" },
{ "Mauritania", "222", "00" },
{ "Mauritius", "230", "00" },
{ "Mayotte Islands", "269", "00" },
{ "Mexico", "52", "00" },
{ "Micronesia", "691", "011" },
{ "Midway Island", "808", "011" },
{ "Moldova", "373", "00" },
{ "Monaco", "377", "00" },
{ "Mongolia", "976", "001" },
{ "Montserrat", "664", "011" },
{ "Morocco", "212", "00" },
{ "Mozambique", "258", "00" },
{ "Myanmar (Burma)", "95", "00" },
{ "Namibia", "264", "00" },
{ "Nauru", "674", "00" },
{ "Nepal", "977", "00" },
{ "Netherlands", "31", "00" },
{ "Netherlands Antilles", "599", "00" },
{ "Nevis", "869", "011" },
{ "New Caledonia", "687", "00" },
{ "New Zealand", "64", "00" },
{ "Nicaragua", "505", "00" },
{ "Niger", "227", "00" },
{ "Nigeria", "234", "009" },
{ "Niue", "683", "00" },
{ "Norfolk Island", "672", "00" },
{ "Norway", "47", "00" },
{ "Oman", "968", "00" },
{ "Pakistan", "92", "00" },
{ "Palau", "680", "011" },
{ "Palestine", "970", "00" },
{ "Panama", "507", "00" },
{ "Papua New Guinea", "675", "05" },
{ "Paraguay", "595", "002" },
{ "Peru", "51", "00" },
{ "Philippines", "63", "00" },
{ "Poland", "48", "00" },
{ "Portugal", "351", "00" },
{ "Puerto Rico", { "787", "939" }, "011" },
{ "Qatar", "974", "00" },
{ "Reunion Island", "262", "00" },
{ "Romania", "40", "00" },
{ "Russia", "7", "810" },
{ "Rwanda", "250", "00" },
{ "St. Helena", "290", "00" },
{ "St. Kitts", "869", "011" },
{ "St. Lucia", "758", "011" },
{ "St. Perre & Miquelon", "508", "00" },
{ "St. Vincent", "784", "011" },
{ "San Marino", "378", "00" },
{ "Sao Tome & Principe", "239", "00" },
{ "Saudi Arabia", "966", "00" },
{ "Senegal", "221", "00" },
{ "Serbia", "381", "99" },
{ "Seychelles", "248", "00" },
{ "Sierra Leone", "232", "00" },
{ "Singapore", "65", "001" },
{ "Slovakia", "421", "00" },
{ "Slovenia", "386", "00" },
{ "Solomon Islands", "677", "00" },
{ "Somalia", "252", "00" },
{ "South Africa", "27", "09" },
{ "Spain", "34", "00" },
{ "Sri Lanka", "94", "00" },
{ "Sudan", "249", "00" },
{ "Suriname", "597", "00" },
{ "Swaziland", "268", "00" },
{ "Sweden", "46", "00" },
{ "Switzerland", "41", "00" },
{ "Syria", "963", "00" },
{ "Taiwan", "886", "002" },
{ "Tajikistan", "992", "810" },
{ "Tanzania", "255", "00" },
{ "Thailand", "66", "001" },
{ "Togo", "228", "00" },
{ "Tonga", "676", "00" },
{ "Trinidad & Tobago", "868", "011" },
{ "Tunisia", "216", "00" },
{ "Turkey", "90", "00" },
{ "Turkmenistan", "993", "810" },
{ "Turks & Caicos", "649", "011" },
{ "Tuvalu", "688", "00" },
{ "Uganda", "256", "000" },
{ "Ukraine", "380", "810" },
{ "United Arab Emirates", "971", "00" },
{ "United Kingdom", "44", "00" },
{ "Uruguay", "598", "00" },
{ "USA", "1", "011" },
{ "US Virgin Islands", "340", "011" },
{ "Uzbekistan", "998", "810" },
{ "Vanuatu", "678", "00" },
{ "Vatican City", "39", "00" },
{ "Venezuela", "58", "00" },
{ "Vietnam", "84", "00" },
{ "Wake Island", "808", "00" },
{ "Wallis & Futuna", "681", "19" },
{ "Western Samoa", "685", "00" },
{ "Yemen", "967", "00" },
{ "Yugoslavia", "381", "99" },
{ "Zambia", "260", "00" },
{ "Zimbabwe", "263", "00" }
}

View File

@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 82
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/controller
END
asterisk.lua
K 25
svn:wc:ra_dav:version-url
V 95
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/controller/asterisk.lua
END

View File

@ -0,0 +1,62 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/controller
http://svn.luci.subsignal.org
2009-03-30T19:29:37.713765Z
4397
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
asterisk.lua
file
2010-09-19T09:58:14.740068Z
afc2eb9ae8fb04386c9ff51e25ed0295
2009-03-30T19:29:37.713765Z
4397
jow
has-props
7561

View File

@ -0,0 +1,205 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module("luci.controller.asterisk", package.seeall)
function index()
entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80).i18n = "asterisk"
entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1)
entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2)
entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3)
entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4)
entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5)
entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4)
entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1)
entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2)
entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3)
entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4)
entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5)
entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6)
entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7)
entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8)
entry({"admin", "services", "asterisk", "mod", "res", "feature"},
cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 )
entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk"
entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1)
entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true
--entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true
entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2)
entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true
entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3)
entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1)
entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2)
entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4)
entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1)
entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2)
entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5)
entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true
entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true
end
function handle_dialplan()
local uci = luci.model.uci.cursor()
local ast = require "luci.asterisk"
local err = false
for k, v in pairs(luci.http.formvaluetable("delzone")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
local newinc = { }
for _, z in ipairs(plan.zones) do
if z.name ~= v then
newinc[#newinc+1] = z.name
end
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("addzone")) do
local plan = ast.dialplan.plan(k)
local zone = ast.dialzone.zone(v)
if #v > 0 and plan and zone then
local newinc = { zone.name }
for _, z in ipairs(plan.zones) do
newinc[#newinc+1] = z.name
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("delvbox")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanvoice",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addvbox")) do
local plan = ast.dialplan.plan(k)
local vbox = ast.voicemail.box(v)
if plan and vbox then
local vext = luci.http.formvalue("addvboxext.%s" % plan.name)
vext = ( vext and #vext > 0 ) and vext or vbox.number
uci:section("asterisk", "dialplanvoice", nil, {
dialplan = plan.name,
extension = vext,
voicebox = vbox.number,
voicecontext = vbox.context
})
end
end
for k, v in pairs(luci.http.formvaluetable("delmeetme")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanmeetme",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addmeetme")) do
local plan = ast.dialplan.plan(k)
local meetme = ast.meetme.room(v)
if plan and meetme then
local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name)
mext = ( mext and #mext > 0 ) and mext or meetme.room
uci:section("asterisk", "dialplanmeetme", nil, {
dialplan = plan.name,
extension = mext,
room = meetme.room
})
end
end
local aname = luci.http.formvalue("addplan")
if aname and #aname > 0 then
if aname:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialplan", aname, { })
else
err = true
end
end
local dname = luci.http.formvalue("delplan")
if dname and #dname > 0 then
if uci:get("asterisk", dname) == "dialplan" then
uci:delete("asterisk", dname)
uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname })
uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname })
end
end
uci:save("asterisk")
ast.uci_resync()
luci.template.render("asterisk/dialplans", { create_error = err })
end
function handle_dialzones()
local ast = require "luci.asterisk"
local uci = luci.model.uci.cursor()
local err = false
if luci.http.formvalue("newzone") then
local name = luci.http.formvalue("newzone_name")
if name and name:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialzone", name, {
uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}),
match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {})
})
uci:save("asterisk")
else
err = true
end
end
if luci.http.formvalue("delzone") then
local name = luci.http.formvalue("delzone")
if uci:get("asterisk", name) == "dialzone" then
uci:delete("asterisk", name)
uci:save("asterisk")
end
end
luci.template.render("asterisk/dialzones", { create_error = err })
end

View File

@ -0,0 +1,205 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id: asterisk.lua 4397 2009-03-30 19:29:37Z jow $
]]--
module("luci.controller.asterisk", package.seeall)
function index()
entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80).i18n = "asterisk"
entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1)
entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2)
entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3)
entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4)
entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5)
entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4)
entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1)
entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2)
entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3)
entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4)
entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5)
entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6)
entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7)
entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8)
entry({"admin", "services", "asterisk", "mod", "res", "feature"},
cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 )
entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk"
entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1)
entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true
--entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true
entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2)
entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true
entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3)
entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1)
entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2)
entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4)
entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1)
entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2)
entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5)
entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true
entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true
end
function handle_dialplan()
local uci = luci.model.uci.cursor()
local ast = require "luci.asterisk"
local err = false
for k, v in pairs(luci.http.formvaluetable("delzone")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
local newinc = { }
for _, z in ipairs(plan.zones) do
if z.name ~= v then
newinc[#newinc+1] = z.name
end
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("addzone")) do
local plan = ast.dialplan.plan(k)
local zone = ast.dialzone.zone(v)
if #v > 0 and plan and zone then
local newinc = { zone.name }
for _, z in ipairs(plan.zones) do
newinc[#newinc+1] = z.name
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("delvbox")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanvoice",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addvbox")) do
local plan = ast.dialplan.plan(k)
local vbox = ast.voicemail.box(v)
if plan and vbox then
local vext = luci.http.formvalue("addvboxext.%s" % plan.name)
vext = ( vext and #vext > 0 ) and vext or vbox.number
uci:section("asterisk", "dialplanvoice", nil, {
dialplan = plan.name,
extension = vext,
voicebox = vbox.number,
voicecontext = vbox.context
})
end
end
for k, v in pairs(luci.http.formvaluetable("delmeetme")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanmeetme",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addmeetme")) do
local plan = ast.dialplan.plan(k)
local meetme = ast.meetme.room(v)
if plan and meetme then
local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name)
mext = ( mext and #mext > 0 ) and mext or meetme.room
uci:section("asterisk", "dialplanmeetme", nil, {
dialplan = plan.name,
extension = mext,
room = meetme.room
})
end
end
local aname = luci.http.formvalue("addplan")
if aname and #aname > 0 then
if aname:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialplan", aname, { })
else
err = true
end
end
local dname = luci.http.formvalue("delplan")
if dname and #dname > 0 then
if uci:get("asterisk", dname) == "dialplan" then
uci:delete("asterisk", dname)
uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname })
uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname })
end
end
uci:save("asterisk")
ast.uci_resync()
luci.template.render("asterisk/dialplans", { create_error = err })
end
function handle_dialzones()
local ast = require "luci.asterisk"
local uci = luci.model.uci.cursor()
local err = false
if luci.http.formvalue("newzone") then
local name = luci.http.formvalue("newzone_name")
if name and name:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialzone", name, {
uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}),
match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {})
})
uci:save("asterisk")
else
err = true
end
end
if luci.http.formvalue("delzone") then
local name = luci.http.formvalue("delzone")
if uci:get("asterisk", name) == "dialzone" then
uci:delete("asterisk", name)
uci:save("asterisk")
end
end
luci.template.render("asterisk/dialzones", { create_error = err })
end

View File

@ -0,0 +1,5 @@
K 25
svn:wc:ra_dav:version-url
V 77
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model
END

View File

@ -0,0 +1,31 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model
http://svn.luci.subsignal.org
2009-03-30T19:29:37.713765Z
4397
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
cbi
dir

View File

@ -0,0 +1,95 @@
K 25
svn:wc:ra_dav:version-url
V 81
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi
END
asterisk-meetme.lua
K 25
svn:wc:ra_dav:version-url
V 101
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-meetme.lua
END
asterisk-mod-cdr.lua
K 25
svn:wc:ra_dav:version-url
V 102
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua
END
asterisk-mod-chan.lua
K 25
svn:wc:ra_dav:version-url
V 103
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua
END
asterisk-mod-codec.lua
K 25
svn:wc:ra_dav:version-url
V 104
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua
END
asterisk-mod-app.lua
K 25
svn:wc:ra_dav:version-url
V 102
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-app.lua
END
asterisk-mod-res-feature.lua
K 25
svn:wc:ra_dav:version-url
V 110
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua
END
asterisk-iax-connections.lua
K 25
svn:wc:ra_dav:version-url
V 110
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua
END
asterisk.lua
K 25
svn:wc:ra_dav:version-url
V 94
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk.lua
END
asterisk-voice.lua
K 25
svn:wc:ra_dav:version-url
V 100
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-voice.lua
END
asterisk-mod-format.lua
K 25
svn:wc:ra_dav:version-url
V 105
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-format.lua
END
asterisk-mod-res.lua
K 25
svn:wc:ra_dav:version-url
V 102
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-res.lua
END
asterisk-mod-pbx.lua
K 25
svn:wc:ra_dav:version-url
V 102
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua
END
asterisk-dialplans.lua
K 25
svn:wc:ra_dav:version-url
V 104
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-dialplans.lua
END
asterisk-mod-func.lua
K 25
svn:wc:ra_dav:version-url
V 103
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-mod-func.lua
END
asterisk-sip-connections.lua
K 25
svn:wc:ra_dav:version-url
V 110
/!svn/ver/4830/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua
END

View File

@ -0,0 +1,541 @@
10
dir
6253
http://svn.luci.subsignal.org/luci/branches/luci-0.9/applications/luci-asterisk/luasrc/model/cbi
http://svn.luci.subsignal.org
2009-03-30T19:29:37.713765Z
4397
jow
ab181a69-ba2e-0410-a84d-ff88ab4c47bc
asterisk-meetme.lua
file
2010-09-19T09:58:14.720068Z
3645b67442382ca4536d0d50aeebb03f
2008-10-23T15:42:12.196652Z
3620
jow
has-props
954
asterisk
dir
asterisk-mod-cdr.lua
file
2010-09-19T09:58:14.724071Z
b8c5a18aa2d3f1659ccc2f446083e3ce
2008-10-23T02:25:26.060246Z
3618
jow
has-props
1931
asterisk-mod-chan.lua
file
2010-09-19T09:58:14.724071Z
12d0da34164aff0805166df3c2a9d793
2008-10-23T02:25:26.060246Z
3618
jow
has-props
1780
asterisk-mod-codec.lua
file
2010-09-19T09:58:14.724071Z
b44e1dd48756b89a92dcb5929c690613
2008-10-23T02:25:26.060246Z
3618
jow
has-props
2227
asterisk-mod-app.lua
file
2010-09-19T09:58:14.724071Z
3136217d5003a3c5f0937521f106a2b9
2008-10-23T02:25:26.060246Z
3618
jow
has-props
15546
asterisk-mod-res-feature.lua
file
2010-09-19T09:58:14.724071Z
043264a4c7019a38d47834e21bb6b4bf
2008-10-23T15:42:12.196652Z
3620
jow
has-props
4262
asterisk-iax-connections.lua
file
2010-09-19T09:58:14.724071Z
7a87a1dcb24c5bd8f467498d7e464ebc
2008-10-23T15:42:12.196652Z
3620
jow
has-props
2061
asterisk.lua
file
2010-09-19T09:58:14.728069Z
b6503a1c0beb61da36e18cef96ca0627
2008-10-23T02:25:26.060246Z
3618
jow
has-props
5378
asterisk-voice.lua
file
2010-09-19T09:58:14.728069Z
a20448386cfb450e4c9f0f890d3079e8
2008-10-23T15:42:12.196652Z
3620
jow
has-props
1544
asterisk-mod-format.lua
file
2010-09-19T09:58:14.728069Z
eefc81925dec2775dd497cb2f277801c
2008-10-23T02:25:26.060246Z
3618
jow
has-props
3692
asterisk-mod-res.lua
file
2010-09-19T09:58:14.728069Z
77396aad092933ff355a28437b98397a
2008-10-23T02:25:26.060246Z
3618
jow
has-props
3150
asterisk-mod-pbx.lua
file
2010-09-19T09:58:14.728069Z
2091b299887bf0b95b035acea16a009d
2008-10-23T02:25:26.060246Z
3618
jow
has-props
2189
asterisk-dialplans.lua
file
2010-09-19T09:58:14.728069Z
8a3ce4f73e2ee8aec71015a12d4e8fdc
2008-10-23T15:42:12.196652Z
3620
jow
has-props
3913
asterisk-mod-func.lua
file
2010-09-19T09:58:14.732069Z
9181a168b5e2f429bd9a51a4d922b3b9
2008-10-23T02:25:26.060246Z
3618
jow
has-props
1262
asterisk-sip-connections.lua
file
2010-09-19T09:58:14.732069Z
74aa1893c82badefe844bcb3538ddb2c
2008-10-23T15:42:12.196652Z
3620
jow
has-props
3982

View File

@ -0,0 +1,102 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "")
dialplan.addremove = true
dialplan.dynamic = true
include = dialplan:option(MultiValue, "include", "Include zones and plans", "")
cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end )
dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "")
dialplanexten.anonymous = true
dialplanexten.addremove = true
dialplanexten.dynamic = true
dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "")
dialplangeneral.anonymous = true
dialplangeneral.addremove = true
allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "")
allowtransfer.rmempty = true
canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.rmempty = true
clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "")
clearglobalvars.rmempty = true
dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "")
dialplangoto.anonymous = true
dialplangoto.addremove = true
dialplangoto.dynamic = true
dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "")
dialplanmeetme.anonymous = true
dialplanmeetme.addremove = true
dialplanmeetme.dynamic = true
dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "")
dialplansaytime.anonymous = true
dialplansaytime.addremove = true
dialplansaytime.dynamic = true
dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "")
dialplanvoice.anonymous = true
dialplanvoice.addremove = true
dialplanvoice.dynamic = true
dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "")
dialzone.addremove = true
dialzone.template = "cbi/tblsection"
addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "")
addprefix.rmempty = true
--international = dialzone:option(DynamicList, "international", "Match International prefix", "")
international = dialzone:option(Value, "international", "Match International prefix", "")
international.rmempty = true
localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "")
localprefix.rmempty = true
localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "")
localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end )
match = dialzone:option(Value, "match", "Match plan", "")
match.rmempty = true
uses = dialzone:option(ListValue, "uses", "Connection to use", "")
uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" )
cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end )
cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end )
return cbimap

View File

@ -0,0 +1,60 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
iax = cbimap:section(TypedSection, "iax", "IAX Connection", "")
iax.addremove = true
alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "")
alwaysinternational.optional = true
context = iax:option(ListValue, "context", "Context to use", "")
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
countrycode = iax:option(Value, "countrycode", "Country Code for connection", "")
countrycode.optional = true
extension = iax:option(Value, "extension", "Add as Extension", "")
extension.optional = true
host = iax:option(Value, "host", "Host name (or blank)", "")
host.optional = true
internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "")
internationalprefix.optional = true
prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "")
prefix.optional = true
secret = iax:option(Value, "secret", "Secret", "")
secret.optional = true
timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "")
timeout.optional = true
type = iax:option(ListValue, "type", "Option type", "")
type:value("friend", "Friend (outbound/inbound)")
type:value("user", "User (inbound - authenticate by \"from\")")
type:value("peer", "Peer (outbound - match by host)")
type.optional = true
username = iax:option(Value, "username", "User name", "")
username.optional = true
return cbimap

View File

@ -0,0 +1,33 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "")
audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "")
meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "")
meetme.addremove = true
adminpin = meetme:option(Value, "adminpin", "Admin PIN", "")
adminpin.password = true
pin = meetme:option(Value, "pin", "Meeting PIN", "")
pin.password = true
return cbimap

View File

@ -0,0 +1,391 @@
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
app_alarmreceiver = module:option(ListValue, "app_alarmreceiver", "Alarm Receiver Application", "")
app_alarmreceiver:value("yes", "Load")
app_alarmreceiver:value("no", "Do Not Load")
app_alarmreceiver:value("auto", "Load as Required")
app_alarmreceiver.rmempty = true
app_authenticate = module:option(ListValue, "app_authenticate", "Authentication Application", "")
app_authenticate:value("yes", "Load")
app_authenticate:value("no", "Do Not Load")
app_authenticate:value("auto", "Load as Required")
app_authenticate.rmempty = true
app_cdr = module:option(ListValue, "app_cdr", "Make sure asterisk doesnt save CDR", "")
app_cdr:value("yes", "Load")
app_cdr:value("no", "Do Not Load")
app_cdr:value("auto", "Load as Required")
app_cdr.rmempty = true
app_chanisavail = module:option(ListValue, "app_chanisavail", "Check if channel is available", "")
app_chanisavail:value("yes", "Load")
app_chanisavail:value("no", "Do Not Load")
app_chanisavail:value("auto", "Load as Required")
app_chanisavail.rmempty = true
app_chanspy = module:option(ListValue, "app_chanspy", "Listen in on any channel", "")
app_chanspy:value("yes", "Load")
app_chanspy:value("no", "Do Not Load")
app_chanspy:value("auto", "Load as Required")
app_chanspy.rmempty = true
app_controlplayback = module:option(ListValue, "app_controlplayback", "Control Playback Application", "")
app_controlplayback:value("yes", "Load")
app_controlplayback:value("no", "Do Not Load")
app_controlplayback:value("auto", "Load as Required")
app_controlplayback.rmempty = true
app_cut = module:option(ListValue, "app_cut", "Cuts up variables", "")
app_cut:value("yes", "Load")
app_cut:value("no", "Do Not Load")
app_cut:value("auto", "Load as Required")
app_cut.rmempty = true
app_db = module:option(ListValue, "app_db", "Database access functions", "")
app_db:value("yes", "Load")
app_db:value("no", "Do Not Load")
app_db:value("auto", "Load as Required")
app_db.rmempty = true
app_dial = module:option(ListValue, "app_dial", "Dialing Application", "")
app_dial:value("yes", "Load")
app_dial:value("no", "Do Not Load")
app_dial:value("auto", "Load as Required")
app_dial.rmempty = true
app_dictate = module:option(ListValue, "app_dictate", "Virtual Dictation Machine Application", "")
app_dictate:value("yes", "Load")
app_dictate:value("no", "Do Not Load")
app_dictate:value("auto", "Load as Required")
app_dictate.rmempty = true
app_directed_pickup = module:option(ListValue, "app_directed_pickup", "Directed Call Pickup Support", "")
app_directed_pickup:value("yes", "Load")
app_directed_pickup:value("no", "Do Not Load")
app_directed_pickup:value("auto", "Load as Required")
app_directed_pickup.rmempty = true
app_directory = module:option(ListValue, "app_directory", "Extension Directory", "")
app_directory:value("yes", "Load")
app_directory:value("no", "Do Not Load")
app_directory:value("auto", "Load as Required")
app_directory.rmempty = true
app_disa = module:option(ListValue, "app_disa", "DISA (Direct Inward System Access) Application", "")
app_disa:value("yes", "Load")
app_disa:value("no", "Do Not Load")
app_disa:value("auto", "Load as Required")
app_disa.rmempty = true
app_dumpchan = module:option(ListValue, "app_dumpchan", "Dump channel variables Application", "")
app_dumpchan:value("yes", "Load")
app_dumpchan:value("no", "Do Not Load")
app_dumpchan:value("auto", "Load as Required")
app_dumpchan.rmempty = true
app_echo = module:option(ListValue, "app_echo", "Simple Echo Application", "")
app_echo:value("yes", "Load")
app_echo:value("no", "Do Not Load")
app_echo:value("auto", "Load as Required")
app_echo.rmempty = true
app_enumlookup = module:option(ListValue, "app_enumlookup", "ENUM Lookup", "")
app_enumlookup:value("yes", "Load")
app_enumlookup:value("no", "Do Not Load")
app_enumlookup:value("auto", "Load as Required")
app_enumlookup.rmempty = true
app_eval = module:option(ListValue, "app_eval", "Reevaluates strings", "")
app_eval:value("yes", "Load")
app_eval:value("no", "Do Not Load")
app_eval:value("auto", "Load as Required")
app_eval.rmempty = true
app_exec = module:option(ListValue, "app_exec", "Executes applications", "")
app_exec:value("yes", "Load")
app_exec:value("no", "Do Not Load")
app_exec:value("auto", "Load as Required")
app_exec.rmempty = true
app_externalivr = module:option(ListValue, "app_externalivr", "External IVR application interface", "")
app_externalivr:value("yes", "Load")
app_externalivr:value("no", "Do Not Load")
app_externalivr:value("auto", "Load as Required")
app_externalivr.rmempty = true
app_forkcdr = module:option(ListValue, "app_forkcdr", "Fork The CDR into 2 seperate entities", "")
app_forkcdr:value("yes", "Load")
app_forkcdr:value("no", "Do Not Load")
app_forkcdr:value("auto", "Load as Required")
app_forkcdr.rmempty = true
app_getcpeid = module:option(ListValue, "app_getcpeid", "Get ADSI CPE ID", "")
app_getcpeid:value("yes", "Load")
app_getcpeid:value("no", "Do Not Load")
app_getcpeid:value("auto", "Load as Required")
app_getcpeid.rmempty = true
app_groupcount = module:option(ListValue, "app_groupcount", "Group Management Routines", "")
app_groupcount:value("yes", "Load")
app_groupcount:value("no", "Do Not Load")
app_groupcount:value("auto", "Load as Required")
app_groupcount.rmempty = true
app_ices = module:option(ListValue, "app_ices", "Encode and Stream via icecast and ices", "")
app_ices:value("yes", "Load")
app_ices:value("no", "Do Not Load")
app_ices:value("auto", "Load as Required")
app_ices.rmempty = true
app_image = module:option(ListValue, "app_image", "Image Transmission Application", "")
app_image:value("yes", "Load")
app_image:value("no", "Do Not Load")
app_image:value("auto", "Load as Required")
app_image.rmempty = true
app_lookupblacklist = module:option(ListValue, "app_lookupblacklist", "Look up Caller*ID name/number from black", "")
app_lookupblacklist:value("yes", "Load")
app_lookupblacklist:value("no", "Do Not Load")
app_lookupblacklist:value("auto", "Load as Required")
app_lookupblacklist.rmempty = true
app_lookupcidname = module:option(ListValue, "app_lookupcidname", "Look up CallerID Name from local databas", "")
app_lookupcidname:value("yes", "Load")
app_lookupcidname:value("no", "Do Not Load")
app_lookupcidname:value("auto", "Load as Required")
app_lookupcidname.rmempty = true
app_macro = module:option(ListValue, "app_macro", "Extension Macros", "")
app_macro:value("yes", "Load")
app_macro:value("no", "Do Not Load")
app_macro:value("auto", "Load as Required")
app_macro.rmempty = true
app_math = module:option(ListValue, "app_math", "A simple math Application", "")
app_math:value("yes", "Load")
app_math:value("no", "Do Not Load")
app_math:value("auto", "Load as Required")
app_math.rmempty = true
app_md5 = module:option(ListValue, "app_md5", "MD5 checksum Application", "")
app_md5:value("yes", "Load")
app_md5:value("no", "Do Not Load")
app_md5:value("auto", "Load as Required")
app_md5.rmempty = true
app_milliwatt = module:option(ListValue, "app_milliwatt", "Digital Milliwatt (mu-law) Test Application", "")
app_milliwatt:value("yes", "Load")
app_milliwatt:value("no", "Do Not Load")
app_milliwatt:value("auto", "Load as Required")
app_milliwatt.rmempty = true
app_mixmonitor = module:option(ListValue, "app_mixmonitor", "Record a call and mix the audio during the recording", "")
app_mixmonitor:value("yes", "Load")
app_mixmonitor:value("no", "Do Not Load")
app_mixmonitor:value("auto", "Load as Required")
app_mixmonitor.rmempty = true
app_parkandannounce = module:option(ListValue, "app_parkandannounce", "Call Parking and Announce Application", "")
app_parkandannounce:value("yes", "Load")
app_parkandannounce:value("no", "Do Not Load")
app_parkandannounce:value("auto", "Load as Required")
app_parkandannounce.rmempty = true
app_playback = module:option(ListValue, "app_playback", "Trivial Playback Application", "")
app_playback:value("yes", "Load")
app_playback:value("no", "Do Not Load")
app_playback:value("auto", "Load as Required")
app_playback.rmempty = true
app_privacy = module:option(ListValue, "app_privacy", "Require phone number to be entered", "")
app_privacy:value("yes", "Load")
app_privacy:value("no", "Do Not Load")
app_privacy:value("auto", "Load as Required")
app_privacy.rmempty = true
app_queue = module:option(ListValue, "app_queue", "True Call Queueing", "")
app_queue:value("yes", "Load")
app_queue:value("no", "Do Not Load")
app_queue:value("auto", "Load as Required")
app_queue.rmempty = true
app_random = module:option(ListValue, "app_random", "Random goto", "")
app_random:value("yes", "Load")
app_random:value("no", "Do Not Load")
app_random:value("auto", "Load as Required")
app_random.rmempty = true
app_read = module:option(ListValue, "app_read", "Read Variable Application", "")
app_read:value("yes", "Load")
app_read:value("no", "Do Not Load")
app_read:value("auto", "Load as Required")
app_read.rmempty = true
app_readfile = module:option(ListValue, "app_readfile", "Read in a file", "")
app_readfile:value("yes", "Load")
app_readfile:value("no", "Do Not Load")
app_readfile:value("auto", "Load as Required")
app_readfile.rmempty = true
app_realtime = module:option(ListValue, "app_realtime", "Realtime Data Lookup/Rewrite", "")
app_realtime:value("yes", "Load")
app_realtime:value("no", "Do Not Load")
app_realtime:value("auto", "Load as Required")
app_realtime.rmempty = true
app_record = module:option(ListValue, "app_record", "Trivial Record Application", "")
app_record:value("yes", "Load")
app_record:value("no", "Do Not Load")
app_record:value("auto", "Load as Required")
app_record.rmempty = true
app_sayunixtime = module:option(ListValue, "app_sayunixtime", "Say time", "")
app_sayunixtime:value("yes", "Load")
app_sayunixtime:value("no", "Do Not Load")
app_sayunixtime:value("auto", "Load as Required")
app_sayunixtime.rmempty = true
app_senddtmf = module:option(ListValue, "app_senddtmf", "Send DTMF digits Application", "")
app_senddtmf:value("yes", "Load")
app_senddtmf:value("no", "Do Not Load")
app_senddtmf:value("auto", "Load as Required")
app_senddtmf.rmempty = true
app_sendtext = module:option(ListValue, "app_sendtext", "Send Text Applications", "")
app_sendtext:value("yes", "Load")
app_sendtext:value("no", "Do Not Load")
app_sendtext:value("auto", "Load as Required")
app_sendtext.rmempty = true
app_setcallerid = module:option(ListValue, "app_setcallerid", "Set CallerID Application", "")
app_setcallerid:value("yes", "Load")
app_setcallerid:value("no", "Do Not Load")
app_setcallerid:value("auto", "Load as Required")
app_setcallerid.rmempty = true
app_setcdruserfield = module:option(ListValue, "app_setcdruserfield", "CDR user field apps", "")
app_setcdruserfield:value("yes", "Load")
app_setcdruserfield:value("no", "Do Not Load")
app_setcdruserfield:value("auto", "Load as Required")
app_setcdruserfield.rmempty = true
app_setcidname = module:option(ListValue, "app_setcidname", "load => .so ; Set CallerID Name", "")
app_setcidname:value("yes", "Load")
app_setcidname:value("no", "Do Not Load")
app_setcidname:value("auto", "Load as Required")
app_setcidname.rmempty = true
app_setcidnum = module:option(ListValue, "app_setcidnum", "load => .so ; Set CallerID Number", "")
app_setcidnum:value("yes", "Load")
app_setcidnum:value("no", "Do Not Load")
app_setcidnum:value("auto", "Load as Required")
app_setcidnum.rmempty = true
app_setrdnis = module:option(ListValue, "app_setrdnis", "Set RDNIS Number", "")
app_setrdnis:value("yes", "Load")
app_setrdnis:value("no", "Do Not Load")
app_setrdnis:value("auto", "Load as Required")
app_setrdnis.rmempty = true
app_settransfercapability = module:option(ListValue, "app_settransfercapability", "Set ISDN Transfer Capability", "")
app_settransfercapability:value("yes", "Load")
app_settransfercapability:value("no", "Do Not Load")
app_settransfercapability:value("auto", "Load as Required")
app_settransfercapability.rmempty = true
app_sms = module:option(ListValue, "app_sms", "SMS/PSTN handler", "")
app_sms:value("yes", "Load")
app_sms:value("no", "Do Not Load")
app_sms:value("auto", "Load as Required")
app_sms.rmempty = true
app_softhangup = module:option(ListValue, "app_softhangup", "Hangs up the requested channel", "")
app_softhangup:value("yes", "Load")
app_softhangup:value("no", "Do Not Load")
app_softhangup:value("auto", "Load as Required")
app_softhangup.rmempty = true
app_stack = module:option(ListValue, "app_stack", "Stack Routines", "")
app_stack:value("yes", "Load")
app_stack:value("no", "Do Not Load")
app_stack:value("auto", "Load as Required")
app_stack.rmempty = true
app_system = module:option(ListValue, "app_system", "Generic System() application", "")
app_system:value("yes", "Load")
app_system:value("no", "Do Not Load")
app_system:value("auto", "Load as Required")
app_system.rmempty = true
app_talkdetect = module:option(ListValue, "app_talkdetect", "Playback with Talk Detection", "")
app_talkdetect:value("yes", "Load")
app_talkdetect:value("no", "Do Not Load")
app_talkdetect:value("auto", "Load as Required")
app_talkdetect.rmempty = true
app_test = module:option(ListValue, "app_test", "Interface Test Application", "")
app_test:value("yes", "Load")
app_test:value("no", "Do Not Load")
app_test:value("auto", "Load as Required")
app_test.rmempty = true
app_transfer = module:option(ListValue, "app_transfer", "Transfer", "")
app_transfer:value("yes", "Load")
app_transfer:value("no", "Do Not Load")
app_transfer:value("auto", "Load as Required")
app_transfer.rmempty = true
app_txtcidname = module:option(ListValue, "app_txtcidname", "TXTCIDName", "")
app_txtcidname:value("yes", "Load")
app_txtcidname:value("no", "Do Not Load")
app_txtcidname:value("auto", "Load as Required")
app_txtcidname.rmempty = true
app_url = module:option(ListValue, "app_url", "Send URL Applications", "")
app_url:value("yes", "Load")
app_url:value("no", "Do Not Load")
app_url:value("auto", "Load as Required")
app_url.rmempty = true
app_userevent = module:option(ListValue, "app_userevent", "Custom User Event Application", "")
app_userevent:value("yes", "Load")
app_userevent:value("no", "Do Not Load")
app_userevent:value("auto", "Load as Required")
app_userevent.rmempty = true
app_verbose = module:option(ListValue, "app_verbose", "Send verbose output", "")
app_verbose:value("yes", "Load")
app_verbose:value("no", "Do Not Load")
app_verbose:value("auto", "Load as Required")
app_verbose.rmempty = true
app_voicemail = module:option(ListValue, "app_voicemail", "Voicemail", "")
app_voicemail:value("yes", "Load")
app_voicemail:value("no", "Do Not Load")
app_voicemail:value("auto", "Load as Required")
app_voicemail.rmempty = true
app_waitforring = module:option(ListValue, "app_waitforring", "Waits until first ring after time", "")
app_waitforring:value("yes", "Load")
app_waitforring:value("no", "Do Not Load")
app_waitforring:value("auto", "Load as Required")
app_waitforring.rmempty = true
app_waitforsilence = module:option(ListValue, "app_waitforsilence", "Wait For Silence Application", "")
app_waitforsilence:value("yes", "Load")
app_waitforsilence:value("no", "Do Not Load")
app_waitforsilence:value("auto", "Load as Required")
app_waitforsilence.rmempty = true
app_while = module:option(ListValue, "app_while", "While Loops and Conditional Execution", "")
app_while:value("yes", "Load")
app_while:value("no", "Do Not Load")
app_while:value("auto", "Load as Required")
app_while.rmempty = true
return cbimap

View File

@ -0,0 +1,58 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
cdr_csv = module:option(ListValue, "cdr_csv", "Comma Separated Values CDR Backend", "")
cdr_csv:value("yes", "Load")
cdr_csv:value("no", "Do Not Load")
cdr_csv:value("auto", "Load as Required")
cdr_csv.rmempty = true
cdr_custom = module:option(ListValue, "cdr_custom", "Customizable Comma Separated Values CDR Backend", "")
cdr_custom:value("yes", "Load")
cdr_custom:value("no", "Do Not Load")
cdr_custom:value("auto", "Load as Required")
cdr_custom.rmempty = true
cdr_manager = module:option(ListValue, "cdr_manager", "Asterisk Call Manager CDR Backend", "")
cdr_manager:value("yes", "Load")
cdr_manager:value("no", "Do Not Load")
cdr_manager:value("auto", "Load as Required")
cdr_manager.rmempty = true
cdr_mysql = module:option(ListValue, "cdr_mysql", "MySQL CDR Backend", "")
cdr_mysql:value("yes", "Load")
cdr_mysql:value("no", "Do Not Load")
cdr_mysql:value("auto", "Load as Required")
cdr_mysql.rmempty = true
cdr_pgsql = module:option(ListValue, "cdr_pgsql", "PostgreSQL CDR Backend", "")
cdr_pgsql:value("yes", "Load")
cdr_pgsql:value("no", "Do Not Load")
cdr_pgsql:value("auto", "Load as Required")
cdr_pgsql.rmempty = true
cdr_sqlite = module:option(ListValue, "cdr_sqlite", "SQLite CDR Backend", "")
cdr_sqlite:value("yes", "Load")
cdr_sqlite:value("no", "Do Not Load")
cdr_sqlite:value("auto", "Load as Required")
cdr_sqlite.rmempty = true
return cbimap

View File

@ -0,0 +1,56 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
chan_agent = module:option(ListValue, "chan_agent", "Agent Proxy Channel", "")
chan_agent:value("yes", "Load")
chan_agent:value("no", "Do Not Load")
chan_agent:value("auto", "Load as Required")
chan_agent.rmempty = true
chan_alsa = module:option(ListValue, "chan_alsa", "Channel driver for GTalk", "")
chan_alsa:value("yes", "Load")
chan_alsa:value("no", "Do Not Load")
chan_alsa:value("auto", "Load as Required")
chan_alsa.rmempty = true
chan_gtalk = module:option(ListValue, "chan_gtalk", "Channel driver for GTalk", "")
chan_gtalk:value("yes", "Load")
chan_gtalk:value("no", "Do Not Load")
chan_gtalk:value("auto", "Load as Required")
chan_gtalk.rmempty = true
chan_iax2 = module:option(Flag, "chan_iax2", "Option chan_iax2", "")
chan_iax2.rmempty = true
chan_local = module:option(ListValue, "chan_local", "Local Proxy Channel", "")
chan_local:value("yes", "Load")
chan_local:value("no", "Do Not Load")
chan_local:value("auto", "Load as Required")
chan_local.rmempty = true
chan_sip = module:option(ListValue, "chan_sip", "Session Initiation Protocol (SIP)", "")
chan_sip:value("yes", "Load")
chan_sip:value("no", "Do Not Load")
chan_sip:value("auto", "Load as Required")
chan_sip.rmempty = true
return cbimap

View File

@ -0,0 +1,64 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
codec_a_mu = module:option(ListValue, "codec_a_mu", "A-law and Mulaw direct Coder/Decoder", "")
codec_a_mu:value("yes", "Load")
codec_a_mu:value("no", "Do Not Load")
codec_a_mu:value("auto", "Load as Required")
codec_a_mu.rmempty = true
codec_adpcm = module:option(ListValue, "codec_adpcm", "Adaptive Differential PCM Coder/Decoder", "")
codec_adpcm:value("yes", "Load")
codec_adpcm:value("no", "Do Not Load")
codec_adpcm:value("auto", "Load as Required")
codec_adpcm.rmempty = true
codec_alaw = module:option(ListValue, "codec_alaw", "A-law Coder/Decoder", "")
codec_alaw:value("yes", "Load")
codec_alaw:value("no", "Do Not Load")
codec_alaw:value("auto", "Load as Required")
codec_alaw.rmempty = true
codec_g726 = module:option(ListValue, "codec_g726", "ITU G.726-32kbps G726 Transcoder", "")
codec_g726:value("yes", "Load")
codec_g726:value("no", "Do Not Load")
codec_g726:value("auto", "Load as Required")
codec_g726.rmempty = true
codec_gsm = module:option(ListValue, "codec_gsm", "GSM/PCM16 (signed linear) Codec Translation", "")
codec_gsm:value("yes", "Load")
codec_gsm:value("no", "Do Not Load")
codec_gsm:value("auto", "Load as Required")
codec_gsm.rmempty = true
codec_speex = module:option(ListValue, "codec_speex", "Speex/PCM16 (signed linear) Codec Translator", "")
codec_speex:value("yes", "Load")
codec_speex:value("no", "Do Not Load")
codec_speex:value("auto", "Load as Required")
codec_speex.rmempty = true
codec_ulaw = module:option(ListValue, "codec_ulaw", "Mu-law Coder/Decoder", "")
codec_ulaw:value("yes", "Load")
codec_ulaw:value("no", "Do Not Load")
codec_ulaw:value("auto", "Load as Required")
codec_ulaw.rmempty = true
return cbimap

View File

@ -0,0 +1,100 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
format_au = module:option(ListValue, "format_au", "Sun Microsystems AU format (signed linear)", "")
format_au:value("yes", "Load")
format_au:value("no", "Do Not Load")
format_au:value("auto", "Load as Required")
format_au.rmempty = true
format_g723 = module:option(ListValue, "format_g723", "G.723.1 Simple Timestamp File Format", "")
format_g723:value("yes", "Load")
format_g723:value("no", "Do Not Load")
format_g723:value("auto", "Load as Required")
format_g723.rmempty = true
format_g726 = module:option(ListValue, "format_g726", "Raw G.726 (16/24/32/40kbps) data", "")
format_g726:value("yes", "Load")
format_g726:value("no", "Do Not Load")
format_g726:value("auto", "Load as Required")
format_g726.rmempty = true
format_g729 = module:option(ListValue, "format_g729", "Raw G729 data", "")
format_g729:value("yes", "Load")
format_g729:value("no", "Do Not Load")
format_g729:value("auto", "Load as Required")
format_g729.rmempty = true
format_gsm = module:option(ListValue, "format_gsm", "Raw GSM data", "")
format_gsm:value("yes", "Load")
format_gsm:value("no", "Do Not Load")
format_gsm:value("auto", "Load as Required")
format_gsm.rmempty = true
format_h263 = module:option(ListValue, "format_h263", "Raw h263 data", "")
format_h263:value("yes", "Load")
format_h263:value("no", "Do Not Load")
format_h263:value("auto", "Load as Required")
format_h263.rmempty = true
format_jpeg = module:option(ListValue, "format_jpeg", "JPEG (Joint Picture Experts Group) Image", "")
format_jpeg:value("yes", "Load")
format_jpeg:value("no", "Do Not Load")
format_jpeg:value("auto", "Load as Required")
format_jpeg.rmempty = true
format_pcm = module:option(ListValue, "format_pcm", "Raw uLaw 8khz Audio support (PCM)", "")
format_pcm:value("yes", "Load")
format_pcm:value("no", "Do Not Load")
format_pcm:value("auto", "Load as Required")
format_pcm.rmempty = true
format_pcm_alaw = module:option(ListValue, "format_pcm_alaw", "load => .so ; Raw aLaw 8khz PCM Audio support", "")
format_pcm_alaw:value("yes", "Load")
format_pcm_alaw:value("no", "Do Not Load")
format_pcm_alaw:value("auto", "Load as Required")
format_pcm_alaw.rmempty = true
format_sln = module:option(ListValue, "format_sln", "Raw Signed Linear Audio support (SLN)", "")
format_sln:value("yes", "Load")
format_sln:value("no", "Do Not Load")
format_sln:value("auto", "Load as Required")
format_sln.rmempty = true
format_vox = module:option(ListValue, "format_vox", "Dialogic VOX (ADPCM) File Format", "")
format_vox:value("yes", "Load")
format_vox:value("no", "Do Not Load")
format_vox:value("auto", "Load as Required")
format_vox.rmempty = true
format_wav = module:option(ListValue, "format_wav", "Microsoft WAV format (8000hz Signed Line", "")
format_wav:value("yes", "Load")
format_wav:value("no", "Do Not Load")
format_wav:value("auto", "Load as Required")
format_wav.rmempty = true
format_wav_gsm = module:option(ListValue, "format_wav_gsm", "Microsoft WAV format (Proprietary GSM)", "")
format_wav_gsm:value("yes", "Load")
format_wav_gsm:value("no", "Do Not Load")
format_wav_gsm:value("auto", "Load as Required")
format_wav_gsm.rmempty = true
return cbimap

View File

@ -0,0 +1,40 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
func_callerid = module:option(ListValue, "func_callerid", "Caller ID related dialplan functions", "")
func_callerid:value("yes", "Load")
func_callerid:value("no", "Do Not Load")
func_callerid:value("auto", "Load as Required")
func_callerid.rmempty = true
func_enum = module:option(ListValue, "func_enum", "ENUM Functions", "")
func_enum:value("yes", "Load")
func_enum:value("no", "Do Not Load")
func_enum:value("auto", "Load as Required")
func_enum.rmempty = true
func_uri = module:option(ListValue, "func_uri", "URI encoding / decoding functions", "")
func_uri:value("yes", "Load")
func_uri:value("no", "Do Not Load")
func_uri:value("auto", "Load as Required")
func_uri.rmempty = true
return cbimap

View File

@ -0,0 +1,64 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
pbx_ael = module:option(ListValue, "pbx_ael", "Asterisk Extension Language Compiler", "")
pbx_ael:value("yes", "Load")
pbx_ael:value("no", "Do Not Load")
pbx_ael:value("auto", "Load as Required")
pbx_ael.rmempty = true
pbx_config = module:option(ListValue, "pbx_config", "Text Extension Configuration", "")
pbx_config:value("yes", "Load")
pbx_config:value("no", "Do Not Load")
pbx_config:value("auto", "Load as Required")
pbx_config.rmempty = true
pbx_functions = module:option(ListValue, "pbx_functions", "load => .so ; Builtin dialplan functions", "")
pbx_functions:value("yes", "Load")
pbx_functions:value("no", "Do Not Load")
pbx_functions:value("auto", "Load as Required")
pbx_functions.rmempty = true
pbx_loopback = module:option(ListValue, "pbx_loopback", "Loopback Switch", "")
pbx_loopback:value("yes", "Load")
pbx_loopback:value("no", "Do Not Load")
pbx_loopback:value("auto", "Load as Required")
pbx_loopback.rmempty = true
pbx_realtime = module:option(ListValue, "pbx_realtime", "Realtime Switch", "")
pbx_realtime:value("yes", "Load")
pbx_realtime:value("no", "Do Not Load")
pbx_realtime:value("auto", "Load as Required")
pbx_realtime.rmempty = true
pbx_spool = module:option(ListValue, "pbx_spool", "Outgoing Spool Support", "")
pbx_spool:value("yes", "Load")
pbx_spool:value("no", "Do Not Load")
pbx_spool:value("auto", "Load as Required")
pbx_spool.rmempty = true
pbx_wilcalu = module:option(ListValue, "pbx_wilcalu", "Wil Cal U (Auto Dialer)", "")
pbx_wilcalu:value("yes", "Load")
pbx_wilcalu:value("no", "Do Not Load")
pbx_wilcalu:value("auto", "Load as Required")
pbx_wilcalu.rmempty = true
return cbimap

View File

@ -0,0 +1,111 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
featuremap = cbimap:section(TypedSection, "featuremap", "Feature Key maps", "")
featuremap.anonymous = true
featuremap.addremove = true
atxfer = featuremap:option(Value, "atxfer", "Attended transfer key", "")
atxfer.rmempty = true
blindxfer = featuremap:option(Value, "blindxfer", "Blind transfer key", "")
blindxfer.rmempty = true
disconnect = featuremap:option(Value, "disconnect", "Key to Disconnect call", "")
disconnect.rmempty = true
parkcall = featuremap:option(Value, "parkcall", "Key to Park call", "")
parkcall.rmempty = true
featurepark = cbimap:section(TypedSection, "featurepark", "Parking Feature", "")
featurepark.anonymous = true
parkenabled = featurepark:option(Flag, "parkenabled", "Enable Parking", "")
adsipark = featurepark:option(Flag, "adsipark", "ADSI Park", "")
adsipark.rmempty = true
adsipark:depends({ parkenabled = "1" })
atxfernoanswertimeout = featurepark:option(Value, "atxfernoanswertimeout", "Attended transfer timeout (sec)", "")
atxfernoanswertimeout.rmempty = true
atxfernoanswertimeout:depends({ parkenabled = "1" })
automon = featurepark:option(Value, "automon", "One touch record key", "")
automon.rmempty = true
automon:depends({ parkenabled = "1" })
context = featurepark:option(Value, "context", "Name of call context for parking", "")
context.rmempty = true
context:depends({ parkenabled = "1" })
courtesytone = featurepark:option(Value, "courtesytone", "Sound file to play to parked caller", "")
courtesytone.rmempty = true
courtesytone:depends({ parkenabled = "1" })
featuredigittimeout = featurepark:option(Value, "featuredigittimeout", "Max time (ms) between digits for feature activation", "")
featuredigittimeout.rmempty = true
featuredigittimeout:depends({ parkenabled = "1" })
findslot = featurepark:option(ListValue, "findslot", "Method to Find Parking slot", "")
findslot:value("first", "First available slot")
findslot:value("next", "Next free parking space")
findslot.rmempty = true
findslot:depends({ parkenabled = "1" })
parkedmusicclass = featurepark:option(ListValue, "parkedmusicclass", "Music on Hold class for the parked channel", "")
parkedmusicclass.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk" )
parkedmusicclass:depends({ parkenabled = "1" })
cbimap.uci:foreach( "asterisk", "moh", function(s) parkedmusicclass:value(s['.name']) end )
parkedplay = featurepark:option(ListValue, "parkedplay", "Play courtesy tone to", "")
parkedplay:value("caller", "Caller")
parkedplay:value("parked", "Parked user")
parkedplay:value("both", "Both")
parkedplay.rmempty = true
parkedplay:depends({ parkenabled = "1" })
parkext = featurepark:option(Value, "parkext", "Extension to dial to park", "")
parkext.rmempty = true
parkext:depends({ parkenabled = "1" })
parkingtime = featurepark:option(Value, "parkingtime", "Parking time (secs)", "")
parkingtime.rmempty = true
parkingtime:depends({ parkenabled = "1" })
parkpos = featurepark:option(Value, "parkpos", "Range of extensions for call parking", "")
parkpos.rmempty = true
parkpos:depends({ parkenabled = "1" })
pickupexten = featurepark:option(Value, "pickupexten", "Pickup extension", "")
pickupexten.rmempty = true
pickupexten:depends({ parkenabled = "1" })
transferdigittimeout = featurepark:option(Value, "transferdigittimeout", "Seconds to wait bewteen digits when transferring", "")
transferdigittimeout.rmempty = true
transferdigittimeout:depends({ parkenabled = "1" })
xferfailsound = featurepark:option(Value, "xferfailsound", "sound when attended transfer is complete", "")
xferfailsound.rmempty = true
xferfailsound:depends({ parkenabled = "1" })
xfersound = featurepark:option(Value, "xfersound", "Sound when attended transfer fails", "")
xfersound.rmempty = true
xfersound:depends({ parkenabled = "1" })
return cbimap

View File

@ -0,0 +1,88 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
res_config_mysql = module:option(ListValue, "res_config_mysql", "MySQL Config Resource", "")
res_config_mysql:value("yes", "Load")
res_config_mysql:value("no", "Do Not Load")
res_config_mysql:value("auto", "Load as Required")
res_config_mysql.rmempty = true
res_config_odbc = module:option(ListValue, "res_config_odbc", "ODBC Config Resource", "")
res_config_odbc:value("yes", "Load")
res_config_odbc:value("no", "Do Not Load")
res_config_odbc:value("auto", "Load as Required")
res_config_odbc.rmempty = true
res_config_pgsql = module:option(ListValue, "res_config_pgsql", "PGSQL Module", "")
res_config_pgsql:value("yes", "Load")
res_config_pgsql:value("no", "Do Not Load")
res_config_pgsql:value("auto", "Load as Required")
res_config_pgsql.rmempty = true
res_crypto = module:option(ListValue, "res_crypto", "Cryptographic Digital Signatures", "")
res_crypto:value("yes", "Load")
res_crypto:value("no", "Do Not Load")
res_crypto:value("auto", "Load as Required")
res_crypto.rmempty = true
res_features = module:option(ListValue, "res_features", "Call Parking Resource", "")
res_features:value("yes", "Load")
res_features:value("no", "Do Not Load")
res_features:value("auto", "Load as Required")
res_features.rmempty = true
res_indications = module:option(ListValue, "res_indications", "Indications Configuration", "")
res_indications:value("yes", "Load")
res_indications:value("no", "Do Not Load")
res_indications:value("auto", "Load as Required")
res_indications.rmempty = true
res_monitor = module:option(ListValue, "res_monitor", "Call Monitoring Resource", "")
res_monitor:value("yes", "Load")
res_monitor:value("no", "Do Not Load")
res_monitor:value("auto", "Load as Required")
res_monitor.rmempty = true
res_musiconhold = module:option(ListValue, "res_musiconhold", "Music On Hold Resource", "")
res_musiconhold:value("yes", "Load")
res_musiconhold:value("no", "Do Not Load")
res_musiconhold:value("auto", "Load as Required")
res_musiconhold.rmempty = true
res_odbc = module:option(ListValue, "res_odbc", "ODBC Resource", "")
res_odbc:value("yes", "Load")
res_odbc:value("no", "Do Not Load")
res_odbc:value("auto", "Load as Required")
res_odbc.rmempty = true
res_smdi = module:option(ListValue, "res_smdi", "SMDI Module", "")
res_smdi:value("yes", "Load")
res_smdi:value("no", "Do Not Load")
res_smdi:value("auto", "Load as Required")
res_smdi.rmempty = true
res_snmp = module:option(ListValue, "res_snmp", "SNMP Module", "")
res_snmp:value("yes", "Load")
res_snmp:value("no", "Do Not Load")
res_snmp:value("auto", "Load as Required")
res_snmp.rmempty = true
return cbimap

View File

@ -0,0 +1,109 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
sip = cbimap:section(TypedSection, "sip", "SIP Connection", "")
sip.addremove = true
alwaysinternational = sip:option(Flag, "alwaysinternational", "Always Dial International", "")
alwaysinternational.optional = true
canreinvite = sip:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.optional = true
context = sip:option(ListValue, "context", "Context to use", "")
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
countrycode = sip:option(Value, "countrycode", "Country Code for connection", "")
countrycode.optional = true
dtmfmode = sip:option(ListValue, "dtmfmode", "DTMF mode", "")
dtmfmode:value("info", "Use RFC2833 or INFO for the BudgeTone")
dtmfmode:value("rfc2833", "Use RFC2833 for the BudgeTone")
dtmfmode:value("inband", "Use Inband (only with ulaw/alaw)")
dtmfmode.optional = true
extension = sip:option(Value, "extension", "Add as Extension", "")
extension.optional = true
fromdomain = sip:option(Value, "fromdomain", "Primary domain identity for From: headers", "")
fromdomain.optional = true
fromuser = sip:option(Value, "fromuser", "From user (required by many SIP providers)", "")
fromuser.optional = true
host = sip:option(Value, "host", "Host name (or blank)", "")
host.optional = true
incoming = sip:option(DynamicList, "incoming", "Ring on incoming dialplan contexts", "")
incoming.optional = true
insecure = sip:option(ListValue, "insecure", "Allow Insecure for", "")
insecure:value("port", "Allow mismatched port number")
insecure:value("invite", "Do not require auth of incoming INVITE")
insecure:value("port,invite", "Allow mismatched port and Do not require auth of incoming INVITE")
insecure.optional = true
internationalprefix = sip:option(Value, "internationalprefix", "International Dial Prefix", "")
internationalprefix.optional = true
mailbox = sip:option(Value, "mailbox", "Mailbox for MWI", "")
mailbox.optional = true
nat = sip:option(Flag, "nat", "NAT between phone and Asterisk", "")
nat.optional = true
pedantic = sip:option(Flag, "pedantic", "Check tags in headers", "")
pedantic.optional = true
port = sip:option(Value, "port", "SIP Port", "")
port.optional = true
prefix = sip:option(Value, "prefix", "Dial Prefix (for external line)", "")
prefix.optional = true
qualify = sip:option(Value, "qualify", "Reply Timeout (ms) for down connection", "")
qualify.optional = true
register = sip:option(Flag, "register", "Register connection", "")
register.optional = true
secret = sip:option(Value, "secret", "Secret", "")
secret.optional = true
selfmailbox = sip:option(Flag, "selfmailbox", "Dial own extension for mailbox", "")
selfmailbox.optional = true
timeout = sip:option(Value, "timeout", "Dial Timeout (sec)", "")
timeout.optional = true
type = sip:option(ListValue, "type", "Client Type", "")
type:value("friend", "Friend (outbound/inbound)")
type:value("user", "User (inbound - authenticate by \"from\")")
type:value("peer", "Peer (outbound - match by host)")
type.optional = true
username = sip:option(Value, "username", "Username", "")
username.optional = true
return cbimap

View File

@ -0,0 +1,52 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
voicegeneral = cbimap:section(TypedSection, "voicegeneral", "Voicemail general options", "")
serveremail = voicegeneral:option(Value, "serveremail", "From Email address of server", "")
voicemail = cbimap:section(TypedSection, "voicemail", "Voice Mail boxes", "")
voicemail.addremove = true
attach = voicemail:option(Flag, "attach", "Email contains attachment", "")
attach.rmempty = true
email = voicemail:option(Value, "email", "Email", "")
email.rmempty = true
name = voicemail:option(Value, "name", "Display Name", "")
name.rmempty = true
password = voicemail:option(Value, "password", "Password", "")
password.rmempty = true
zone = voicemail:option(ListValue, "zone", "Voice Zone", "")
cbimap.uci:foreach( "asterisk", "voicezone", function(s) zone:value(s['.name']) end )
voicezone = cbimap:section(TypedSection, "voicezone", "Voice Zone settings", "")
voicezone.addremove = true
message = voicezone:option(Value, "message", "Message Format", "")
message.rmempty = true
zone = voicezone:option(Value, "zone", "Time Zone", "")
zone.rmempty = true
return cbimap

View File

@ -0,0 +1,162 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id$
]]--
cbimap = Map("asterisk", "asterisk", "")
asterisk = cbimap:section(TypedSection, "asterisk", "Asterisk General Options", "")
asterisk.anonymous = true
agidir = asterisk:option(Value, "agidir", "AGI directory", "")
agidir.rmempty = true
cache_record_files = asterisk:option(Flag, "cache_record_files", "Cache recorded sound files during recording", "")
cache_record_files.rmempty = true
debug = asterisk:option(Value, "debug", "Debug Level", "")
debug.rmempty = true
dontwarn = asterisk:option(Flag, "dontwarn", "Disable some warnings", "")
dontwarn.rmempty = true
dumpcore = asterisk:option(Flag, "dumpcore", "Dump core on crash", "")
dumpcore.rmempty = true
highpriority = asterisk:option(Flag, "highpriority", "High Priority", "")
highpriority.rmempty = true
initcrypto = asterisk:option(Flag, "initcrypto", "Initialise Crypto", "")
initcrypto.rmempty = true
internal_timing = asterisk:option(Flag, "internal_timing", "Use Internal Timing", "")
internal_timing.rmempty = true
logdir = asterisk:option(Value, "logdir", "Log directory", "")
logdir.rmempty = true
maxcalls = asterisk:option(Value, "maxcalls", "Maximum number of calls allowed", "")
maxcalls.rmempty = true
maxload = asterisk:option(Value, "maxload", "Maximum load to stop accepting new calls", "")
maxload.rmempty = true
nocolor = asterisk:option(Flag, "nocolor", "Disable console colors", "")
nocolor.rmempty = true
record_cache_dir = asterisk:option(Value, "record_cache_dir", "Sound files Cache directory", "")
record_cache_dir.rmempty = true
record_cache_dir:depends({ ["cache_record_files"] = "true" })
rungroup = asterisk:option(Flag, "rungroup", "The Group to run as", "")
rungroup.rmempty = true
runuser = asterisk:option(Flag, "runuser", "The User to run as", "")
runuser.rmempty = true
spooldir = asterisk:option(Value, "spooldir", "Voicemail Spool directory", "")
spooldir.rmempty = true
systemname = asterisk:option(Value, "systemname", "Prefix UniquID with system name", "")
systemname.rmempty = true
transcode_via_sln = asterisk:option(Flag, "transcode_via_sln", "Build transcode paths via SLINEAR, not directly", "")
transcode_via_sln.rmempty = true
transmit_silence_during_record = asterisk:option(Flag, "transmit_silence_during_record", "Transmit SLINEAR silence while recording a channel", "")
transmit_silence_during_record.rmempty = true
verbose = asterisk:option(Value, "verbose", "Verbose Level", "")
verbose.rmempty = true
zone = asterisk:option(Value, "zone", "Time Zone", "")
zone.rmempty = true
hardwarereboot = cbimap:section(TypedSection, "hardwarereboot", "Reload Hardware Config", "")
method = hardwarereboot:option(ListValue, "method", "Reboot Method", "")
method:value("web", "Web URL (wget)")
method:value("system", "program to run")
method.rmempty = true
param = hardwarereboot:option(Value, "param", "Parameter", "")
param.rmempty = true
iaxgeneral = cbimap:section(TypedSection, "iaxgeneral", "IAX General Options", "")
iaxgeneral.anonymous = true
iaxgeneral.addremove = true
allow = iaxgeneral:option(MultiValue, "allow", "Allow Codecs", "")
allow:value("alaw", "alaw")
allow:value("gsm", "gsm")
allow:value("g726", "g726")
allow.rmempty = true
canreinvite = iaxgeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.rmempty = true
static = iaxgeneral:option(Flag, "static", "Static", "")
static.rmempty = true
writeprotect = iaxgeneral:option(Flag, "writeprotect", "Write Protect", "")
writeprotect.rmempty = true
sipgeneral = cbimap:section(TypedSection, "sipgeneral", "Section sipgeneral", "")
sipgeneral.anonymous = true
sipgeneral.addremove = true
allow = sipgeneral:option(MultiValue, "allow", "Allow codecs", "")
allow:value("ulaw", "ulaw")
allow:value("alaw", "alaw")
allow:value("gsm", "gsm")
allow:value("g726", "g726")
allow.rmempty = true
port = sipgeneral:option(Value, "port", "SIP Port", "")
port.rmempty = true
realm = sipgeneral:option(Value, "realm", "SIP realm", "")
realm.rmempty = true
moh = cbimap:section(TypedSection, "moh", "Music On Hold", "")
application = moh:option(Value, "application", "Application", "")
application.rmempty = true
application:depends({ ["asterisk.moh.mode"] = "custom" })
directory = moh:option(Value, "directory", "Directory of Music", "")
directory.rmempty = true
mode = moh:option(ListValue, "mode", "Option mode", "")
mode:value("system", "program to run")
mode:value("files", "Read files from directory")
mode:value("quietmp3", "Quite MP3")
mode:value("mp3", "Loud MP3")
mode:value("mp3nb", "unbuffered MP3")
mode:value("quietmp3nb", "Quiet Unbuffered MP3")
mode:value("custom", "Run a custom application")
mode.rmempty = true
random = moh:option(Flag, "random", "Random Play", "")
random.rmempty = true
return cbimap

View File

@ -0,0 +1,102 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id: asterisk-dialplans.lua 3620 2008-10-23 15:42:12Z jow $
]]--
cbimap = Map("asterisk", "asterisk", "")
dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "")
dialplan.addremove = true
dialplan.dynamic = true
include = dialplan:option(MultiValue, "include", "Include zones and plans", "")
cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end )
dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "")
dialplanexten.anonymous = true
dialplanexten.addremove = true
dialplanexten.dynamic = true
dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "")
dialplangeneral.anonymous = true
dialplangeneral.addremove = true
allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "")
allowtransfer.rmempty = true
canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.rmempty = true
clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "")
clearglobalvars.rmempty = true
dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "")
dialplangoto.anonymous = true
dialplangoto.addremove = true
dialplangoto.dynamic = true
dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "")
dialplanmeetme.anonymous = true
dialplanmeetme.addremove = true
dialplanmeetme.dynamic = true
dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "")
dialplansaytime.anonymous = true
dialplansaytime.addremove = true
dialplansaytime.dynamic = true
dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "")
dialplanvoice.anonymous = true
dialplanvoice.addremove = true
dialplanvoice.dynamic = true
dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "")
dialzone.addremove = true
dialzone.template = "cbi/tblsection"
addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "")
addprefix.rmempty = true
--international = dialzone:option(DynamicList, "international", "Match International prefix", "")
international = dialzone:option(Value, "international", "Match International prefix", "")
international.rmempty = true
localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "")
localprefix.rmempty = true
localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "")
localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end )
match = dialzone:option(Value, "match", "Match plan", "")
match.rmempty = true
uses = dialzone:option(ListValue, "uses", "Connection to use", "")
uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" )
cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end )
cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end )
return cbimap

View File

@ -0,0 +1,60 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id: asterisk-iax-connections.lua 3620 2008-10-23 15:42:12Z jow $
]]--
cbimap = Map("asterisk", "asterisk", "")
iax = cbimap:section(TypedSection, "iax", "IAX Connection", "")
iax.addremove = true
alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "")
alwaysinternational.optional = true
context = iax:option(ListValue, "context", "Context to use", "")
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
countrycode = iax:option(Value, "countrycode", "Country Code for connection", "")
countrycode.optional = true
extension = iax:option(Value, "extension", "Add as Extension", "")
extension.optional = true
host = iax:option(Value, "host", "Host name (or blank)", "")
host.optional = true
internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "")
internationalprefix.optional = true
prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "")
prefix.optional = true
secret = iax:option(Value, "secret", "Secret", "")
secret.optional = true
timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "")
timeout.optional = true
type = iax:option(ListValue, "type", "Option type", "")
type:value("friend", "Friend (outbound/inbound)")
type:value("user", "User (inbound - authenticate by \"from\")")
type:value("peer", "Peer (outbound - match by host)")
type.optional = true
username = iax:option(Value, "username", "User name", "")
username.optional = true
return cbimap

View File

@ -0,0 +1,33 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
$Id: asterisk-meetme.lua 3620 2008-10-23 15:42:12Z jow $
]]--
cbimap = Map("asterisk", "asterisk", "")
meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "")
audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "")
meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "")
meetme.addremove = true
adminpin = meetme:option(Value, "adminpin", "Admin PIN", "")
adminpin.password = true
pin = meetme:option(Value, "pin", "Meeting PIN", "")
pin.password = true
return cbimap

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