Did you properly build the php ESL module?<br><a href="http://wiki.freeswitch.org/wiki/Esl#Installation">http://wiki.freeswitch.org/wiki/Esl#Installation</a><br>In libs/esl you need to &quot;make&quot; and &quot;make phpmod-install&quot;<br>
<br>Note: If your php script is running on a system that does not have FreeSWITCH then you will need to download and build ESL on the machine where the script is running, or you need to move the necessary *.so files over to that target machine.<br>
<br>Also, I see that you mention that you are running this in a browser. I&#39;m not sure that is what you need to be doing. I&#39;ll defer to more experienced Web programmers. However this much I can tell you: if your php script isn&#39;t actively running and waiting for a socket connection on port 9090 then this whole thing will fail completely. Using the socket app from the dialplan implies that the program on the other end will be sitting around waiting for a phone call to come in while listening on the port in question and will actively control the call. The test script you pasted here is the exact opposite of that: it is a script that connects *to* FreeSWITCH, not one that sits around waiting for a connection *from* FreeSWITCH.<br>
<br>I think you may need to break down your project into some smaller pieces. The first thing is to do is define the scope of your project: what all does it need to do? Does it need to answer a call and control it? If so you need a daemon of some sort that sits around waiting for calls from FS. Do you need to update a Web page? If so then you&#39;ll need to have some way for the Web server to communicate either with FreeSWITCH directly or with your daemon, or with a 3rd party data source, or whatever. <br>
<br>You might want to join #freeswitch at <a href="http://irc.freenode.net">irc.freenode.net</a> so that you can connect with other FS users and developers. You also should consider #fusionpbx and #2600hz because both of those channels are frequented by programmers who are familiar with PHP Web development and FreeSWITCH. <br>
<br>Hope this helps.<br>-MC<br><br><div class="gmail_quote">On Fri, Oct 29, 2010 at 1:01 PM, Will Smith <span dir="ltr">&lt;<a href="mailto:willbelair@yahoo.com">willbelair@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top"><font face="arial" size="4"><span style="font-size: 10pt;">hi Michael,</span></font><div style="font-family: arial; font-size: 10pt;">
Thank you for your input. Really appreciate when having someone giving help when in need.</div><div style="font-family: arial; font-size: 10pt;">I bought FS ebook, read chapter 9 and 10. And did what you said:</div><div style="font-family: arial; font-size: 10pt;">
1- put the event_socket_conf.xml back to original state, just modify the ip address, because I work through a vpn network. Here , could you confirm that mod_event_socket supports different browsers ? This is really important to me, because if client could not access from www, there is no point to work on this. Thank you.</div>
<div style="font-family: arial; font-size: 10pt;">-------- the
 event_socket_conf.xml</div><div style="font-family: arial; font-size: 10pt;"><div>&lt;configuration name=&quot;event_socket.conf&quot; description=&quot;Socket Client&quot;&gt;</div><div>  &lt;settings&gt;</div><div>    &lt;param name=&quot;nat-map&quot; value=&quot;false&quot;/&gt;</div>
