<!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="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][14301] </title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=14301">14301</a></dd>
<dt>Author</dt> <dd>seven</dd>
<dt>Date</dt> <dd>2009-07-20 11:36:18 -0500 (Mon, 20 Jul 2009)</dd>
</dl>
<h3>Log Message</h3>
<pre>add FreeSWITCH Air</pre>
<h3>Added Paths</h3>
<ul>
<li>freeswitch/trunk/contrib/seven/fsair/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairactionScriptProperties">freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairflexProperties">freeswitch/trunk/contrib/seven/fsair/.flexProperties</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairproject">freeswitch/trunk/contrib/seven/fsair/.project</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/.settings/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairsettingsorgeclipsecoreresourcesprefs">freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairFreeSWITCHAirair">freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/bin-debug/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugairhelloappxml">freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello-app.xml</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugairhelloswf">freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello.swf</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugfsairappxml">freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair-app.xml</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugfsairswf">freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair.swf</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugfsair_16png">freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_16.png</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugfsair_32png">freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_32.png</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugringWinappxml">freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin-app.xml</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugringWinswf">freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin.swf</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugring_winappxml">freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win-app.xml</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairbindebugring_winswf">freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win.swf</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/icons/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairiconsfsair_16png">freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairiconsfsair_32png">freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/libs/</li>
<li>freeswitch/trunk/contrib/seven/fsair/src/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrcMessageWindowmxml">freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/src/com/</li>
<li>freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/</li>
<li>freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHXMLESL_eventas">freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHsocketESLas">freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHsocketESL_headeras">freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrcfsairappxml">freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrcfsairas">freeswitch/trunk/contrib/seven/fsair/src/fsair.as</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairsrcfsairmxml">freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml</a></li>
<li>freeswitch/trunk/contrib/seven/fsair/tools/</li>
<li><a href="#freeswitchtrunkcontribsevenfsairtoolsMakefile">freeswitch/trunk/contrib/seven/fsair/tools/Makefile</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairtoolsmmsh">freeswitch/trunk/contrib/seven/fsair/tools/mm.sh</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairtoolstee2">freeswitch/trunk/contrib/seven/fsair/tools/tee2</a></li>
<li><a href="#freeswitchtrunkcontribsevenfsairtoolstee2c">freeswitch/trunk/contrib/seven/fsair/tools/tee2.c</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchtrunkcontribsevenfsairactionScriptProperties"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties         (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.actionScriptProperties        2009-07-20 16:36:18 UTC (rev 14301)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairflexProperties"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/.flexProperties (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/seven/fsair/.flexProperties         (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.flexProperties        2009-07-20 16:36:18 UTC (rev 14301)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairproject"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/.project (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/seven/fsair/.project         (rev 0)
+++ freeswitch/trunk/contrib/seven/fsair/.project        2009-07-20 16:36:18 UTC (rev 14301)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsettingsorgeclipsecoreresourcesprefs"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/.settings/org.eclipse.core.resources.prefs (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+#Fri Jul 10 22:37:21 CST 2009
+eclipse.preferences.version=1
+encoding/<project>=utf-8
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairFreeSWITCHAirair"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/FreeSWITCH-Air.air
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugairhelloappxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello-app.xml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairbindebugairhelloswf"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello.swf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/airhello.swf
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugfsairappxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair-app.xml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairbindebugfsairswf"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair.swf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair.swf
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugfsair_16png"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_16.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_16.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugfsair_32png"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_32.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/fsair_32.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugringWinappxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin-app.xml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,135 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairbindebugringWinswf"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin.swf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/ringWin.swf
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairbindebugring_winappxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win-app.xml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,135 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairbindebugring_winswf"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win.swf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/bin-debug/ring_win.swf
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairiconsfsair_16png"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/icons/fsair_16.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairiconsfsair_32png"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/icons/fsair_32.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairsrcMessageWindowmxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/MessageWindow.mxml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHXMLESL_eventas"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/XML/ESL_event.as (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+// 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]);
+                        }
+                }
+        }
+        
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHsocketESLas"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL.as (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,153 @@
</span><ins>+// 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);
+                }
+                        
+        }
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrccomFreeSWITCHsocketESL_headeras"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/com/FreeSWITCH/socket/ESL_header.as (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+// 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];
+                }        
+        
+        }
+
+}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrcfsairappxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/fsair-app.xml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrcfsairas"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/fsair.as (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,306 @@
</span><ins>+                
+                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";
+                }
+                
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairsrcfsairmxml"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/src/fsair.mxml (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+<?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>
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairtoolsMakefile"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/tools/Makefile (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+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
</ins></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairtoolsmmsh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/tools/mm.sh (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+#!/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
+
</ins><span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/tools/mm.sh
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:executable
</span><span class="cx"> + *
</span></span></pre></div>
<a id="freeswitchtrunkcontribsevenfsairtoolstee2"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/seven/fsair/tools/tee2</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/seven/fsair/tools/tee2
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:executable
</span><span class="cx"> + *
</span><span class="cx">Name: svn:mime-type
</span><span class="cx"> + application/octet-stream
</span><a id="freeswitchtrunkcontribsevenfsairtoolstee2c"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/seven/fsair/tools/tee2.c (0 => 14301)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+/* 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);
+}
</ins></span></pre>
</div>
</div>
<div id="footer">See you at ClueCon</div>
</body>
</html>