– Kamailio SIP Server –

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
utils:fifo-client-php [2008/04/02 01:43] – VyUFJeQbQAbPfXTKlBq 203.158.167.148utils:fifo-client-php [2008/04/03 16:32] (current) – old revision restored 212.227.35.68
Line 1: Line 1:
 +====== FIFO Client PHP Example ======
  
 +A sample implementation of a FIFO client in PHP you can integrate it in your web applications.
 +
 +<code>
 +  <head>
 +  <title>OpenSER FIFO Client</title>
 +  </head>
 +   <body>
 +
 +  <table border="1">
 +  <tr><th colspan="2">OpenSER FIFO Client</th></tr>
 +  <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
 +  <tr>
 +    <td><textarea name="cmd" cols=40 rows=6></textarea></td>
 +    <td><input type="submit" name="action" value="Send"></td>
 +  </tr>
 +  </form>
 +  <tr align="center">
 +    <td colspan="2">
 +       <font size="-1">Please do not enter the leading ":" or the trailing ":REPLY_FILE_NAME"</font>
 +    </td>
 +  </tr>
 +  </table>
 +
 +  <?php
 +  $cmd = NULL;
 +  if (isset($_POST['cmd'])) {
 +    $cmd = $_POST['cmd'];
 +  }
 +  if (isset($_POST['action']) && ($_POST['action'] == "Send") && (trim(strlen($_POST['cmd'])) > 0)) {
 +    $host="192.168.1.1";  # IP Address of the OpenSER (FIFO) Server
 +    $port = 12345;        # Port that OpenSER (FIFO) is listening on
 +    $pos = strpos($cmd,"\n");
 +    if ($pos == NULL) {
 +      $fifo_cmd = ":$cmd:REPLY_FILE_NAME\n";
 +    } else {
 +      $t1 = substr($cmd,0,$pos-1);
 +      $t2 = substr($cmd,$pos);
 +      $fifo_cmd = ":$t1:REPLY_FILE_NAME$t2\n";
 +    }
 +    $timeout = 5;
 +    $fp = fsockopen ($host, $port, $errno, $errstr, $timeout);
 +    if (!$fp) {
 +      die("Error opening socket: $errno $errstr");
 +    } else {
 +      echo "<br>FIFO Command: <b><pre>$fifo_cmd</pre></b><br>";
 +    // write the user string to the socket
 +    fputs ($fp, $fifo_cmd);
 +    // get the result
 +    while ($result = fgets ($fp, 1024)) {
 +      echo "Response: <b>$result</b><br>";
 +    }
 +    // close the connection
 +    fclose ($fp);
 +    }
 +  }
 +  ?>
 +
 +  </body>
 +  </html>
 +</code>
 +
 +Here is another example using the function write2fifo taken from serweb.
 +It should work as it with a default openser installation.
 +This script comes with no warranty...
 +Type **which** to list all available commands.
 +
 +<code>
 +<?php
 +/* This script has part of it taken from "serweb"
 +   serweb talks to SER via FIFO -- this is FIFO's name,
 +   it must have the same value as SER's fifo config param
 +*/
 +$config->fifo_server="/tmp/openser_fifo";
 +
 +/* values used for names of reply fifos -- they change randomly 
 +   this values shouldn't be changed unless you well know what are
 +   you doing
 +*/
 +$config->reply_fifo_filename="openserwebfifo_".rand();
 +$config->reply_fifo_path="/tmp/".$config->reply_fifo_filename;
 +
 +/* This function is taken from "serweb" */
 +function write2fifo($fifo_cmd, &$errors, &$status){
 + global $config;
 +
 + /* check if fifo is running */
 + if (!file_exists($config->fifo_server) or 
 +      filetype($config->fifo_server)!="fifo"){
 +
 + /*log_errors(PEAR::raiseError("FIFO not running or bad path to it", NULL, NULL, 
 +            NULL, "fifo path:".$config->fifo_server), $errors);*/
 + echo "FIFO not running or bad path to it";
 + return false;
 + }
 +
 +
 + /* open fifo now */
 + $fifo_handle=fopen( $config->fifo_server, "w" );
 + if (!$fifo_handle) {
 + $errors[]="sorry -- cannot open write fifo"; return false;
 + }
 +
 + /* create fifo for replies */
 + @system("mkfifo -m 666 ".$config->reply_fifo_path );
 +
 +
 + /* add command separator */
 + $fifo_cmd=$fifo_cmd."\n";
 +
 + /* write fifo command */
 + if (fwrite( $fifo_handle, $fifo_cmd)==-1) {
 +     @unlink($config->reply_fifo_path);
 +     @fclose($fifo_handle);
 + $errors[]="sorry -- fifo writing error"; return false;
 + }
 + @fclose($fifo_handle);
 +
 + /* read output now */
 + @$fp = fopen( $config->reply_fifo_path, "r");
 + if (!$fp) {
 +     @unlink($config->reply_fifo_path);
 + $errors[]="sorry -- reply fifo opening error"; return false;
 + }
 +
 + $status=fgets($fp,256);
 + if (!$status) {
 +     @unlink($config->reply_fifo_path);
 + $errors[]="sorry -- reply fifo reading error"; return false;
 + }
 +
 +
 + $rd="";
 + while (!feof($fp)) {
 + $rd.=fread($fp,8192);
 + }
 + @unlink($config->reply_fifo_path);
 +
 + return $rd;
 +}
 +?>
 +
 +<html>
 +<head>
 +  <title>OpenSER FIFO Client</title>
 +</head>
 +<body>
 +
 +  <table border="1">
 +    <tr><th colspan="2">OpenSER FIFO Client</th></tr>
 +    <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
 +      <tr>
 +        <td><textarea name="cmd" cols=40 rows=6></textarea></td>
 +        <td><input type="submit" name="action" value="Send"></td>
 +      </tr>
 +    </form>
 +    <tr align="center">
 +      <td colspan="2">
 +      <font size="-1">Please do not enter the leading ":" or the trailing ":REPLY_FILE_NAME"</font>
 +      </td>
 +    </tr>
 +  </table>
 +
 +<?php
 +$cmd = NULL;
 +if (isset($_POST['cmd'])) {
 +  $cmd = $_POST['cmd'];
 +  }
 +if (isset($_POST['action']) && ($_POST['action'] == "Send") && (trim(strlen($_POST['cmd'])) > 0)) {
 +  $pos = strpos($cmd,"\n");
 +  if ($pos == NULL) {
 +    $fifo_cmd = ":$cmd:".$config->reply_fifo_filename."\n";
 +  } else {
 +    $t1 = substr($cmd,0,$pos-1);
 +    $t2 = substr($cmd,$pos);
 +    $fifo_cmd = ":$t1:".$config->reply_fifo_filename."$t2\n";
 +  }
 +
 +  $fifo_out=write2fifo($fifo_cmd, $err, $status);
 +
 +  if ($err) {
 +    $errors=array_merge($errors, $err); 
 +    echo "Error 1: $errors";
 +    die();
 +  }
 +
 +  if (substr($status,0,1)!="2" and substr($status,0,3)!="404") {
 +    $errors[]=$status; 
 +    echo "Error 2: $status";
 +    die();
 +  }
 +  echo "<br>FIFO Command: <b><pre>$fifo_cmd</pre></b><br>";
 +  echo "Response: <b>$fifo_out</b><br>";
 +}
 +?>
 +
 +</body>
 +</html>
 +</code>