<div>    &lt;param name=&quot;listen-ip&quot; value=&quot;192.168.51.133&quot;/&gt;</div><div>    &lt;param name=&quot;listen-port&quot; value=&quot;8021&quot;/&gt;</div><div>    &lt;param name=&quot;password&quot; value=&quot;ClueCon&quot;/&gt;</div>
<div>    &lt;!--param name=&quot;apply-inbound-acl&quot; value=&quot;lan&quot;/--&gt;</div><div>  &lt;/settings&gt;</div><div>&lt;/configuration&gt;</div></div><div style="font-family: arial; font-size: 10pt;">-----------</div>
<div style="font-family: arial; font-size: 10pt;"><br></div><div style="font-family: arial; font-size: 10pt;">2- I put this in both dialplan/default.xml  and dialplan/public.xml </div><div style="font-family: arial; font-size: 10pt;">
------------</div><div style="font-family: arial; font-size: 10pt;"><div>&lt;extension name=&quot;outbound-socket&quot;&gt;</div><div class="im"><div><span style="white-space: pre-wrap;">                </span>&lt;condition field=&quot;destination_number&quot; expression=&quot;^444$&quot;&gt;</div>
</div><div><span style="white-space: pre-wrap;">                </span>&lt;action application=&quot;socket&quot; data=&quot;<a href="http://192.168.51.133:8021" target="_blank">192.168.51.133:8021</a> async full&quot;/&gt;</div><div><span style="white-space: pre-wrap;">                </span>&lt;/condition&gt;</div>
<div>&lt;/extension&gt;</div></div><div style="font-family: arial; font-size: 10pt;">------------</div><div style="font-family: arial; font-size: 10pt;"><br></div><div style="font-family: arial; font-size: 10pt;">3- I have a simple php script just to connect to the FS, this is a sample script from FS wiki page</div>
<div style="font-family: arial; font-size: 10pt;">------</div><div><div><font face="arial" size="3"><span style="font-size: 13px;">&lt;?php</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;"><br>
</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">//require_once(&#39;ESL.php&#39;);</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">require_once(&#39;/usr/src/freeswitch/freeswitch-snapshot/libs/esl/php/ESL.php&#39;);</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">set_time_limit(0); // Remove the PHP time limit of 30 seconds for completion due to loop watching events</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">echo
 &quot;HERE&quot;;</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">// Connect to FreeSWITCH</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">$sock = new ESLconnection(&#39;localhost&#39;, &#39;8021&#39;, &#39;ClueCon&#39;);</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">// We want all Events (probably will want to change this depending on your needs)</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">$sock-&gt;sendRecv(&quot;event plain ALL&quot;);</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;"><br></span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;"><br></span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">// Grab Events until process is killed</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">//while($sock-&gt;connected()){</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">//echo &quot;CONECTED&quot;;</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">//$event = $sock-&gt;recvEvent();</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">//print_r($event-&gt;serialize());</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">//}</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;"><br></span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">?&gt;</span></font></div>
</div><div style="font-family: arial; font-size: 10pt;">------</div><div style="font-family: arial; font-size: 10pt;"><br></div><div style="font-family: arial; font-size: 10pt;">when running this from web browser, I got blank page. So, I run from console, this is the error messages:</div>
<div style="font-family: arial; font-size: 10pt;">--------</div><div><div><font face="arial" size="3"><span style="font-size: 13px;">PHP Warning:  dl(): Unable to load dynamic library &#39;/usr/lib/php/modules/ESL.so&#39; - /usr/lib/php/modules/ESL.so: cannot open shared
 object file: No such file or directory in /usr/src/freeswitch/freeswitch-snapshot/libs/esl/php/ESL.php on line 23</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">PHP Stack trace:</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">PHP   1. {main}() /var/www/html/eventsocket.php:0</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">PHP   2. require_once() /var/www/html/eventsocket.php:4</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">PHP   3. dl() /usr/src/freeswitch/freeswitch-snapshot/libs/esl/php/ESL.php:23</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">HEREPHP Fatal error:  Call to undefined function new_ESLconnection() in /usr/src/freeswitch/freeswitch-snapshot/libs/esl/php/ESL.php on line 119</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">PHP Stack trace:</span></font></div><div><font face="arial" size="3"><span style="font-size: 13px;">PHP   1. {main}() /var/www/html/eventsocket.php:0</span></font></div>
<div><font face="arial" size="3"><span style="font-size: 13px;">PHP   2. ESLconnection-&gt;__construct() /var/www/html/eventsocket.php:8</span></font></div></div><div style="font-family: arial; font-size: 10pt;">----------</div>
<div style="font-family: arial; font-size: 10pt;"><br></div><div style="font-family: arial; font-size: 10pt;">So, I guess
 the ESL.so is missing. I tried to  &quot;locate ESL.so&quot; , but nothing returned. I tried to </div><div style="font-family: arial; font-size: 10pt;">--------</div><div style="font-family: arial; font-size: 10pt;"><span style="font-family: sans-serif; line-height: 19px;"><pre style="padding: 1em; border: 1px dashed rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em;">
yum install libxml2-devel pcre-devel bzip2-devel curl-devel gmp-devel aspell-devel php-devel libtermcap-devel gdbm-devel
 db4-devel</pre></span></div><div style="font-family: arial; font-size: 10pt;">--------</div><div style="font-family: arial; font-size: 10pt;">it ran fine. But I did not do this:</div><div style="font-family: arial; font-size: 10pt;">
-------</div><div style="font-family: arial; font-size: 10pt;"><span style="font-family: sans-serif; line-height: 19px;"><b>NOTE:</b> For PHP you must edit the libs/esl/php/Makefile and add -lpthread to the LOCAL_LDFLAGS line.</span></div>
<div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;">-------</span></font></div><div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;">because I could not fine the LOCAL_LDFLAGS line.</span></font></div>
<div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;"><br></span></font></div><div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;">Please give me some help, I am banging my head against the wall here. If I could get the file ESL.so , is the set up above working? I thought it would be simple just to connect.</span></font></div>
<div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;"><br></span></font></div><div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;">Thank you.</span></font></div>
<div style="font-size: 10pt;"><font face="sans-serif"><span style="line-height: 19px;"><br></span></font><font face="arial">--- On </font><b style="font-family: arial;">Thu, 10/28/10, Michael Collins <i>&lt;<a href="mailto:msc@freeswitch.org" target="_blank">msc@freeswitch.org</a>&gt;</i></b><font face="arial"> wrote:</font><br>
<blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-family: arial;"><br>From: Michael Collins &lt;<a href="mailto:msc@freeswitch.org" target="_blank">msc@freeswitch.org</a>&gt;<br>
Subject: Re: [Freeswitch-users] Mod Event Socket<br>To: &quot;FreeSWITCH Users Help&quot; &lt;<a href="mailto:freeswitch-users@lists.freeswitch.org" target="_blank">freeswitch-users@lists.freeswitch.org</a>&gt;<br>Received: Thursday, October 28, 2010, 5:57 PM<div>
<div></div><div class="h5"><br><br><div>Be sure to learn the difference between inbound and outbound event socket. In your case you are doing outbound event socket. The dialplan calls the socket app which does an outbound socket connection to port 9090 on the localhost. Make sure that your app is listening on port 9090.<br>

<br>The event_socket.conf.xml file is for configuring inbound socket connections, e.g. when you have a script that attempts to connect to FS where FS is listening on port 8021. So change your event_socket.conf.xml file back to the default and retry. <br>

<br>Report back here if you have trouble. Also, buy or borrow the FreeSWITCH book and check out chapter 9. Lots of good stuff there on how the even system works.<br><br>-MC<br><br><div>On Thu, Oct 28, 2010 at 2:14 PM, Will Smith <span dir="ltr">&lt;<a rel="nofollow" href="http://mc/compose?to=willbelair@yahoo.com" target="_blank">willbelair@yahoo.com</a>&gt;</span> wrote:<br>

<blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top">Hi,<div>I am new to FS, and trying to get the mod event socket installed and running. I have FS running, with SIP account, can dial in/out via gateway.</div>

<div>Now I want to dial in, FS will send some info to client browser, here is one question, does this work over the internet, or just local ? Info sent could be the uuid, so that client browser could decide to bridge the call, send to IVR or transfer ...</div>

<div>Please give me some guide line how to set this up.</div><div>I added to dialplan/default.xml</div><div>-----</div><div><span style="font-size: medium;"><pre> &lt;extension name=&quot;socketTest&quot;&gt;
      &lt;condition field=&quot;destination_number&quot; expression=&quot;^444$&quot;&gt;
        &lt;action application=&quot;socket&quot; data=&quot;<a rel="nofollow" href="http://127.0.0.1:9090" target="_blank">127.0.0.1:9090</a> async full&quot;/&gt;
      &lt;/condition&gt;
 &lt;/extension&gt;</pre><pre>-----</pre><pre><br></pre><pre>got the php sample file: </pre><pre><span style="white-space: normal;"><pre style="word-wrap: break-word; white-space: pre-wrap;">&lt;?php

/**
 * Based loosely on the NET_Server code in PEAR.
 * This is only an example - considerable additional work is needed
 * Specifically, the code in the handleConnection method should be 
 * handled in a subclass
 *
 * 
 */

class Message
{
  var $properties = array();
  var $content = null;
}

class EventSocketListener
{

  var $host;
  var $port;
  var $sock;
  var $is_parent = true;
  var $clientInfo;
  var $clientFD;

  var $connectionContext = array();


  function &amp;create($port, $host = &quot;localhost&quot;)
      {
        $esl = new EventSocketListener;
        $esl-&gt;port = $port;
        $esl-&gt;host = $host;
        if (!function_exists(&#39;socket_create&#39;)) {
            return PEAR::raiseError(&#39;Sockets extension not available.&#39;);
        }
        return $esl;
      }

  function start()
  {
        if (($this-&gt;sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
          echo &quot;socket_create() failed: reason: &quot; . socket_strerror(socket_last_error()) . &quot;\n&quot;;
        }

        if (!socket_set_option($this-&gt;sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
          echo &#39;Unable to set option on socket: &#39;. socket_strerror(socket_last_error()) . PHP_EOL;
        }

        if (socket_bind($this-&gt;sock, $this-&gt;host, $this-&gt;port) === false) {
          echo &quot;socket_bind() failed: reason: &quot; . socket_strerror(socket_last_error($this-&gt;sock)) . &quot;\n&quot;;
        }

        if (socket_listen($this-&gt;sock, 5) === false) {
          echo &quot;socket_listen() failed: reason: &quot; . socket_strerror(socket_last_error($this-&gt;sock)) . &quot;\n&quot;;
        }

        // Dear children, please do not become zombies
        pcntl_signal(SIGCHLD, SIG_IGN);
        
        // wait for incmoning connections
        while (true)
        {
            // new connection
            if(($fd = socket_accept($this-&gt;sock)))
            {
              $pid = pcntl_fork();
              if($pid == -1) {
                  return  PEAR::raiseError(&#39;Could not fork child process.&#39;);
                }
                // This is the child =&gt; handle the request
                elseif($pid == 0) {
                    // this is not the parent
                    $this-&gt;_isParent = false;
                    // store the new file descriptor
                    $this-&gt;clientFD = $fd;

                    $peer_host    =    &quot;&quot;;
                    $peer_port    =    &quot;&quot;;
                    socket_getpeername($this-&gt;clientFD, $peer_host, $peer_port);
                    $this-&gt;clientInfo    =    array(
                                                      &quot;host&quot;        =&gt;    $peer_host,
                                                      &quot;port&quot;        =&gt;    $peer_port,
                                                      &quot;connectOn&quot;   =&gt;    time()
                                                   );
                    $this-&gt;handleConnection();
                    socket_shutdown($this-&gt;clientFD, 2);
                    socket_close($this-&gt;clientFD);
                }
                else /* Parent does nothing */
                  {
                  }
            }
        }
  }

  function handleConnection()
  {
    $fd = $this-&gt;clientFD;
    //first, read headers &amp; setup a state for this connection
    $line = &quot;&quot;;
    socket_write($fd, &quot;CONNECT\n\n&quot;);
    do 
      {
        $line = socket_read($fd, 2048, PHP_NORMAL_READ);
        if (trim($line) == &quot;&quot;)
          break;
        //we got a header, we need to add it to the 
        list($key, $value) = explode(&quot;:&quot;, $line);
        $key = trim($key);
        $value = trim(urldecode($value));
        $this-&gt;connectionContext[$key] = $value;
      }
    while ($line != &quot;&quot;);
    
    //    print_r($this-&gt;connectionContext);
    $this-&gt;callConnected();

    exit();
    
  }

  function processMessages($returnOnReply = false)
  {
    $fd = $this-&gt;clientFD;
    $result = new Message();
    $props = array();
    while (true)
      {
        do 
          {
            $line = @socket_read($fd, 2048, PHP_NORMAL_READ);
            if (socket_last_error($fd) == 104)
              return null;
            if ($line == null || $line == FALSE || trim($line) == &quot;&quot;)
              break;
            //we got a header, we need to add it to the message
            list($key, $value) = explode(&quot;:&quot;, $line);
            $key = trim($key);
            $value = trim(urldecode($value));
            $props[$key] = $value;
          }
        while ($line != &quot;&quot;);
        $result-&gt;properties = $props;

        if (isset($props[&#39;Content-Length&#39;]))
          {
            $length = $props[&#39;Content-Length&#39;];
            print(&quot;Reading content - $length\n&quot;);
            $data = socket_read($fd, $length);
            $result-&gt;content = $data;
          }
        if (isset($props[&#39;Content-Type&#39;]))
          {
            $type = $props[&#39;Content-Type&#39;];
            if ($returnOnReply &amp;&amp; 
                ($type == &quot;command/reply&quot; || $type == &quot;api/response&quot;))
              {
                return $result;
              }
            else if ($type == &quot;text/event-plain&quot;) //only plain events for now
              {
                $this-&gt;handleEvent($result);
              }
          }
        else
          {
            print(&quot;UNKNOWN MESSAGE: \n&quot;);
            print_r($result);
          }
      }    
  }
    


  function invokeCommand($command)
  {
    //Send the command
    print(&quot;Invoking: $command\n&quot;);
    $this-&gt;sendCommand($command);
    // Wait for the response
    $result = $this-&gt;processMessages(true);
    return $result;
  }

  function sendCommand($command)
  {
    $fd = $this-&gt;clientFD;
    socket_write($fd, trim($command) . &quot;\n\n&quot;); 
  }

/*-----------------------------------------------------*/
  /* Abstract Methods - should move to subclass*/

  function callConnected()
  {
    print_r($this-&gt;connectionContext);
    print(&quot;----------------\n&quot;);
    $result = $this-&gt;invokeCommand(&quot;log DEBUG&quot;);
    print_r($result);
    $result = $this-&gt;invokeCommand(&quot;event plain ALL&quot;);
    print_r($result);

    $this-&gt;processMessages(false);
    print(&quot;DONE PROCESSING MESSAGES&quot;);
    print_r($this-&gt;connectionContext);
  }

  function handleCommandResponse($response)
  {
    print(&quot;Recieved Unhandled Response:\n&quot;);
    print_r($response);
  }

  function handleEvent($event)
  {
    print(&quot;Recieved Unhandled Event:\n&quot;);
    print_r($event);
  }
}

  

  
// create a server that forks new processes
$server  = &amp;EventSocketListener::create(9090);

// start the server
$server-&gt;start();
?&gt;</pre><pre style="word-wrap: break-word; white-space: pre-wrap;">--------</pre><pre style="word-wrap: break-word; white-space: pre-wrap;">( this is the original file, not perfect sample) I tried to run this, and got error with auth.</pre>

<pre style="word-wrap: break-word; white-space: pre-wrap;">Also, I modify the even_socket_conf.xml  in autoload_configs/  </pre><pre style="word-wrap: break-word; white-space: pre-wrap;">change listen-ip to  0.0.0.0 , port = 9090 , disable password</pre>

<pre style="word-wrap: break-word; white-space: pre-wrap;"><br></pre><pre style="word-wrap: break-word; white-space: pre-wrap;">What did I miss? </pre><pre style="word-wrap: break-word; white-space: pre-wrap;">Thankyou for your help</pre>

<pre style="word-wrap: break-word; white-space: pre-wrap;">Will</pre><pre style="word-wrap: break-word; white-space: pre-wrap;"><br></pre></span></pre></span></div></td></tr></tbody></table><br><br>_______________________________________________<br>


FreeSWITCH-users mailing list<br>
<a rel="nofollow" href="http://mc/compose?to=FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a rel="nofollow" href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a rel="nofollow" href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a rel="nofollow" href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br>
</div><br></div></div>-----Inline Attachment Follows-----<div class="im"><br><br><div>_______________________________________________<br>FreeSWITCH-users mailing list<br><a href="http://mc/compose?to=FreeSWITCH-users@lists.freeswitch.org" target="_blank">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><br></div></div></blockquote></div></td></tr></tbody></table><br><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><br>
<br></blockquote></div><br>