Revision
14301
Author
seven
Date
2009-07-20 11:36:18 -0500 (Mon, 20 Jul 2009)

Log Message

add FreeSWITCH Air

Added Paths

Diff

Added: freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<actionScriptProperties mainApplicationPath="fsair.mxml" version="3">
+<compiler additionalCompilerArguments="-locale en_US" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.124" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" useApolloConfig="true" verifyDigests="true" warn="true">
+<compilerSourcePath/>
+<libraryPath defaultLinkType="1">
+<libraryPathEntry kind="4" path=""/>
+<libraryPathEntry kind="1" linkType="1" path="libs"/>
+</libraryPath>
+<sourceAttachmentPath/>
+</compiler>
+<applications>
+<application path="fsair.as"/>
+<application path="fsair.mxml"/>
+</applications>
+<modules/>
+<buildCSSFiles/>
+</actionScriptProperties>

Added: freeswitch/trunk/contrib/seven/fsair/.flexProperties (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/.flexProperties	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.flexProperties	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>

Added: freeswitch/trunk/contrib/seven/fsair/.project (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/.project	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.project	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>fsair</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.adobe.flexbuilder.project.flexbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.adobe.flexbuilder.apollo.apollobuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.adobe.flexbuilder.apollo.apollonature</nature>
+		<nature>com.adobe.flexbuilder.project.flexnature</nature>
+		<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+	</natures>
+</projectDescription>

Added: freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,3 @@
+#Fri Jul 10 22:37:21 CST 2009
+eclipse.preferences.version=1
+encoding/<project>=utf-8

Added: freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello-app.xml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello-app.xml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello-app.xml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>airhello</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>airhello</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>  
+  		<text xml:lang="en">FreeSWITCH Air SoftPhone</text>  
+  		<text xml:lang="fr">FreeSWITCH Air SoftPhone</text>  
+ 		<text xml:lang="zh">FreeSWITCH Air 软电话</text>  
+	</name> 
+	
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>Ver 0.0.1</version>
+
+	<!-- Description, displayed in the AIR application installer.
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>airhello.swf</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<systemChrome>none</systemChrome>
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<transparent>true</transparent>
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<!-- <icon>
+		<image16x16></image16x16>
+		<image32x32></image32x32>
+		<image48x48></image48x48>
+		<image128x128></image128x128>
+	</icon> -->
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello.swf


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello.swf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair-app.xml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair-app.xml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair-app.xml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>fsair</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>fsair</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>  
+  		<text xml:lang="en">FreeSWITCH Air SoftPhone</text>  
+  		<text xml:lang="fr">FreeSWITCH Air SoftPhone</text>  
+ 		<text xml:lang="zh">FreeSWITCH Air 软电话</text>  
+	</name> 
+	
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>Ver 0.0.1</version>
+
+	<!-- Description, displayed in the AIR application installer.
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>fsair.swf</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<systemChrome>none</systemChrome>
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<transparent>true</transparent>
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<resizable>false</resizable>
+
+		<!-- The window's initial width. Optional. -->
+		<width>400</width>
+
+		<!-- The window's initial height. Optional. -->
+		<height>460</height>
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<image16x16>icons/fsair_16.png</image16x16>
+		<image32x32>icons/fsair_32.png</image32x32>
+		<!--<image48x48></image48x48>
+		<image128x128></image128x128>-->
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair.swf


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair.swf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_16.png


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_16.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_32.png


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_32.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin-app.xml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin-app.xml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin-app.xml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>com.fsair.ringWin</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>ringWin</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>ringWin</name>
+
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>v1</version>
+
+	<!-- Description, displayed in the AIR application installer.
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>ringWin.swf</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<!-- <icon>
+		<image16x16></image16x16>
+		<image32x32></image32x32>
+		<image48x48></image48x48>
+		<image128x128></image128x128>
+	</icon> -->
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin.swf


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin.swf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win-app.xml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win-app.xml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win-app.xml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>com.ring-win</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>ring_win</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>ring_win</name>
+
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>v1</version>
+
+	<!-- Description, displayed in the AIR application installer.
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>ring_win.swf</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<!-- <icon>
+		<image16x16></image16x16>
+		<image32x32></image32x32>
+		<image48x48></image48x48>
+		<image128x128></image128x128>
+	</icon> -->
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win.swf


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win.swf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="70">
+	<mx:Label x="39" y="19" text="Incoming Call ..." id="MessageLabel" width="220"/>
+	<mx:Button x="71" y="36" label="Accept"/>
+	<mx:Button x="217" y="36" label="Reject"/>
+
+		
+</mx:Window>

Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,55 @@
+// ActionScript file
+
+
+package com.FreeSWITCH.XML {
+	import flash.errors.*;
+	import flash.events.*;
+	import flash.utils.Dictionary;
+		
+	public class ESL_event extends Object
+	{
+		private var xml:XML;
+		private var plain:Dictionary;
+		private var type:String;
+				
+
+		public function ESL_event(event_type:String, str:String="<xml></xml>"):void{
+			type = event_type;
+			
+			if (type == "xml") { 
+				xml = new XML(str);
+			} else {
+				plain = new Dictionary;
+				for each( var line:String in str.split("\n") ) {
+					var a:Array = line.split(": ");
+					plain[a[0]] = a[1];
+				}
+			}	
+		}
+
+		public function toString():String {
+			if (type == "xml" ) {
+				return xml.toString();
+			} else {
+				return plain.toString();
+			}
+		}
+		
+		public function event_name():String{
+			return get_value("Event-Name");
+		}
+		
+		public function event_subclass():String{
+			return get_value("Event-Subclass");
+		}
+		
+		public function get_value(element:String):String{
+			if ( type == "xml" ) {
+				return unescape(xml.headers.elements(element));
+			} else {
+				return unescape(plain[element]);
+			}
+		}
+	}
+	
+}

Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,153 @@
+// ActionScript file
+
+
+package com.FreeSWITCH.socket {
+	import com.FreeSWITCH.XML.ESL_event;
+	
+	import flash.errors.*;
+	import flash.events.*;
+	import flash.net.Socket;
+	import flash.utils.ByteArray;
+	import flash.utils.Dictionary;
+
+		
+	public class ESL extends Socket
+	{
+
+		private var last_data:String;
+		
+		private var event_callback:Dictionary = new Dictionary();
+		private var api_callback:Function;
+		private var command_callback:Function;
+		private var esl_password:String;
+		
+		public function ESL(password:String = "ClueCon"):void {
+			trace("init");
+			esl_password = password;
+			addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
+		}
+		
+		public function addEventCallback(key:String, func:Function):void{
+			event_callback[key] = func;
+		}
+		
+		public function dataHandler(event:ProgressEvent):void {
+			
+			var str:String = readUTFBytes(event.bytesLoaded);
+			var header:ESL_header;
+			var body:String;
+			
+			var head_end:int;
+
+			if (last_data != null) {
+				str = last_data + str;
+				last_data = null;
+			}
+			
+			while (str != null && str.length > 0) {
+			 
+			 	head_end = str.indexOf("\n\n");
+			 	if (head_end < 0) {
+			 		last_data = str;
+			 		break;
+			 	}
+
+				header = new ESL_header(str.substring(0, head_end));
+				body = str.substr(head_end + 2, header.content_length());
+				
+				if (body.length < header.content_length() ) {
+					last_data = str;
+					trace("last_date: " + last_data);
+					break;
+				}
+				
+				str = str.substr(head_end + 2 + header.content_length() );
+//trace(str);				
+//				trace(header.content_type());
+				
+				if(header.content_type() == "auth/request") {
+					auth(esl_password);
+				}else if(header.content_type() == "api/response") {
+					
+					if (api_callback != null) {
+						api_callback(body);
+						api_callback = null;
+					}
+				}else if(header.content_type() == "command/reply") {
+					if (command_callback != null) {
+						command_callback(header.getHeader("Reply-Text"));
+						command_callback = null;
+					}	
+				}else if(header.content_type().indexOf("text/event-") >= 0) {
+					
+					var event_type:String = header.content_type() == "text/event-xml" ? "xml" : "plain";
+						
+					var eslev:ESL_event = new ESL_event(event_type, body);
+							
+					for (var key:Object in event_callback)
+					{			
+	   					trace(key + ", " + event_callback[key]);
+	   					
+	   					var event_name:String, event_subclass:String;
+	   					var a:Array = key.toString().split('|');
+	   					event_name = a[0];
+	   					event_subclass = a[1];
+	   				
+	   					trace("event_name: " + eslev.event_name());
+	   					trace("event_subclass: " + eslev.event_subclass());
+	   					
+						if ( eslev.event_name() == event_name && 
+							(event_subclass == '-' || eslev.event_subclass() == event_subclass)) {
+							event_callback[key](eslev);
+						}
+					
+					}
+											
+				}
+			}
+									
+		}
+
+				
+		public function esl_send(str:String, callback:Function=null):void {
+			var ba:ByteArray = new ByteArray();  
+			ba.writeMultiByte(str + "\n\n", "UTF-8");
+			
+			command_callback = callback;
+			writeBytes(ba);
+			flush();
+		}
+
+		public function auth(pass:String, callback:Function=null):void {
+			esl_send("Auth " + pass, callback);
+		}
+		
+		public function esl_event(events:String, type:String="plain"):void {
+			esl_send("event " + type + " " + events);
+		}
+		
+		public function esl_filter(header:String, value:String, del:String=""):void {
+			esl_send("filter " + del + " header " + "value");
+		}
+				
+		public function api(str:String, callback:Function=null):void {
+			api_callback = callback;
+			esl_send("api " + str);
+		}
+		
+		public function bgapi(str:String, callback:Function=null):void{
+			api_callback = callback;
+    		esl_send("bgapi " + str);	
+		}
+			
+		public function execute(app:String, app_arg:String, uuid:String):void{
+			var str:String = "sendmsg " + uuid + "\n\n";
+			str += "call-command: execute";
+			str += "execute-app-name: " + app;
+			str += "execute-app-arg: " + app_arg;
+			
+			esl_send(str);
+		}
+			
+	}
+}

Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,37 @@
+// ActionScript file
+
+package com.FreeSWITCH.socket {
+	import flash.utils.Dictionary;
+		
+	public class ESL_header
+	{
+		
+		private var header:Dictionary = new Dictionary;
+		
+		public function ESL_header(str:String):void {
+
+			for each( var line:String in str.split("\n") ) {
+				var a:Array = line.split(": ");
+				if(a.length != 2) {
+					continue;
+				}
+				header[a[0]] = a[1];
+			}
+			
+		}
+		
+		public function content_type():String {
+			return header["Content-Type"];
+		}
+		
+		public function content_length():int {
+			return (int)(header["Content-Length"]) ;
+		}
+		
+		public function getHeader(key:String):String {
+			return header[key];
+		}	
+	
+	}
+
+}
\ No newline at end of file

Added: freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://ns.adobe.com/air/application/1.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>fsair</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>fsair</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>  
+  		<text xml:lang="en">FreeSWITCH Air SoftPhone</text>  
+  		<text xml:lang="fr">FreeSWITCH Air SoftPhone</text>  
+ 		<text xml:lang="zh">FreeSWITCH Air 软电话</text>  
+	</name> 
+	
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>Ver 0.0.1</version>
+
+	<!-- Description, displayed in the AIR application installer.
+	     May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>[This value will be overwritten by Flex Builder in the output app.xml]</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<systemChrome>none</systemChrome>
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<transparent>true</transparent>
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<resizable>false</resizable>
+
+		<!-- The window's initial width. Optional. -->
+		<width>400</width>
+
+		<!-- The window's initial height. Optional. -->
+		<height>460</height>
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<image16x16>icons/fsair_16.png</image16x16>
+		<image32x32>icons/fsair_32.png</image32x32>
+		<!--<image48x48></image48x48>
+		<image128x128></image128x128>-->
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

Added: freeswitch/trunk/contrib/seven/fsair/src/fsair.as (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/fsair.as	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/fsair.as	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,306 @@
+		
+		import com.FreeSWITCH.XML.ESL_event;
+		import com.FreeSWITCH.socket.ESL;
+		
+		import flash.events.*;
+		import flash.utils.Dictionary;
+		import flash.utils.Timer;  
+		
+		var uuids:Dictionary = new Dictionary();
+		
+		var esl:ESL;
+		
+		var ring_win:MessageWindow = new MessageWindow();
+		
+		function initApp():void {
+			trace(NativeApplication.nativeApplication.runtimeVersion);
+			ringBox.visible = false;
+			getSettings();
+			esl = new ESL(esl_pass.text);
+			connect();
+			
+		}
+		
+		function connect():void {  
+			try  
+			{  
+				if (esl.connected ) {
+					msg("Already Connected");
+					return;
+				}  
+
+				esl.connect(esl_addr.text, (int)(esl_port.text));
+				esl.addEventListener(Event.CONNECT, connectHandler);  
+				esl.addEventListener(Event.CLOSE, closeHandler);  
+				esl.addEventListener(ErrorEvent.ERROR, errorHandler);  
+				esl.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
+//				 esl.addListener(ProgressEvent.SOCKET_DATA, dataHandler);
+				esl.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
+
+				esl.addEventCallback("CUSTOM|portaudio::ringing", onRing);
+				esl.addEventCallback("CHANNEL_HANGUP|-", onHangup);
+			   
+			    var timer:Timer = new Timer(2000);
+				timer.addEventListener(TimerEvent.TIMER, post_connect);
+				timer.start();
+				msg("timer started");
+			}
+			  
+			catch (error:Error)  
+			{  
+				msg(error.message + "\n");  
+				esl.close();  
+			}  
+		 
+		}
+		
+		function post_connect(event:TimerEvent):void {
+			event.target.stop();
+			msg("timer stoped");
+			initDevList();
+//			esl.esl_event("ALL");
+			esl.esl_event("CHANNEL_HANGUP CUSTOM portaudio::ringing");
+						
+		}
+			
+		function setTitle(title:String):void {
+			this.title = "FreeSWITCH Air - [" + title + ']';
+		}
+			
+		function msg(message:String):void
+		{
+			logBox.text += message + "\n";
+			logBox.verticalScrollPosition = logBox.maxVerticalScrollPosition;
+		}
+		
+		function clearLogs():void {
+			logBox.text = logBox.text.substr(-1, 40);
+		}			  
+		
+		function connectHandler(event:Event):void {
+			setTitle('Connected');
+			msg("Connected: " + esl_addr.text + ":" + esl_port.text);
+		}  
+		function closeHandler(event:Event):void {
+			//msg(event.type + ' ' + event.toString());
+			setTitle('Disconnected');
+		}
+		function errorHandler(event:Event):void {
+			msg(event.type + ' ' + event.toString());
+			setTitle('Error');
+		}
+		function ioErrorHandler(event:IOErrorEvent):void {
+			msg(event.type + ' ' + event.toString());
+			setTitle('IOError');	
+		}
+		function securityErrorHandler(event:SecurityErrorEvent):void {
+			msg(event.type + ' ' + event.toString());
+			setTitle('SecurityError');	
+		}
+		
+		function onRing(eslev:ESL_event):void {
+			
+			var uuid:String = eslev.get_value("Unique-ID");
+			var caller_id_name:String = eslev.get_value("Caller-Caller-ID-Name");
+			var caller_id_number:String = eslev.get_value("Caller-Caller-ID-Number");			
+			var call_id:String = eslev.get_value("call_id");
+			
+			uuids[uuid] = call_id;
+
+			callerID.text = caller_id_name + ' <' + caller_id_number + '>';
+			ringBox.visible = true;
+			
+			
+			msg('Incoming call: ' + caller_id_name + '<' + caller_id_number + '>');
+			msg(uuid);
+			
+			//how to make this work?
+			//this.stage.nativeWindow.icon.bounce();
+			
+//			NativeApplication.nativeApplication.icon.bounce(NotificationType.CRITICAL)
+     		stage.nativeWindow.notifyUser(NotificationType.CRITICAL);
+
+			//show a ring window? 
+//			ring_win.MessageLabel.text = "Incoming Call";
+//			ring_win.open();
+			
+		}
+		
+		function onHangup(eslev:ESL_event):void {
+			
+			var uuid:String = eslev.get_value("Unique-ID");
+			
+			if (uuids[uuid] != null) {
+				msg("hangup");
+				callerID.text = "Hangup";
+				delete uuids[uuid];
+			}
+			
+		}
+	  
+		function sendDtmf(dtmf:String):void {
+			esl.api("pa dtmf " + dtmf);
+		}
+		
+		function switchPA():void {
+			esl.api("pa switch");
+		}
+				
+		function sendCommand():void  
+		{  
+		
+			msg('>>> ' + command.text);
+			
+			if (command.text.substr(0,1) == '/') {
+				esl.esl_send(command.text.substr(1), commandCallback);
+			} else {
+				esl.api(command.text, commandCallback)
+			}
+			  
+		} 
+		
+		function commandCallback(data:String):void {
+			msg(data);
+		}
+	
+		function answer():void{
+			esl.api("pa answer");
+			ringBox.visible = false;
+		}
+			
+		function hangup():void{
+			esl.api("pa hangup");
+			ringBox.visible = false;
+		}
+		
+		function call():void{
+			esl.api("pa call " + number.text, updateUUID);
+			msg("Calling " + number.text);
+			
+			if( number.dataProvider.length < 1) {
+				number.dataProvider.addItemAt(number.text, 0);
+			} else if (number.dataProvider.getItemAt(0) != number.text ){
+				number.dataProvider.addItemAt(number.text, 0);
+			}
+			
+		}
+		
+		function updateUUID(data:String):void {
+			
+			var a:Array = new Array();
+			a = data.split(":");
+			
+			trace(data);
+			
+			if (a.length == 3 && a[0] == "SUCCESS") {
+				uuids[a[2].substr(0, a[2].length - 1) ] = a[1];
+			} 
+			
+		}
+		
+		function initDevList():void {
+			esl.api("pa devlist xml", devlistCallback);
+		}
+			
+		function reloadDevList():void {
+//			esl.api("pa rescan");
+			esl.api("pa devlist xml", devlistCallback);
+		}
+		
+		function devlistCallback(data:String):void {
+//			msg(data);
+			
+			var xml:XML = new XML(data);
+			
+			inDev.dataProvider.removeAll();
+			outDev.dataProvider.removeAll();
+			ringDev.dataProvider.removeAll();
+			
+			for each (var d:XML in xml.devices.device){
+				
+				if (d.@inputs > 0) {
+					inDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+					
+				}else if(d.@outputs > 0) {
+					outDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+					ringDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+					
+				}
+				
+				if (d.@id == xml.bindings.input.@device) {
+					inDev.selectedIndex = inDev.dataProvider.length - 1;
+				} else if (d.@id == xml.bindings.output.@device) {
+					outDev.selectedIndex = outDev.dataProvider.length - 1;
+					if (d.@id == xml.bindings.ring.@device) {
+						ringDev.selectedIndex = ringDev.dataProvider.length - 1;
+						 
+					} 
+				}
+				
+				
+
+			}
+			
+		}
+		
+		function setPaDev():void{
+			esl.api("pa indev #" + inDev.selectedItem.value);
+			esl.api("pa outdev #" + outDev.selectedItem.value);
+			esl.api("pa ringdev #" + ringDev.selectedItem.value);
+		}
+		
+		function unloadPA():void {
+			esl.api("unload mod_portaudio");
+		}
+		
+		function loadPA():void {
+			esl.api("load mod_portaudio");
+		}
+		
+		function loopPA():void {
+			esl.api("pa looptest");
+		}
+		
+		function toggleAdvanced():void {
+			if (this.width == 260 ) {
+				this.width = 620;
+				advancedButton.label = "Advanced <<<";
+			} else {
+				this.width = 260;
+				advancedButton.label = "Advanced >>>";
+			}
+			
+			
+		}
+		
+		function _save_settings(key:String, val:String):void {
+			var bytes:ByteArray = new ByteArray();  
+ 			bytes.writeUTFBytes(val);  
+ 			EncryptedLocalStore.setItem(key, bytes);  
+		}
+		function _get_settings(key:String):String {
+			var storedValue:ByteArray = EncryptedLocalStore.getItem(key);  
+			
+			if (storedValue == null) {
+				return null;
+			}
+			
+ 			return storedValue.readUTFBytes(storedValue.length); 
+		}
+		
+		function saveSettings():void {
+			   
+ 			_save_settings("freeswitch_install_path", freeswitch_install_path.text);
+ 			_save_settings("esl_addr", esl_addr.text);
+ 			_save_settings("esl_port", esl_port.text);
+ 			_save_settings("esl_pass", esl_pass.text);
+ 			
+		}
+		
+		function getSettings():void {
+			freeswitch_install_path.text = _get_settings("freeswitch_install_path") || "/usr/local/freeswitch";
+			esl_addr.text = _get_settings("esl_addr") || "127.0.0.1";
+			esl_port.text = _get_settings("esl_port") || "8021";
+			esl_pass.text = _get_settings("esl_pass") || "ClueCon";
+		}
+		
\ No newline at end of file

Added: freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
+	layout="absolute" title="FreeSWITCH Air" height="408" width="622"
+	creationComplete = "initApp()">
+	
+	<mx:Script source="fsair.as"/>
+	
+	<mx:Style> 
+    WindowedApplication 
+    { 
+        background-color:"0x999999"; 
+        background-alpha:"0.5"; 
+    } 
+	</mx:Style>
+	<mx:Label text="Hello World" enabled="true" horizontalCenter="-232" verticalCenter="14" id="label1"/>
+	<mx:Button x="137" y="10" label="Advanced &lt;&lt;&lt;" click="toggleAdvanced()" width="114" id="advancedButton"/>
+	<mx:Panel x="0" y="40" width="251" height="219" layout="absolute" color="#3232C0" barColor="#3FB92B" headerHeight="10" headerColors="2">
+		<mx:Button x="176" y="135" label="Call" click="call()" width="51" color="#00FF00"/>
+		<mx:Button x="176" y="105" label="Hup" click="hangup()" id="btnHangup" width="50" color="#FF0000"/>
+		<mx:Button x="11.5" y="8" label="1" width="30" height="24" click="sendDtmf('1')"/>
+		<mx:Button x="49.5" y="8" label="2" width="30" height="24" click="sendDtmf('2')"/>
+		<mx:Button x="87.5" y="8" label="3" width="30" height="24" click="sendDtmf('3')"/>
+		<mx:Button x="11.5" y="40" label="4" width="30" height="24" click="sendDtmf('4')"/>
+		<mx:Button x="49.5" y="40" label="5" width="30" height="24" click="sendDtmf('5')"/>
+		<mx:Button x="87.5" y="72" label="9" width="30" height="24" click="sendDtmf('9')"/>
+		<mx:Button x="49.5" y="72" label="8" width="30" height="24" click="sendDtmf('8')"/>
+		<mx:Button x="11.5" y="72" label="7" width="30" height="24" click="sendDtmf('7')"/>
+		<mx:Button x="87.5" y="40" label="6" width="30" height="24" click="sendDtmf('6')"/>
+		<mx:Button x="87.5" y="104" label="#" width="30" height="24" click="sendDtmf('#')"/>
+		<mx:Button x="125.5" y="9" label="A" width="30" height="24" click="sendDtmf('A')"/>
+		<mx:Button x="125.5" y="73" label="C" width="30" height="24" click="sendDtmf('C')"/>
+		<mx:Button x="125.5" y="41" label="B" width="30" height="24" click="sendDtmf('B')"/>
+		<mx:Button x="125.5" y="104" label="D" width="30" height="24" click="sendDtmf('D')"/>
+		<mx:Button x="49.5" y="104" label="0" width="30" height="24" click="sendDtmf('0')"/>
+		<mx:Button x="11.5" y="104" label="*" width="30" height="24" click="sendDtmf('*')"/>
+		<mx:Button x="176" y="74" label="sw" click="switchPA()" width="51"/>
+		<mx:ComboBox x="10" y="135" editable="true" width="145.5" id="number"></mx:ComboBox>
+		<mx:Label x="10" y="169" text="_" id="callerID"/>
+	</mx:Panel>
+	<mx:TabNavigator x="259" y="10" width="352" height="311" id="tn1" creationPolicy="all">
+		<mx:Canvas label="Devices" width="100%" height="100%">
+			<mx:Button x="23" y="128" label="Get" click="reloadDevList()"/>
+			<mx:Button x="68" y="128" label="Set" click="setPaDev()"/>
+			<mx:Button x="182" y="128" label="UnLoad" click="unloadPA()"/>
+			<mx:Button x="248" y="128" label="Load" click="loadPA()"/>
+			<mx:Button x="112" y="127" label="Loop" click="loopPA()" width="53" height="23"/>
+			<mx:ComboBox x="95" y="28" id="inDev" width="206"></mx:ComboBox>
+			<mx:ComboBox x="95" y="54" id="outDev" width="206"></mx:ComboBox>
+			<mx:ComboBox x="95" y="84" id="ringDev" width="206"></mx:ComboBox>
+			<mx:Label x="23" y="30" text="Sound In"/>
+			<mx:Label x="23" y="56" text="Sound Out"/>
+			<mx:Label x="23" y="86" text="Ring Dev"/>
+		</mx:Canvas>
+		<mx:Canvas label="Settings" width="100%" height="100%">
+			<mx:Label x="10" y="24" text="FreeSWITCH Install  Path" width="169"/>
+			<mx:TextInput x="10" y="50" width="315" text="/usr/local/freeswitch" id="freeswitch_install_path"/>
+			<mx:TextInput x="10" y="106" width="107" text="127.0.0.1" id="esl_addr"/>
+			<mx:TextInput x="125" y="106" width="42" text="8021" id="esl_port"/>
+			<mx:Label x="10" y="80" text="Event Socket Addr" width="120"/>
+			<mx:Label x="125" y="80" text="Port" width="32"/>
+			<mx:Button x="254" y="106" label="connect" click="connect()"/>
+			<mx:Button x="271" y="182" label="Save" click="saveSettings()"/>
+			<mx:Label x="175" y="80" text="Password" width="58"/>
+			<mx:TextInput x="175" y="106" width="71" text="ClueCon" id="esl_pass"/>
+
+		</mx:Canvas>
+		<mx:Panel label="Logs" width="100%" height="100%" layout="absolute">
+			<mx:TextArea width="326" height="196" id="logBox" x="0" y="2"/>
+			<mx:TextInput width="246" id="command" y="206"/>
+			<mx:Button label="Send" click="sendCommand()" x="254" y="206"/>
+			<mx:Button label="Clear" click="clearLogs" x="254" y="-28"/>
+		</mx:Panel>
+		
+	</mx:TabNavigator>
+	<mx:Panel x="0" y="258" width="251" height="63" layout="absolute" headerHeight="5" id="ringBox">
+		<mx:Button x="10" y="11" label="Answer" click="answer()" id="btnAnswer" color="#FFFFFF" fillColors="#00FF00"/>
+		<mx:Button x="138" y="10" label="Reject" click="hangup()" color="#FFFFFF" fillColors="#FF0000"/>
+	</mx:Panel>
+	
+</mx:WindowedApplication>

Added: freeswitch/trunk/contrib/seven/fsair/tools/Makefile (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/tools/Makefile	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/tools/Makefile	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,10 @@
+all:
+	gcc -o tee2 tee2.c
+
+install: tee2
+	install tee2 /usr/local/bin
+	#install tee2 /usr/bin
+	#cp tee2 /usr/local/bin/
+
+clean:
+	rm -f tee2

Added: freeswitch/trunk/contrib/seven/fsair/tools/mm.sh (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/tools/mm.sh	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/tools/mm.sh	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+echo > /tmp/a
+echo > /tmp/b
+#tail -f /tmp/b &
+tail -f /tmp/a | nc localhost 8021 | tee2 /tmp/b | nc -l -k 8022 | tee /tmp/a 
+
Property changes on: freeswitch/trunk/contrib/seven/fsair/tools/mm.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: freeswitch/trunk/contrib/seven/fsair/tools/tee2


(Binary files differ)
Property changes on: freeswitch/trunk/contrib/seven/fsair/tools/tee2 ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream

Added: freeswitch/trunk/contrib/seven/fsair/tools/tee2.c (0 => 14301)


--- freeswitch/trunk/contrib/seven/fsair/tools/tee2.c	                        (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/tools/tee2.c	2009-07-20 16:36:18 UTC (rev 14301)
@@ -0,0 +1,50 @@
+/* tee2 - read from standard input and write to standard output, 
+   standard error and a file.
+   Useful when you redirect the stdout but still want to keep an eye on
+   the output. Like a B2BSocket:                                             
+
+   $ echo > /tmp/a
+   $ echo > /tmp/b
+   $ tail -f /tmp/a | nc localhost 8021 | tee2 /tmp/b | nc -l -k 8022 | tee /tmp/a
+
+   Want to write to more than one file? Just using the UNIX art
+   $ echo blah | tee2 /tmp/1 | tee /tmp/{2,3,4,5,6}
+
+/* Author: Seven Du  */
+ 
+#include <stdio.h>
+#include <stdlib.h>
+ 
+int main (int argc, char **argv)
+{
+	char c;
+	char *file_name;
+	FILE *file;
+	if (argc < 2) {
+		fprintf(stderr, "Usage: tee2 <file_name>\n");
+		exit(1);
+	}           
+	    
+	file_name = argv[1];
+	
+	if(! (file = fopen(file_name, "w")) ){
+		fprintf(stderr, "Error write file %s !\n", file_name);
+		exit(2);
+	}           
+	
+	while((c = fgetc(stdin)) != EOF) {
+		putc(c, file);
+		putc(c, stdout);
+		putc(c, stderr);
+		
+		if(c == '\n') {
+			fflush(file);
+			fflush(stdout);
+			fflush(stderr);
+		}
+		
+	}                      
+	
+	fclose(file);
+	exit(0);
+}