<!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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;actionScriptProperties mainApplicationPath=&quot;fsair.mxml&quot; version=&quot;3&quot;&gt;
+&lt;compiler additionalCompilerArguments=&quot;-locale en_US&quot; copyDependentFiles=&quot;true&quot; enableModuleDebug=&quot;true&quot; generateAccessible=&quot;false&quot; htmlExpressInstall=&quot;true&quot; htmlGenerate=&quot;false&quot; htmlHistoryManagement=&quot;false&quot; htmlPlayerVersion=&quot;9.0.124&quot; htmlPlayerVersionCheck=&quot;true&quot; outputFolderPath=&quot;bin-debug&quot; sourceFolderPath=&quot;src&quot; strict=&quot;true&quot; useApolloConfig=&quot;true&quot; verifyDigests=&quot;true&quot; warn=&quot;true&quot;&gt;
+&lt;compilerSourcePath/&gt;
+&lt;libraryPath defaultLinkType=&quot;1&quot;&gt;
+&lt;libraryPathEntry kind=&quot;4&quot; path=&quot;&quot;/&gt;
+&lt;libraryPathEntry kind=&quot;1&quot; linkType=&quot;1&quot; path=&quot;libs&quot;/&gt;
+&lt;/libraryPath&gt;
+&lt;sourceAttachmentPath/&gt;
+&lt;/compiler&gt;
+&lt;applications&gt;
+&lt;application path=&quot;fsair.as&quot;/&gt;
+&lt;application path=&quot;fsair.mxml&quot;/&gt;
+&lt;/applications&gt;
+&lt;modules/&gt;
+&lt;buildCSSFiles/&gt;
+&lt;/actionScriptProperties&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;flexProperties flexServerType=&quot;0&quot; toolCompile=&quot;true&quot; useServerFlexSDK=&quot;false&quot; version=&quot;1&quot;/&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;projectDescription&gt;
+        &lt;name&gt;fsair&lt;/name&gt;
+        &lt;comment&gt;&lt;/comment&gt;
+        &lt;projects&gt;
+        &lt;/projects&gt;
+        &lt;buildSpec&gt;
+                &lt;buildCommand&gt;
+                        &lt;name&gt;com.adobe.flexbuilder.project.flexbuilder&lt;/name&gt;
+                        &lt;arguments&gt;
+                        &lt;/arguments&gt;
+                &lt;/buildCommand&gt;
+                &lt;buildCommand&gt;
+                        &lt;name&gt;com.adobe.flexbuilder.apollo.apollobuilder&lt;/name&gt;
+                        &lt;arguments&gt;
+                        &lt;/arguments&gt;
+                &lt;/buildCommand&gt;
+        &lt;/buildSpec&gt;
+        &lt;natures&gt;
+                &lt;nature&gt;com.adobe.flexbuilder.apollo.apollonature&lt;/nature&gt;
+                &lt;nature&gt;com.adobe.flexbuilder.project.flexnature&lt;/nature&gt;
+                &lt;nature&gt;com.adobe.flexbuilder.project.actionscriptnature&lt;/nature&gt;
+        &lt;/natures&gt;
+&lt;/projectDescription&gt;
</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/&lt;project&gt;=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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
+
+&lt;!-- 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.
+--&gt;
+
+        &lt;!-- The application identifier string, unique to this application. Required. --&gt;
+        &lt;id&gt;airhello&lt;/id&gt;
+
+        &lt;!-- Used as the filename for the application. Required. --&gt;
+        &lt;filename&gt;airhello&lt;/filename&gt;
+
+        &lt;!-- The name that is displayed in the AIR application installer. 
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;name&gt;  
+                  &lt;text xml:lang=&quot;en&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                  &lt;text xml:lang=&quot;fr&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                 &lt;text xml:lang=&quot;zh&quot;&gt;FreeSWITCH Air 软电话&lt;/text&gt;  
+        &lt;/name&gt; 
+        
+        &lt;!-- An application version designator (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;). Required. --&gt;
+        &lt;version&gt;Ver 0.0.1&lt;/version&gt;
+
+        &lt;!-- Description, displayed in the AIR application installer.
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+
+        &lt;!-- Copyright information. Optional --&gt;
+        &lt;!-- &lt;copyright&gt;&lt;/copyright&gt; --&gt;
+
+        &lt;!-- Settings for the application's initial window. Required. --&gt;
+        &lt;initialWindow&gt;
+                &lt;!-- The main SWF or HTML file of the application. Required. --&gt;
+                &lt;!-- Note: In Flex Builder, the SWF reference is set automatically. --&gt;
+                &lt;content&gt;airhello.swf&lt;/content&gt;
+                
+                &lt;!-- The title of the main window. Optional. --&gt;
+                &lt;!-- &lt;title&gt;&lt;/title&gt; --&gt;
+
+                &lt;!-- The type of system chrome to use (either &quot;standard&quot; or &quot;none&quot;). Optional. Default standard. --&gt;
+                &lt;systemChrome&gt;none&lt;/systemChrome&gt;
+
+                &lt;!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --&gt;
+                &lt;transparent&gt;true&lt;/transparent&gt;
+
+                &lt;!-- Whether the window is initially visible. Optional. Default false. --&gt;
+                &lt;!-- &lt;visible&gt;&lt;/visible&gt; --&gt;
+
+                &lt;!-- Whether the user can minimize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;minimizable&gt;&lt;/minimizable&gt; --&gt;
+
+                &lt;!-- Whether the user can maximize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;maximizable&gt;&lt;/maximizable&gt; --&gt;
+
+                &lt;!-- Whether the user can resize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;resizable&gt;&lt;/resizable&gt; --&gt;
+
+                &lt;!-- The window's initial width. Optional. --&gt;
+                &lt;!-- &lt;width&gt;&lt;/width&gt; --&gt;
+
+                &lt;!-- The window's initial height. Optional. --&gt;
+                &lt;!-- &lt;height&gt;&lt;/height&gt; --&gt;
+
+                &lt;!-- The window's initial x position. Optional. --&gt;
+                &lt;!-- &lt;x&gt;&lt;/x&gt; --&gt;
+
+                &lt;!-- The window's initial y position. Optional. --&gt;
+                &lt;!-- &lt;y&gt;&lt;/y&gt; --&gt;
+
+                &lt;!-- The window's minimum size, specified as a width/height pair, such as &quot;400 200&quot;. Optional. --&gt;
+                &lt;!-- &lt;minSize&gt;&lt;/minSize&gt; --&gt;
+
+                &lt;!-- The window's initial maximum size, specified as a width/height pair, such as &quot;1600 1200&quot;. Optional. --&gt;
+                &lt;!-- &lt;maxSize&gt;&lt;/maxSize&gt; --&gt;
+        &lt;/initialWindow&gt;
+
+        &lt;!-- The subpath of the standard default installation location to use. Optional. --&gt;
+        &lt;!-- &lt;installFolder&gt;&lt;/installFolder&gt; --&gt;
+
+        &lt;!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. --&gt;
+        &lt;!-- &lt;programMenuFolder&gt;&lt;/programMenuFolder&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;icon&gt;
+                &lt;image16x16&gt;&lt;/image16x16&gt;
+                &lt;image32x32&gt;&lt;/image32x32&gt;
+                &lt;image48x48&gt;&lt;/image48x48&gt;
+                &lt;image128x128&gt;&lt;/image128x128&gt;
+        &lt;/icon&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;customUpdateUI&gt;&lt;/customUpdateUI&gt; --&gt;
+        
+        &lt;!-- Whether the application can be launched when the user clicks a link in a web browser.
+        Optional. Default false. --&gt;
+        &lt;!-- &lt;allowBrowserInvocation&gt;&lt;/allowBrowserInvocation&gt; --&gt;
+
+        &lt;!-- Listing of file types for which the application can register. Optional. --&gt;
+        &lt;!-- &lt;fileTypes&gt; --&gt;
+
+                &lt;!-- Defines one file type. Optional. --&gt;
+                &lt;!-- &lt;fileType&gt; --&gt;
+
+                        &lt;!-- The name that the system displays for the registered file type. Required. --&gt;
+                        &lt;!-- &lt;name&gt;&lt;/name&gt; --&gt;
+
+                        &lt;!-- The extension to register. Required. --&gt;
+                        &lt;!-- &lt;extension&gt;&lt;/extension&gt; --&gt;
+                        
+                        &lt;!-- The description of the file type. Optional. --&gt;
+                        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+                        
+                        &lt;!-- The MIME content type. --&gt;
+                        &lt;!-- &lt;contentType&gt;&lt;/contentType&gt; --&gt;
+                        
+                        &lt;!-- The icon to display for the file type. Optional. --&gt;
+                        &lt;!-- &lt;icon&gt;
+                                &lt;image16x16&gt;&lt;/image16x16&gt;
+                                &lt;image32x32&gt;&lt;/image32x32&gt;
+                                &lt;image48x48&gt;&lt;/image48x48&gt;
+                                &lt;image128x128&gt;&lt;/image128x128&gt;
+                        &lt;/icon&gt; --&gt;
+                        
+                &lt;!-- &lt;/fileType&gt; --&gt;
+        &lt;!-- &lt;/fileTypes&gt; --&gt;
+
+&lt;/application&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
+
+&lt;!-- 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.
+--&gt;
+
+        &lt;!-- The application identifier string, unique to this application. Required. --&gt;
+        &lt;id&gt;fsair&lt;/id&gt;
+
+        &lt;!-- Used as the filename for the application. Required. --&gt;
+        &lt;filename&gt;fsair&lt;/filename&gt;
+
+        &lt;!-- The name that is displayed in the AIR application installer. 
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;name&gt;  
+                  &lt;text xml:lang=&quot;en&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                  &lt;text xml:lang=&quot;fr&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                 &lt;text xml:lang=&quot;zh&quot;&gt;FreeSWITCH Air 软电话&lt;/text&gt;  
+        &lt;/name&gt; 
+        
+        &lt;!-- An application version designator (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;). Required. --&gt;
+        &lt;version&gt;Ver 0.0.1&lt;/version&gt;
+
+        &lt;!-- Description, displayed in the AIR application installer.
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+
+        &lt;!-- Copyright information. Optional --&gt;
+        &lt;!-- &lt;copyright&gt;&lt;/copyright&gt; --&gt;
+
+        &lt;!-- Settings for the application's initial window. Required. --&gt;
+        &lt;initialWindow&gt;
+                &lt;!-- The main SWF or HTML file of the application. Required. --&gt;
+                &lt;!-- Note: In Flex Builder, the SWF reference is set automatically. --&gt;
+                &lt;content&gt;fsair.swf&lt;/content&gt;
+                
+                &lt;!-- The title of the main window. Optional. --&gt;
+                &lt;!-- &lt;title&gt;&lt;/title&gt; --&gt;
+
+                &lt;!-- The type of system chrome to use (either &quot;standard&quot; or &quot;none&quot;). Optional. Default standard. --&gt;
+                &lt;systemChrome&gt;none&lt;/systemChrome&gt;
+
+                &lt;!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --&gt;
+                &lt;transparent&gt;true&lt;/transparent&gt;
+
+                &lt;!-- Whether the window is initially visible. Optional. Default false. --&gt;
+                &lt;!-- &lt;visible&gt;&lt;/visible&gt; --&gt;
+
+                &lt;!-- Whether the user can minimize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;minimizable&gt;&lt;/minimizable&gt; --&gt;
+
+                &lt;!-- Whether the user can maximize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;maximizable&gt;&lt;/maximizable&gt; --&gt;
+
+                &lt;!-- Whether the user can resize the window. Optional. Default true. --&gt;
+                &lt;resizable&gt;false&lt;/resizable&gt;
+
+                &lt;!-- The window's initial width. Optional. --&gt;
+                &lt;width&gt;400&lt;/width&gt;
+
+                &lt;!-- The window's initial height. Optional. --&gt;
+                &lt;height&gt;460&lt;/height&gt;
+
+                &lt;!-- The window's initial x position. Optional. --&gt;
+                &lt;!-- &lt;x&gt;&lt;/x&gt; --&gt;
+
+                &lt;!-- The window's initial y position. Optional. --&gt;
+                &lt;!-- &lt;y&gt;&lt;/y&gt; --&gt;
+
+                &lt;!-- The window's minimum size, specified as a width/height pair, such as &quot;400 200&quot;. Optional. --&gt;
+                &lt;!-- &lt;minSize&gt;&lt;/minSize&gt; --&gt;
+
+                &lt;!-- The window's initial maximum size, specified as a width/height pair, such as &quot;1600 1200&quot;. Optional. --&gt;
+                &lt;!-- &lt;maxSize&gt;&lt;/maxSize&gt; --&gt;
+        &lt;/initialWindow&gt;
+
+        &lt;!-- The subpath of the standard default installation location to use. Optional. --&gt;
+        &lt;!-- &lt;installFolder&gt;&lt;/installFolder&gt; --&gt;
+
+        &lt;!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. --&gt;
+        &lt;!-- &lt;programMenuFolder&gt;&lt;/programMenuFolder&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;icon&gt;
+                &lt;image16x16&gt;icons/fsair_16.png&lt;/image16x16&gt;
+                &lt;image32x32&gt;icons/fsair_32.png&lt;/image32x32&gt;
+                &lt;!--&lt;image48x48&gt;&lt;/image48x48&gt;
+                &lt;image128x128&gt;&lt;/image128x128&gt;--&gt;
+        &lt;/icon&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;customUpdateUI&gt;&lt;/customUpdateUI&gt; --&gt;
+        
+        &lt;!-- Whether the application can be launched when the user clicks a link in a web browser.
+        Optional. Default false. --&gt;
+        &lt;!-- &lt;allowBrowserInvocation&gt;&lt;/allowBrowserInvocation&gt; --&gt;
+
+        &lt;!-- Listing of file types for which the application can register. Optional. --&gt;
+        &lt;!-- &lt;fileTypes&gt; --&gt;
+
+                &lt;!-- Defines one file type. Optional. --&gt;
+                &lt;!-- &lt;fileType&gt; --&gt;
+
+                        &lt;!-- The name that the system displays for the registered file type. Required. --&gt;
+                        &lt;!-- &lt;name&gt;&lt;/name&gt; --&gt;
+
+                        &lt;!-- The extension to register. Required. --&gt;
+                        &lt;!-- &lt;extension&gt;&lt;/extension&gt; --&gt;
+                        
+                        &lt;!-- The description of the file type. Optional. --&gt;
+                        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+                        
+                        &lt;!-- The MIME content type. --&gt;
+                        &lt;!-- &lt;contentType&gt;&lt;/contentType&gt; --&gt;
+                        
+                        &lt;!-- The icon to display for the file type. Optional. --&gt;
+                        &lt;!-- &lt;icon&gt;
+                                &lt;image16x16&gt;&lt;/image16x16&gt;
+                                &lt;image32x32&gt;&lt;/image32x32&gt;
+                                &lt;image48x48&gt;&lt;/image48x48&gt;
+                                &lt;image128x128&gt;&lt;/image128x128&gt;
+                        &lt;/icon&gt; --&gt;
+                        
+                &lt;!-- &lt;/fileType&gt; --&gt;
+        &lt;!-- &lt;/fileTypes&gt; --&gt;
+
+&lt;/application&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
+
+&lt;!-- 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.
+--&gt;
+
+        &lt;!-- The application identifier string, unique to this application. Required. --&gt;
+        &lt;id&gt;com.fsair.ringWin&lt;/id&gt;
+
+        &lt;!-- Used as the filename for the application. Required. --&gt;
+        &lt;filename&gt;ringWin&lt;/filename&gt;
+
+        &lt;!-- The name that is displayed in the AIR application installer. 
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;name&gt;ringWin&lt;/name&gt;
+
+        &lt;!-- An application version designator (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;). Required. --&gt;
+        &lt;version&gt;v1&lt;/version&gt;
+
+        &lt;!-- Description, displayed in the AIR application installer.
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+
+        &lt;!-- Copyright information. Optional --&gt;
+        &lt;!-- &lt;copyright&gt;&lt;/copyright&gt; --&gt;
+
+        &lt;!-- Settings for the application's initial window. Required. --&gt;
+        &lt;initialWindow&gt;
+                &lt;!-- The main SWF or HTML file of the application. Required. --&gt;
+                &lt;!-- Note: In Flex Builder, the SWF reference is set automatically. --&gt;
+                &lt;content&gt;ringWin.swf&lt;/content&gt;
+                
+                &lt;!-- The title of the main window. Optional. --&gt;
+                &lt;!-- &lt;title&gt;&lt;/title&gt; --&gt;
+
+                &lt;!-- The type of system chrome to use (either &quot;standard&quot; or &quot;none&quot;). Optional. Default standard. --&gt;
+                &lt;!-- &lt;systemChrome&gt;&lt;/systemChrome&gt; --&gt;
+
+                &lt;!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --&gt;
+                &lt;!-- &lt;transparent&gt;&lt;/transparent&gt; --&gt;
+
+                &lt;!-- Whether the window is initially visible. Optional. Default false. --&gt;
+                &lt;!-- &lt;visible&gt;&lt;/visible&gt; --&gt;
+
+                &lt;!-- Whether the user can minimize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;minimizable&gt;&lt;/minimizable&gt; --&gt;
+
+                &lt;!-- Whether the user can maximize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;maximizable&gt;&lt;/maximizable&gt; --&gt;
+
+                &lt;!-- Whether the user can resize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;resizable&gt;&lt;/resizable&gt; --&gt;
+
+                &lt;!-- The window's initial width. Optional. --&gt;
+                &lt;!-- &lt;width&gt;&lt;/width&gt; --&gt;
+
+                &lt;!-- The window's initial height. Optional. --&gt;
+                &lt;!-- &lt;height&gt;&lt;/height&gt; --&gt;
+
+                &lt;!-- The window's initial x position. Optional. --&gt;
+                &lt;!-- &lt;x&gt;&lt;/x&gt; --&gt;
+
+                &lt;!-- The window's initial y position. Optional. --&gt;
+                &lt;!-- &lt;y&gt;&lt;/y&gt; --&gt;
+
+                &lt;!-- The window's minimum size, specified as a width/height pair, such as &quot;400 200&quot;. Optional. --&gt;
+                &lt;!-- &lt;minSize&gt;&lt;/minSize&gt; --&gt;
+
+                &lt;!-- The window's initial maximum size, specified as a width/height pair, such as &quot;1600 1200&quot;. Optional. --&gt;
+                &lt;!-- &lt;maxSize&gt;&lt;/maxSize&gt; --&gt;
+        &lt;/initialWindow&gt;
+
+        &lt;!-- The subpath of the standard default installation location to use. Optional. --&gt;
+        &lt;!-- &lt;installFolder&gt;&lt;/installFolder&gt; --&gt;
+
+        &lt;!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. --&gt;
+        &lt;!-- &lt;programMenuFolder&gt;&lt;/programMenuFolder&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;icon&gt;
+                &lt;image16x16&gt;&lt;/image16x16&gt;
+                &lt;image32x32&gt;&lt;/image32x32&gt;
+                &lt;image48x48&gt;&lt;/image48x48&gt;
+                &lt;image128x128&gt;&lt;/image128x128&gt;
+        &lt;/icon&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;customUpdateUI&gt;&lt;/customUpdateUI&gt; --&gt;
+        
+        &lt;!-- Whether the application can be launched when the user clicks a link in a web browser.
+        Optional. Default false. --&gt;
+        &lt;!-- &lt;allowBrowserInvocation&gt;&lt;/allowBrowserInvocation&gt; --&gt;
+
+        &lt;!-- Listing of file types for which the application can register. Optional. --&gt;
+        &lt;!-- &lt;fileTypes&gt; --&gt;
+
+                &lt;!-- Defines one file type. Optional. --&gt;
+                &lt;!-- &lt;fileType&gt; --&gt;
+
+                        &lt;!-- The name that the system displays for the registered file type. Required. --&gt;
+                        &lt;!-- &lt;name&gt;&lt;/name&gt; --&gt;
+
+                        &lt;!-- The extension to register. Required. --&gt;
+                        &lt;!-- &lt;extension&gt;&lt;/extension&gt; --&gt;
+                        
+                        &lt;!-- The description of the file type. Optional. --&gt;
+                        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+                        
+                        &lt;!-- The MIME content type. --&gt;
+                        &lt;!-- &lt;contentType&gt;&lt;/contentType&gt; --&gt;
+                        
+                        &lt;!-- The icon to display for the file type. Optional. --&gt;
+                        &lt;!-- &lt;icon&gt;
+                                &lt;image16x16&gt;&lt;/image16x16&gt;
+                                &lt;image32x32&gt;&lt;/image32x32&gt;
+                                &lt;image48x48&gt;&lt;/image48x48&gt;
+                                &lt;image128x128&gt;&lt;/image128x128&gt;
+                        &lt;/icon&gt; --&gt;
+                        
+                &lt;!-- &lt;/fileType&gt; --&gt;
+        &lt;!-- &lt;/fileTypes&gt; --&gt;
+
+&lt;/application&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
+
+&lt;!-- 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.
+--&gt;
+
+        &lt;!-- The application identifier string, unique to this application. Required. --&gt;
+        &lt;id&gt;com.ring-win&lt;/id&gt;
+
+        &lt;!-- Used as the filename for the application. Required. --&gt;
+        &lt;filename&gt;ring_win&lt;/filename&gt;
+
+        &lt;!-- The name that is displayed in the AIR application installer. 
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;name&gt;ring_win&lt;/name&gt;
+
+        &lt;!-- An application version designator (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;). Required. --&gt;
+        &lt;version&gt;v1&lt;/version&gt;
+
+        &lt;!-- Description, displayed in the AIR application installer.
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+
+        &lt;!-- Copyright information. Optional --&gt;
+        &lt;!-- &lt;copyright&gt;&lt;/copyright&gt; --&gt;
+
+        &lt;!-- Settings for the application's initial window. Required. --&gt;
+        &lt;initialWindow&gt;
+                &lt;!-- The main SWF or HTML file of the application. Required. --&gt;
+                &lt;!-- Note: In Flex Builder, the SWF reference is set automatically. --&gt;
+                &lt;content&gt;ring_win.swf&lt;/content&gt;
+                
+                &lt;!-- The title of the main window. Optional. --&gt;
+                &lt;!-- &lt;title&gt;&lt;/title&gt; --&gt;
+
+                &lt;!-- The type of system chrome to use (either &quot;standard&quot; or &quot;none&quot;). Optional. Default standard. --&gt;
+                &lt;!-- &lt;systemChrome&gt;&lt;/systemChrome&gt; --&gt;
+
+                &lt;!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --&gt;
+                &lt;!-- &lt;transparent&gt;&lt;/transparent&gt; --&gt;
+
+                &lt;!-- Whether the window is initially visible. Optional. Default false. --&gt;
+                &lt;!-- &lt;visible&gt;&lt;/visible&gt; --&gt;
+
+                &lt;!-- Whether the user can minimize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;minimizable&gt;&lt;/minimizable&gt; --&gt;
+
+                &lt;!-- Whether the user can maximize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;maximizable&gt;&lt;/maximizable&gt; --&gt;
+
+                &lt;!-- Whether the user can resize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;resizable&gt;&lt;/resizable&gt; --&gt;
+
+                &lt;!-- The window's initial width. Optional. --&gt;
+                &lt;!-- &lt;width&gt;&lt;/width&gt; --&gt;
+
+                &lt;!-- The window's initial height. Optional. --&gt;
+                &lt;!-- &lt;height&gt;&lt;/height&gt; --&gt;
+
+                &lt;!-- The window's initial x position. Optional. --&gt;
+                &lt;!-- &lt;x&gt;&lt;/x&gt; --&gt;
+
+                &lt;!-- The window's initial y position. Optional. --&gt;
+                &lt;!-- &lt;y&gt;&lt;/y&gt; --&gt;
+
+                &lt;!-- The window's minimum size, specified as a width/height pair, such as &quot;400 200&quot;. Optional. --&gt;
+                &lt;!-- &lt;minSize&gt;&lt;/minSize&gt; --&gt;
+
+                &lt;!-- The window's initial maximum size, specified as a width/height pair, such as &quot;1600 1200&quot;. Optional. --&gt;
+                &lt;!-- &lt;maxSize&gt;&lt;/maxSize&gt; --&gt;
+        &lt;/initialWindow&gt;
+
+        &lt;!-- The subpath of the standard default installation location to use. Optional. --&gt;
+        &lt;!-- &lt;installFolder&gt;&lt;/installFolder&gt; --&gt;
+
+        &lt;!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. --&gt;
+        &lt;!-- &lt;programMenuFolder&gt;&lt;/programMenuFolder&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;icon&gt;
+                &lt;image16x16&gt;&lt;/image16x16&gt;
+                &lt;image32x32&gt;&lt;/image32x32&gt;
+                &lt;image48x48&gt;&lt;/image48x48&gt;
+                &lt;image128x128&gt;&lt;/image128x128&gt;
+        &lt;/icon&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;customUpdateUI&gt;&lt;/customUpdateUI&gt; --&gt;
+        
+        &lt;!-- Whether the application can be launched when the user clicks a link in a web browser.
+        Optional. Default false. --&gt;
+        &lt;!-- &lt;allowBrowserInvocation&gt;&lt;/allowBrowserInvocation&gt; --&gt;
+
+        &lt;!-- Listing of file types for which the application can register. Optional. --&gt;
+        &lt;!-- &lt;fileTypes&gt; --&gt;
+
+                &lt;!-- Defines one file type. Optional. --&gt;
+                &lt;!-- &lt;fileType&gt; --&gt;
+
+                        &lt;!-- The name that the system displays for the registered file type. Required. --&gt;
+                        &lt;!-- &lt;name&gt;&lt;/name&gt; --&gt;
+
+                        &lt;!-- The extension to register. Required. --&gt;
+                        &lt;!-- &lt;extension&gt;&lt;/extension&gt; --&gt;
+                        
+                        &lt;!-- The description of the file type. Optional. --&gt;
+                        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+                        
+                        &lt;!-- The MIME content type. --&gt;
+                        &lt;!-- &lt;contentType&gt;&lt;/contentType&gt; --&gt;
+                        
+                        &lt;!-- The icon to display for the file type. Optional. --&gt;
+                        &lt;!-- &lt;icon&gt;
+                                &lt;image16x16&gt;&lt;/image16x16&gt;
+                                &lt;image32x32&gt;&lt;/image32x32&gt;
+                                &lt;image48x48&gt;&lt;/image48x48&gt;
+                                &lt;image128x128&gt;&lt;/image128x128&gt;
+                        &lt;/icon&gt; --&gt;
+                        
+                &lt;!-- &lt;/fileType&gt; --&gt;
+        &lt;!-- &lt;/fileTypes&gt; --&gt;
+
+&lt;/application&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;mx:Window xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot; width=&quot;400&quot; height=&quot;70&quot;&gt;
+        &lt;mx:Label x=&quot;39&quot; y=&quot;19&quot; text=&quot;Incoming Call ...&quot; id=&quot;MessageLabel&quot; width=&quot;220&quot;/&gt;
+        &lt;mx:Button x=&quot;71&quot; y=&quot;36&quot; label=&quot;Accept&quot;/&gt;
+        &lt;mx:Button x=&quot;217&quot; y=&quot;36&quot; label=&quot;Reject&quot;/&gt;
+
+                
+&lt;/mx:Window&gt;
</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=&quot;&lt;xml&gt;&lt;/xml&gt;&quot;):void{
+                        type = event_type;
+                        
+                        if (type == &quot;xml&quot;) { 
+                                xml = new XML(str);
+                        } else {
+                                plain = new Dictionary;
+                                for each( var line:String in str.split(&quot;\n&quot;) ) {
+                                        var a:Array = line.split(&quot;: &quot;);
+                                        plain[a[0]] = a[1];
+                                }
+                        }        
+                }
+
+                public function toString():String {
+                        if (type == &quot;xml&quot; ) {
+                                return xml.toString();
+                        } else {
+                                return plain.toString();
+                        }
+                }
+                
+                public function event_name():String{
+                        return get_value(&quot;Event-Name&quot;);
+                }
+                
+                public function event_subclass():String{
+                        return get_value(&quot;Event-Subclass&quot;);
+                }
+                
+                public function get_value(element:String):String{
+                        if ( type == &quot;xml&quot; ) {
+                                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 = &quot;ClueCon&quot;):void {
+                        trace(&quot;init&quot;);
+                        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 &amp;&amp; str.length &gt; 0) {
+                         
+                                 head_end = str.indexOf(&quot;\n\n&quot;);
+                                 if (head_end &lt; 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 &lt; header.content_length() ) {
+                                        last_data = str;
+                                        trace(&quot;last_date: &quot; + last_data);
+                                        break;
+                                }
+                                
+                                str = str.substr(head_end + 2 + header.content_length() );
+//trace(str);                                
+//                                trace(header.content_type());
+                                
+                                if(header.content_type() == &quot;auth/request&quot;) {
+                                        auth(esl_password);
+                                }else if(header.content_type() == &quot;api/response&quot;) {
+                                        
+                                        if (api_callback != null) {
+                                                api_callback(body);
+                                                api_callback = null;
+                                        }
+                                }else if(header.content_type() == &quot;command/reply&quot;) {
+                                        if (command_callback != null) {
+                                                command_callback(header.getHeader(&quot;Reply-Text&quot;));
+                                                command_callback = null;
+                                        }        
+                                }else if(header.content_type().indexOf(&quot;text/event-&quot;) &gt;= 0) {
+                                        
+                                        var event_type:String = header.content_type() == &quot;text/event-xml&quot; ? &quot;xml&quot; : &quot;plain&quot;;
+                                                
+                                        var eslev:ESL_event = new ESL_event(event_type, body);
+                                                        
+                                        for (var key:Object in event_callback)
+                                        {                        
+                                                   trace(key + &quot;, &quot; + 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(&quot;event_name: &quot; + eslev.event_name());
+                                                   trace(&quot;event_subclass: &quot; + eslev.event_subclass());
+                                                   
+                                                if ( eslev.event_name() == event_name &amp;&amp; 
+                                                        (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 + &quot;\n\n&quot;, &quot;UTF-8&quot;);
+                        
+                        command_callback = callback;
+                        writeBytes(ba);
+                        flush();
+                }
+
+                public function auth(pass:String, callback:Function=null):void {
+                        esl_send(&quot;Auth &quot; + pass, callback);
+                }
+                
+                public function esl_event(events:String, type:String=&quot;plain&quot;):void {
+                        esl_send(&quot;event &quot; + type + &quot; &quot; + events);
+                }
+                
+                public function esl_filter(header:String, value:String, del:String=&quot;&quot;):void {
+                        esl_send(&quot;filter &quot; + del + &quot; header &quot; + &quot;value&quot;);
+                }
+                                
+                public function api(str:String, callback:Function=null):void {
+                        api_callback = callback;
+                        esl_send(&quot;api &quot; + str);
+                }
+                
+                public function bgapi(str:String, callback:Function=null):void{
+                        api_callback = callback;
+                    esl_send(&quot;bgapi &quot; + str);        
+                }
+                        
+                public function execute(app:String, app_arg:String, uuid:String):void{
+                        var str:String = &quot;sendmsg &quot; + uuid + &quot;\n\n&quot;;
+                        str += &quot;call-command: execute&quot;;
+                        str += &quot;execute-app-name: &quot; + app;
+                        str += &quot;execute-app-arg: &quot; + 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(&quot;\n&quot;) ) {
+                                var a:Array = line.split(&quot;: &quot;);
+                                if(a.length != 2) {
+                                        continue;
+                                }
+                                header[a[0]] = a[1];
+                        }
+                        
+                }
+                
+                public function content_type():String {
+                        return header[&quot;Content-Type&quot;];
+                }
+                
+                public function content_length():int {
+                        return (int)(header[&quot;Content-Length&quot;]) ;
+                }
+                
+                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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
+
+&lt;!-- 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.
+--&gt;
+
+        &lt;!-- The application identifier string, unique to this application. Required. --&gt;
+        &lt;id&gt;fsair&lt;/id&gt;
+
+        &lt;!-- Used as the filename for the application. Required. --&gt;
+        &lt;filename&gt;fsair&lt;/filename&gt;
+
+        &lt;!-- The name that is displayed in the AIR application installer. 
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;name&gt;  
+                  &lt;text xml:lang=&quot;en&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                  &lt;text xml:lang=&quot;fr&quot;&gt;FreeSWITCH Air SoftPhone&lt;/text&gt;  
+                 &lt;text xml:lang=&quot;zh&quot;&gt;FreeSWITCH Air 软电话&lt;/text&gt;  
+        &lt;/name&gt; 
+        
+        &lt;!-- An application version designator (such as &quot;v1&quot;, &quot;2.5&quot;, or &quot;Alpha 1&quot;). Required. --&gt;
+        &lt;version&gt;Ver 0.0.1&lt;/version&gt;
+
+        &lt;!-- Description, displayed in the AIR application installer.
+             May have multiple values for each language. See samples or xsd schema file. Optional. --&gt;
+        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+
+        &lt;!-- Copyright information. Optional --&gt;
+        &lt;!-- &lt;copyright&gt;&lt;/copyright&gt; --&gt;
+
+        &lt;!-- Settings for the application's initial window. Required. --&gt;
+        &lt;initialWindow&gt;
+                &lt;!-- The main SWF or HTML file of the application. Required. --&gt;
+                &lt;!-- Note: In Flex Builder, the SWF reference is set automatically. --&gt;
+                &lt;content&gt;[This value will be overwritten by Flex Builder in the output app.xml]&lt;/content&gt;
+                
+                &lt;!-- The title of the main window. Optional. --&gt;
+                &lt;!-- &lt;title&gt;&lt;/title&gt; --&gt;
+
+                &lt;!-- The type of system chrome to use (either &quot;standard&quot; or &quot;none&quot;). Optional. Default standard. --&gt;
+                &lt;systemChrome&gt;none&lt;/systemChrome&gt;
+
+                &lt;!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --&gt;
+                &lt;transparent&gt;true&lt;/transparent&gt;
+
+                &lt;!-- Whether the window is initially visible. Optional. Default false. --&gt;
+                &lt;!-- &lt;visible&gt;&lt;/visible&gt; --&gt;
+
+                &lt;!-- Whether the user can minimize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;minimizable&gt;&lt;/minimizable&gt; --&gt;
+
+                &lt;!-- Whether the user can maximize the window. Optional. Default true. --&gt;
+                &lt;!-- &lt;maximizable&gt;&lt;/maximizable&gt; --&gt;
+
+                &lt;!-- Whether the user can resize the window. Optional. Default true. --&gt;
+                &lt;resizable&gt;false&lt;/resizable&gt;
+
+                &lt;!-- The window's initial width. Optional. --&gt;
+                &lt;width&gt;400&lt;/width&gt;
+
+                &lt;!-- The window's initial height. Optional. --&gt;
+                &lt;height&gt;460&lt;/height&gt;
+
+                &lt;!-- The window's initial x position. Optional. --&gt;
+                &lt;!-- &lt;x&gt;&lt;/x&gt; --&gt;
+
+                &lt;!-- The window's initial y position. Optional. --&gt;
+                &lt;!-- &lt;y&gt;&lt;/y&gt; --&gt;
+
+                &lt;!-- The window's minimum size, specified as a width/height pair, such as &quot;400 200&quot;. Optional. --&gt;
+                &lt;!-- &lt;minSize&gt;&lt;/minSize&gt; --&gt;
+
+                &lt;!-- The window's initial maximum size, specified as a width/height pair, such as &quot;1600 1200&quot;. Optional. --&gt;
+                &lt;!-- &lt;maxSize&gt;&lt;/maxSize&gt; --&gt;
+        &lt;/initialWindow&gt;
+
+        &lt;!-- The subpath of the standard default installation location to use. Optional. --&gt;
+        &lt;!-- &lt;installFolder&gt;&lt;/installFolder&gt; --&gt;
+
+        &lt;!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. --&gt;
+        &lt;!-- &lt;programMenuFolder&gt;&lt;/programMenuFolder&gt; --&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;icon&gt;
+                &lt;image16x16&gt;icons/fsair_16.png&lt;/image16x16&gt;
+                &lt;image32x32&gt;icons/fsair_32.png&lt;/image32x32&gt;
+                &lt;!--&lt;image48x48&gt;&lt;/image48x48&gt;
+                &lt;image128x128&gt;&lt;/image128x128&gt;--&gt;
+        &lt;/icon&gt;
+
+        &lt;!-- 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. --&gt;
+        &lt;!-- &lt;customUpdateUI&gt;&lt;/customUpdateUI&gt; --&gt;
+        
+        &lt;!-- Whether the application can be launched when the user clicks a link in a web browser.
+        Optional. Default false. --&gt;
+        &lt;!-- &lt;allowBrowserInvocation&gt;&lt;/allowBrowserInvocation&gt; --&gt;
+
+        &lt;!-- Listing of file types for which the application can register. Optional. --&gt;
+        &lt;!-- &lt;fileTypes&gt; --&gt;
+
+                &lt;!-- Defines one file type. Optional. --&gt;
+                &lt;!-- &lt;fileType&gt; --&gt;
+
+                        &lt;!-- The name that the system displays for the registered file type. Required. --&gt;
+                        &lt;!-- &lt;name&gt;&lt;/name&gt; --&gt;
+
+                        &lt;!-- The extension to register. Required. --&gt;
+                        &lt;!-- &lt;extension&gt;&lt;/extension&gt; --&gt;
+                        
+                        &lt;!-- The description of the file type. Optional. --&gt;
+                        &lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;
+                        
+                        &lt;!-- The MIME content type. --&gt;
+                        &lt;!-- &lt;contentType&gt;&lt;/contentType&gt; --&gt;
+                        
+                        &lt;!-- The icon to display for the file type. Optional. --&gt;
+                        &lt;!-- &lt;icon&gt;
+                                &lt;image16x16&gt;&lt;/image16x16&gt;
+                                &lt;image32x32&gt;&lt;/image32x32&gt;
+                                &lt;image48x48&gt;&lt;/image48x48&gt;
+                                &lt;image128x128&gt;&lt;/image128x128&gt;
+                        &lt;/icon&gt; --&gt;
+                        
+                &lt;!-- &lt;/fileType&gt; --&gt;
+        &lt;!-- &lt;/fileTypes&gt; --&gt;
+
+&lt;/application&gt;
</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(&quot;Already Connected&quot;);
+                                        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(&quot;CUSTOM|portaudio::ringing&quot;, onRing);
+                                esl.addEventCallback(&quot;CHANNEL_HANGUP|-&quot;, onHangup);
+                           
+                            var timer:Timer = new Timer(2000);
+                                timer.addEventListener(TimerEvent.TIMER, post_connect);
+                                timer.start();
+                                msg(&quot;timer started&quot;);
+                        }
+                          
+                        catch (error:Error)  
+                        {  
+                                msg(error.message + &quot;\n&quot;);  
+                                esl.close();  
+                        }  
+                 
+                }
+                
+                function post_connect(event:TimerEvent):void {
+                        event.target.stop();
+                        msg(&quot;timer stoped&quot;);
+                        initDevList();
+//                        esl.esl_event(&quot;ALL&quot;);
+                        esl.esl_event(&quot;CHANNEL_HANGUP CUSTOM portaudio::ringing&quot;);
+                                                
+                }
+                        
+                function setTitle(title:String):void {
+                        this.title = &quot;FreeSWITCH Air - [&quot; + title + ']';
+                }
+                        
+                function msg(message:String):void
+                {
+                        logBox.text += message + &quot;\n&quot;;
+                        logBox.verticalScrollPosition = logBox.maxVerticalScrollPosition;
+                }
+                
+                function clearLogs():void {
+                        logBox.text = logBox.text.substr(-1, 40);
+                }                          
+                
+                function connectHandler(event:Event):void {
+                        setTitle('Connected');
+                        msg(&quot;Connected: &quot; + esl_addr.text + &quot;:&quot; + 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(&quot;Unique-ID&quot;);
+                        var caller_id_name:String = eslev.get_value(&quot;Caller-Caller-ID-Name&quot;);
+                        var caller_id_number:String = eslev.get_value(&quot;Caller-Caller-ID-Number&quot;);                        
+                        var call_id:String = eslev.get_value(&quot;call_id&quot;);
+                        
+                        uuids[uuid] = call_id;
+
+                        callerID.text = caller_id_name + ' &lt;' + caller_id_number + '&gt;';
+                        ringBox.visible = true;
+                        
+                        
+                        msg('Incoming call: ' + caller_id_name + '&lt;' + caller_id_number + '&gt;');
+                        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 = &quot;Incoming Call&quot;;
+//                        ring_win.open();
+                        
+                }
+                
+                function onHangup(eslev:ESL_event):void {
+                        
+                        var uuid:String = eslev.get_value(&quot;Unique-ID&quot;);
+                        
+                        if (uuids[uuid] != null) {
+                                msg(&quot;hangup&quot;);
+                                callerID.text = &quot;Hangup&quot;;
+                                delete uuids[uuid];
+                        }
+                        
+                }
+          
+                function sendDtmf(dtmf:String):void {
+                        esl.api(&quot;pa dtmf &quot; + dtmf);
+                }
+                
+                function switchPA():void {
+                        esl.api(&quot;pa switch&quot;);
+                }
+                                
+                function sendCommand():void  
+                {  
+                
+                        msg('&gt;&gt;&gt; ' + 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(&quot;pa answer&quot;);
+                        ringBox.visible = false;
+                }
+                        
+                function hangup():void{
+                        esl.api(&quot;pa hangup&quot;);
+                        ringBox.visible = false;
+                }
+                
+                function call():void{
+                        esl.api(&quot;pa call &quot; + number.text, updateUUID);
+                        msg(&quot;Calling &quot; + number.text);
+                        
+                        if( number.dataProvider.length &lt; 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(&quot;:&quot;);
+                        
+                        trace(data);
+                        
+                        if (a.length == 3 &amp;&amp; a[0] == &quot;SUCCESS&quot;) {
+                                uuids[a[2].substr(0, a[2].length - 1) ] = a[1];
+                        } 
+                        
+                }
+                
+                function initDevList():void {
+                        esl.api(&quot;pa devlist xml&quot;, devlistCallback);
+                }
+                        
+                function reloadDevList():void {
+//                        esl.api(&quot;pa rescan&quot;);
+                        esl.api(&quot;pa devlist xml&quot;, 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 &gt; 0) {
+                                        inDev.dataProvider.addItem({ label: d.@name, value:d.@id } );
+                                        
+                                }else if(d.@outputs &gt; 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(&quot;pa indev #&quot; + inDev.selectedItem.value);
+                        esl.api(&quot;pa outdev #&quot; + outDev.selectedItem.value);
+                        esl.api(&quot;pa ringdev #&quot; + ringDev.selectedItem.value);
+                }
+                
+                function unloadPA():void {
+                        esl.api(&quot;unload mod_portaudio&quot;);
+                }
+                
+                function loadPA():void {
+                        esl.api(&quot;load mod_portaudio&quot;);
+                }
+                
+                function loopPA():void {
+                        esl.api(&quot;pa looptest&quot;);
+                }
+                
+                function toggleAdvanced():void {
+                        if (this.width == 260 ) {
+                                this.width = 620;
+                                advancedButton.label = &quot;Advanced &lt;&lt;&lt;&quot;;
+                        } else {
+                                this.width = 260;
+                                advancedButton.label = &quot;Advanced &gt;&gt;&gt;&quot;;
+                        }
+                        
+                        
+                }
+                
+                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(&quot;freeswitch_install_path&quot;, freeswitch_install_path.text);
+                         _save_settings(&quot;esl_addr&quot;, esl_addr.text);
+                         _save_settings(&quot;esl_port&quot;, esl_port.text);
+                         _save_settings(&quot;esl_pass&quot;, esl_pass.text);
+                         
+                }
+                
+                function getSettings():void {
+                        freeswitch_install_path.text = _get_settings(&quot;freeswitch_install_path&quot;) || &quot;/usr/local/freeswitch&quot;;
+                        esl_addr.text = _get_settings(&quot;esl_addr&quot;) || &quot;127.0.0.1&quot;;
+                        esl_port.text = _get_settings(&quot;esl_port&quot;) || &quot;8021&quot;;
+                        esl_pass.text = _get_settings(&quot;esl_pass&quot;) || &quot;ClueCon&quot;;
+                }
+                
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;mx:WindowedApplication xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; 
+        layout=&quot;absolute&quot; title=&quot;FreeSWITCH Air&quot; height=&quot;408&quot; width=&quot;622&quot;
+        creationComplete = &quot;initApp()&quot;&gt;
+        
+        &lt;mx:Script source=&quot;fsair.as&quot;/&gt;
+        
+        &lt;mx:Style&gt; 
+    WindowedApplication 
+    { 
+        background-color:&quot;0x999999&quot;; 
+        background-alpha:&quot;0.5&quot;; 
+    } 
+        &lt;/mx:Style&gt;
+        &lt;mx:Label text=&quot;Hello World&quot; enabled=&quot;true&quot; horizontalCenter=&quot;-232&quot; verticalCenter=&quot;14&quot; id=&quot;label1&quot;/&gt;
+        &lt;mx:Button x=&quot;137&quot; y=&quot;10&quot; label=&quot;Advanced &amp;lt;&amp;lt;&amp;lt;&quot; click=&quot;toggleAdvanced()&quot; width=&quot;114&quot; id=&quot;advancedButton&quot;/&gt;
+        &lt;mx:Panel x=&quot;0&quot; y=&quot;40&quot; width=&quot;251&quot; height=&quot;219&quot; layout=&quot;absolute&quot; color=&quot;#3232C0&quot; barColor=&quot;#3FB92B&quot; headerHeight=&quot;10&quot; headerColors=&quot;2&quot;&gt;
+                &lt;mx:Button x=&quot;176&quot; y=&quot;135&quot; label=&quot;Call&quot; click=&quot;call()&quot; width=&quot;51&quot; color=&quot;#00FF00&quot;/&gt;
+                &lt;mx:Button x=&quot;176&quot; y=&quot;105&quot; label=&quot;Hup&quot; click=&quot;hangup()&quot; id=&quot;btnHangup&quot; width=&quot;50&quot; color=&quot;#FF0000&quot;/&gt;
+                &lt;mx:Button x=&quot;11.5&quot; y=&quot;8&quot; label=&quot;1&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('1')&quot;/&gt;
+                &lt;mx:Button x=&quot;49.5&quot; y=&quot;8&quot; label=&quot;2&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('2')&quot;/&gt;
+                &lt;mx:Button x=&quot;87.5&quot; y=&quot;8&quot; label=&quot;3&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('3')&quot;/&gt;
+                &lt;mx:Button x=&quot;11.5&quot; y=&quot;40&quot; label=&quot;4&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('4')&quot;/&gt;
+                &lt;mx:Button x=&quot;49.5&quot; y=&quot;40&quot; label=&quot;5&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('5')&quot;/&gt;
+                &lt;mx:Button x=&quot;87.5&quot; y=&quot;72&quot; label=&quot;9&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('9')&quot;/&gt;
+                &lt;mx:Button x=&quot;49.5&quot; y=&quot;72&quot; label=&quot;8&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('8')&quot;/&gt;
+                &lt;mx:Button x=&quot;11.5&quot; y=&quot;72&quot; label=&quot;7&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('7')&quot;/&gt;
+                &lt;mx:Button x=&quot;87.5&quot; y=&quot;40&quot; label=&quot;6&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('6')&quot;/&gt;
+                &lt;mx:Button x=&quot;87.5&quot; y=&quot;104&quot; label=&quot;#&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('#')&quot;/&gt;
+                &lt;mx:Button x=&quot;125.5&quot; y=&quot;9&quot; label=&quot;A&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('A')&quot;/&gt;
+                &lt;mx:Button x=&quot;125.5&quot; y=&quot;73&quot; label=&quot;C&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('C')&quot;/&gt;
+                &lt;mx:Button x=&quot;125.5&quot; y=&quot;41&quot; label=&quot;B&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('B')&quot;/&gt;
+                &lt;mx:Button x=&quot;125.5&quot; y=&quot;104&quot; label=&quot;D&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('D')&quot;/&gt;
+                &lt;mx:Button x=&quot;49.5&quot; y=&quot;104&quot; label=&quot;0&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('0')&quot;/&gt;
+                &lt;mx:Button x=&quot;11.5&quot; y=&quot;104&quot; label=&quot;*&quot; width=&quot;30&quot; height=&quot;24&quot; click=&quot;sendDtmf('*')&quot;/&gt;
+                &lt;mx:Button x=&quot;176&quot; y=&quot;74&quot; label=&quot;sw&quot; click=&quot;switchPA()&quot; width=&quot;51&quot;/&gt;
+                &lt;mx:ComboBox x=&quot;10&quot; y=&quot;135&quot; editable=&quot;true&quot; width=&quot;145.5&quot; id=&quot;number&quot;&gt;&lt;/mx:ComboBox&gt;
+                &lt;mx:Label x=&quot;10&quot; y=&quot;169&quot; text=&quot;_&quot; id=&quot;callerID&quot;/&gt;
+        &lt;/mx:Panel&gt;
+        &lt;mx:TabNavigator x=&quot;259&quot; y=&quot;10&quot; width=&quot;352&quot; height=&quot;311&quot; id=&quot;tn1&quot; creationPolicy=&quot;all&quot;&gt;
+                &lt;mx:Canvas label=&quot;Devices&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;
+                        &lt;mx:Button x=&quot;23&quot; y=&quot;128&quot; label=&quot;Get&quot; click=&quot;reloadDevList()&quot;/&gt;
+                        &lt;mx:Button x=&quot;68&quot; y=&quot;128&quot; label=&quot;Set&quot; click=&quot;setPaDev()&quot;/&gt;
+                        &lt;mx:Button x=&quot;182&quot; y=&quot;128&quot; label=&quot;UnLoad&quot; click=&quot;unloadPA()&quot;/&gt;
+                        &lt;mx:Button x=&quot;248&quot; y=&quot;128&quot; label=&quot;Load&quot; click=&quot;loadPA()&quot;/&gt;
+                        &lt;mx:Button x=&quot;112&quot; y=&quot;127&quot; label=&quot;Loop&quot; click=&quot;loopPA()&quot; width=&quot;53&quot; height=&quot;23&quot;/&gt;
+                        &lt;mx:ComboBox x=&quot;95&quot; y=&quot;28&quot; id=&quot;inDev&quot; width=&quot;206&quot;&gt;&lt;/mx:ComboBox&gt;
+                        &lt;mx:ComboBox x=&quot;95&quot; y=&quot;54&quot; id=&quot;outDev&quot; width=&quot;206&quot;&gt;&lt;/mx:ComboBox&gt;
+                        &lt;mx:ComboBox x=&quot;95&quot; y=&quot;84&quot; id=&quot;ringDev&quot; width=&quot;206&quot;&gt;&lt;/mx:ComboBox&gt;
+                        &lt;mx:Label x=&quot;23&quot; y=&quot;30&quot; text=&quot;Sound In&quot;/&gt;
+                        &lt;mx:Label x=&quot;23&quot; y=&quot;56&quot; text=&quot;Sound Out&quot;/&gt;
+                        &lt;mx:Label x=&quot;23&quot; y=&quot;86&quot; text=&quot;Ring Dev&quot;/&gt;
+                &lt;/mx:Canvas&gt;
+                &lt;mx:Canvas label=&quot;Settings&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;
+                        &lt;mx:Label x=&quot;10&quot; y=&quot;24&quot; text=&quot;FreeSWITCH Install  Path&quot; width=&quot;169&quot;/&gt;
+                        &lt;mx:TextInput x=&quot;10&quot; y=&quot;50&quot; width=&quot;315&quot; text=&quot;/usr/local/freeswitch&quot; id=&quot;freeswitch_install_path&quot;/&gt;
+                        &lt;mx:TextInput x=&quot;10&quot; y=&quot;106&quot; width=&quot;107&quot; text=&quot;127.0.0.1&quot; id=&quot;esl_addr&quot;/&gt;
+                        &lt;mx:TextInput x=&quot;125&quot; y=&quot;106&quot; width=&quot;42&quot; text=&quot;8021&quot; id=&quot;esl_port&quot;/&gt;
+                        &lt;mx:Label x=&quot;10&quot; y=&quot;80&quot; text=&quot;Event Socket Addr&quot; width=&quot;120&quot;/&gt;
+                        &lt;mx:Label x=&quot;125&quot; y=&quot;80&quot; text=&quot;Port&quot; width=&quot;32&quot;/&gt;
+                        &lt;mx:Button x=&quot;254&quot; y=&quot;106&quot; label=&quot;connect&quot; click=&quot;connect()&quot;/&gt;
+                        &lt;mx:Button x=&quot;271&quot; y=&quot;182&quot; label=&quot;Save&quot; click=&quot;saveSettings()&quot;/&gt;
+                        &lt;mx:Label x=&quot;175&quot; y=&quot;80&quot; text=&quot;Password&quot; width=&quot;58&quot;/&gt;
+                        &lt;mx:TextInput x=&quot;175&quot; y=&quot;106&quot; width=&quot;71&quot; text=&quot;ClueCon&quot; id=&quot;esl_pass&quot;/&gt;
+
+                &lt;/mx:Canvas&gt;
+                &lt;mx:Panel label=&quot;Logs&quot; width=&quot;100%&quot; height=&quot;100%&quot; layout=&quot;absolute&quot;&gt;
+                        &lt;mx:TextArea width=&quot;326&quot; height=&quot;196&quot; id=&quot;logBox&quot; x=&quot;0&quot; y=&quot;2&quot;/&gt;
+                        &lt;mx:TextInput width=&quot;246&quot; id=&quot;command&quot; y=&quot;206&quot;/&gt;
+                        &lt;mx:Button label=&quot;Send&quot; click=&quot;sendCommand()&quot; x=&quot;254&quot; y=&quot;206&quot;/&gt;
+                        &lt;mx:Button label=&quot;Clear&quot; click=&quot;clearLogs&quot; x=&quot;254&quot; y=&quot;-28&quot;/&gt;
+                &lt;/mx:Panel&gt;
+                
+        &lt;/mx:TabNavigator&gt;
+        &lt;mx:Panel x=&quot;0&quot; y=&quot;258&quot; width=&quot;251&quot; height=&quot;63&quot; layout=&quot;absolute&quot; headerHeight=&quot;5&quot; id=&quot;ringBox&quot;&gt;
+                &lt;mx:Button x=&quot;10&quot; y=&quot;11&quot; label=&quot;Answer&quot; click=&quot;answer()&quot; id=&quot;btnAnswer&quot; color=&quot;#FFFFFF&quot; fillColors=&quot;#00FF00&quot;/&gt;
+                &lt;mx:Button x=&quot;138&quot; y=&quot;10&quot; label=&quot;Reject&quot; click=&quot;hangup()&quot; color=&quot;#FFFFFF&quot; fillColors=&quot;#FF0000&quot;/&gt;
+        &lt;/mx:Panel&gt;
+        
+&lt;/mx:WindowedApplication&gt;
</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 &gt; /tmp/a
+echo &gt; /tmp/b
+#tail -f /tmp/b &amp;
+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 &gt; /tmp/a
+   $ echo &gt; /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 &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;

+int main (int argc, char **argv)
+{
+        char c;
+        char *file_name;
+        FILE *file;
+        if (argc &lt; 2) {
+                fprintf(stderr, &quot;Usage: tee2 &lt;file_name&gt;\n&quot;);
+                exit(1);
+        }           
+            
+        file_name = argv[1];
+        
+        if(! (file = fopen(file_name, &quot;w&quot;)) ){
+                fprintf(stderr, &quot;Error write file %s !\n&quot;, 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>