<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.E-MailFormatvorlage18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=DE link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Brian told me to open a jira, what I did now.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>But here&#8217;s the script.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>It basically writes incoming calls to a database and removes
them after hangup.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>When intercepting it also rewrites the destination of the call.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Thanks, Klaus<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>#!/usr/bin/perl<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>use strict;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>use DBI;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>use POSIX qw(strftime);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>our $session;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>use constant {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; false =&gt; 0,<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; true =&gt; 1,<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>my $EmptyString = &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;;&nbsp; # Used to delete regexp catches<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>my $dbargs = {AutoCommit =&gt; 0,<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintError =&gt; 1};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>my $dbh =
DBI-&gt;connect(&quot;dbi:SQLite:dbname=/opt/freeswitch/db/dialplan_call_info.db&quot;,
&quot;&quot;, &quot;&quot;, $dbargs);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$session-&gt;setHangupHook('on_hangup');<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>logInfo(&quot;Hook set&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logString {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my ($Level, $Msg) = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; freeswitch::consoleLog(&quot;$Level&quot;,
&quot;$Msg\n&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logDebug { my ($Msg) = @_; logString(&quot;DEBUG&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logInfo { my ($Msg) = @_; logString(&quot;INFO&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logNotice { my ($Msg) = @_; logString(&quot;NOTICE&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logWarning { my ($Msg) = @_; logString(&quot;WARNING&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logError { my ($Msg) = @_; logString(&quot;ERR&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logCritical { my ($Msg) = @_; logString(&quot;CRIT&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub logAlert { my ($Msg) = @_; logString(&quot;ALERT&quot;,
&quot;&gt;&gt;&gt;&gt;&gt; $Msg&quot;); }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># The idea of these functions is to allow for easy pull in of
variables and then<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># automatically export any ones that have been changed when
UPDATEV.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># It will ensure you don't write to any non-imported variables,
but as we are<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># using a hash we cannot prevent invalid reads. If you are
really concerned about<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># this then you could use a specific read function which first
checks to make sure<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># its defined in CLEAN_VARS before returning.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>my %VARS;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>my %CLEAN_VARS;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Takes one or more variables names to import in<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub GETV {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my @Arr = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; foreach my $Var (@Arr) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $VARS{$Var} = $session-&gt;getVariable(&quot;$Var&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $CLEAN_VARS{$Var} = $VARS{$Var};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; if (! defined $CLEAN_VARS{$Var}) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $CLEAN_VARS{$Var} = &quot;&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Generally not called directly, but will set the variable to
the value requested right away<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub SETV {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my ($Var, $Value) = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $session-&gt;setVariable(&quot;$Var&quot;,
&quot;$Value&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $VARS{$Var} = &quot;$Value&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $CLEAN_VARS{$Var} = &quot;$Value&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># If we don't care about a variables value, but wan't to
override it this will add it to the hash<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># so that when we write to it, we don't consider it a typo<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub ADDV {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my @Arr = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; foreach my $Var(@Arr) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $CLEAN_VARS{$Var} = &quot;123zzzzzZnzZZzz&quot;; # Something
definitely won't match<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $VARS{$Var} = &quot;&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Updates any changed variables<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub UPDATEV {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; foreach my $Var (keys %VARS) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; # Make sure there were no typos<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; if (! defined $CLEAN_VARS{$Var}) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die &quot;Warning a variable of: '$Var' was not found in
CLEAN_VARS, did you forget to GET/ADD it first?&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; if ($VARS{$Var} ne $CLEAN_VARS{$Var}) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SETV($Var, $VARS{$Var});<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Dump all variables<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub DUMPV {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; foreach my $Var (sort keys %VARS) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; logInfo(&quot;$Var = '&quot; . $VARS{$Var} . &quot;'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub CAN_ACCESS {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my ($Req) = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; if ($VARS{app_rights} eq &quot;ALL&quot; || $VARS{app_rights}
=~ /#$Req#/) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; return true;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; } else {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; return false;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Fetch some generic variables<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>GETV(&quot;uuid&quot;, &quot;base_dir&quot;, &quot;domain&quot;,
&quot;app_rights&quot;, &quot;de-ring&quot;,
&quot;outgoing_soundtouch_profile&quot;, &quot;hold_music&quot;,
&quot;continue_on_fail&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>GETV(&quot;destination_number&quot;, &quot;caller_id_name&quot;,
&quot;caller_id_number&quot;, &quot;effective_caller_id_name&quot;, &quot;effective_caller_id_number&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>GETV(&quot;network_addr&quot;, &quot;hangup_after_bridge&quot;,
&quot;called_party_callgroup&quot;, &quot;ringback&quot;,
&quot;transfer_ringback&quot;, &quot;sip_exclude_contact&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>GETV(&quot;call_timeout&quot;, &quot;source&quot;,
&quot;sip_to_params&quot;, &quot;presence_id&quot;, &quot;dialed_user&quot;,
&quot;dialed_domain&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>GETV(&quot;voicemail_authorized&quot;,
&quot;sip_authorized&quot;, &quot;username&quot;, &quot;accountcode&quot;,
&quot;sip_from_user&quot;, &quot;sip_to_user&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Set some defaults<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{hangup_after_bridge} = &quot;true&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{ringback} = $VARS{'de-ring'};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{transfer_ringback} = $VARS{hold_music};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{sip_exclude_contact} = $VARS{network_addr};<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{call_timeout} = &quot;60&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$VARS{continue_on_fail} = &quot;true&quot;;&nbsp; #
NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>UPDATEV();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub bridgeCallInternally {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my ($DestNr) = @_;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; if (&quot;${DestNr}&quot; == &quot;21&quot;) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $VARS{call_timeout} = &quot;15&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; UPDATEV();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;do(&quot;insert into current_calls (extension, uuid)
values ('$DestNr', '$VARS{uuid}')&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;commit();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;
$session-&gt;execute(&quot;record_session&quot;,&quot;\${base_dir}/recordings/\${strftime(%Y-%m-%d-%H-%M-%S)}_\${destination_number}_\${caller_id_number}.wav&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;
$session-&gt;execute(&quot;bridge&quot;,&quot;user/${DestNr}\@$VARS{domain}&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>sub on_hangup {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my $hup_session = shift;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my $hup_cause = shift;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; logInfo(&quot;Hangup uuid: '&quot; . $hup_session-&gt;{uuid} .
&quot;'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; logInfo(&quot;Hangup cause: '$hup_cause'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;do(&quot;delete from current_calls where uuid =
'&quot; . $hup_session-&gt;{uuid} . &quot;'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;commit();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Internal numbers<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>if ($VARS{destination_number} =~ /^(2[0-2])$/) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; UPDATEV();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; bridgeCallInternally($VARS{destination_number});<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'># Intercept call<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>if ($VARS{destination_number} =~ /^\*8(\d+)$/) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my $intercept_extension = &quot;&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my $intercept_uuid = &quot;&quot;;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; my $sth = $dbh-&gt;prepare(&quot;select * from current_calls
where extension = ?&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $sth-&gt;execute($1);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; while (my @data = $sth-&gt;fetchrow_array()) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $intercept_extension = $data[0];<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp;&nbsp;&nbsp; $intercept_uuid = $data[1];<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; logInfo(&quot;Intercept call from '$intercept_extension' -
'$intercept_uuid'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; GETV(&quot;caller_id_number&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;do(&quot;update current_calls set extension =
'$VARS{caller_id_number}' where uuid = '$intercept_uuid'&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $dbh-&gt;commit();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $session-&gt;answer();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $session-&gt;execute(&quot;intercept&quot;,
&quot;$intercept_uuid&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>&nbsp; $session-&gt;execute(&quot;sleep&quot;, &quot;1000&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>}<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>$dbh-&gt;disconnect();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";
color:#1F497D'>return 1;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
freeswitch-users-bounces@lists.freeswitch.org
[mailto:freeswitch-users-bounces@lists.freeswitch.org] <b>On Behalf Of </b>Michael
Collins<br>
<b>Sent:</b> Friday, June 26, 2009 10:57 PM<br>
<b>To:</b> freeswitch-users@lists.freeswitch.org<br>
<b>Subject:</b> Re: [Freeswitch-users] hangup hook after intercept doesn't get
triggered...<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal style='margin-bottom:12.0pt'>Can you paste in your script so
we can see what is going on?<br>
-MC<o:p></o:p></p>

<div>

<p class=MsoNormal>On Fri, Jun 26, 2009 at 1:39 PM, Klaus Hochlehnert &lt;<a
href="mailto:Mailings@kh-dev.de">Mailings@kh-dev.de</a>&gt; wrote:<o:p></o:p></p>

<div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Ok, and how can I
ask the hook to come with me?</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>If I understand this
right...</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>When a call comes in
the hook is set on the a-leg and it rings on the b-leg.</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>When I do an
intercept I kill the ringing b-leg and the interceptor is now the &#8220;new&#8221; b-leg,
right?</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>I would assume that
the &#8220;old&#8221; a-leg still has the hook on it or this wrong.</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Thanks, Klaus</span><o:p></o:p></p>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0cm 0cm 0cm;
border-color:-moz-use-text-color -moz-use-text-color'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org"
target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a
href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Brian West<br>
<b>Sent:</b> Friday, June 26, 2009 10:28 PM<o:p></o:p></span></p>

<div>

<p class=MsoNormal><span style='font-size:10.0pt'><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org"
target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] hangup hook after intercept doesn't get
triggered...<o:p></o:p></span></p>

</div>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

<p>well in your case I suspect your intercepting the leg of the call without
the hook on it.<o:p></o:p></p>

<div>

<div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>/b<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

<div>

<div>

<p>On Jun 26, 2009, at 3:22 PM, Klaus Hochlehnert wrote:<o:p></o:p></p>

</div>

<p style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Actually one of my
first actions in the script is</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;
$session-&gt;setHangupHook('on_hangup');</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>When a call comes in
the hook is set and working.</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>The second time the
script is called when I try to intercept. As it&#8217;s the same script there&#8217;s also
the function setHangupHook called.</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>That&#8217;s what I&#8217;ve
currently done.</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>How can I set up the
hook for the &#8220;new&#8221; bridge?</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Or is there a
possibility to set a global hook?</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

</div>

<div>

<p><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Thanks, Klaus</span><o:p></o:p></p>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

</div>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
Freeswitch-users mailing list<br>
<a href="mailto:Freeswitch-users@lists.freeswitch.org">Freeswitch-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>