/usr/share/php/SOAP/Server/TCP.php is in php-soap 0.12.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | <?php
/**
* This file contains the code for the TCP SOAP server.
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 2.02 of the PHP license,
* that is bundled with this package in the file LICENSE, and is available at
* through the world-wide-web at http://www.php.net/license/2_02.txt. If you
* did not receive a copy of the PHP license and are unable to obtain it
* through the world-wide-web, please send a note to license@php.net so we can
* mail you a copy immediately.
*
* @category Web Services
* @package SOAP
* @author Shane Caraveo <Shane@Caraveo.com> Port to PEAR and more
* @copyright 2003-2005 The PHP Group
* @license http://www.php.net/license/2_02.txt PHP License 2.02
* @link http://pear.php.net/package/SOAP
*/
require_once 'SOAP/Server.php';
/**
* SOAP Server Class that implements a TCP SOAP Server.
* http://www.pocketsoap.com/specs/smtpbinding/
*
* This class overrides the default HTTP server, providing the ability to
* accept socket connections and execute SOAP calls.
*
* TODO:
* use Net_Socket
* implement some security scheme
* implement support for attachments
*
* @access public
* @package SOAP
* @author Shane Caraveo <shane@php.net>
*/
class SOAP_Server_TCP extends SOAP_Server {
var $headers = array();
var $localaddr;
var $port;
var $listen;
var $reuse;
function SOAP_Server_TCP($localaddr = '127.0.0.1', $port = 10000,
$listen = 5, $reuse = true)
{
parent::SOAP_Server();
$this->localaddr = $localaddr;
$this->port = $port;
$this->listen = $listen;
$this->reuse = $reuse;
}
function run()
{
if (($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) {
return $this->_raiseSoapFault('socket_create() failed. Reason: ' . socket_strerror($sock));
}
if ($this->reuse &&
!@socket_setopt($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
return $this->_raiseSoapFault('socket_setopt() failed. Reason: ' . socket_strerror(socket_last_error($sock)));
}
if (($ret = socket_bind($sock, $this->localaddr, $this->port)) < 0) {
return $this->_raiseSoapFault('socket_bind() failed. Reason: ' . socket_strerror($ret));
}
if (($ret = socket_listen($sock, $this->listen)) < 0) {
return $this->_raiseSoapFault('socket_listen() failed. Reason: ' . socket_strerror($ret));
}
while (true) {
$data = null;
if (($msgsock = socket_accept($sock)) < 0) {
$this->_raiseSoapFault('socket_accept() failed. Reason: ' . socket_strerror($msgsock));
break;
}
while ($buf = socket_read($msgsock, 8192)) {
if (!$buf = trim($buf)) {
continue;
}
$data .= $buf;
}
if ($data) {
$response = $this->service($data);
/* Write to the socket. */
if (!socket_write($msgsock, $response, strlen($response))) {
return $this->_raiseSoapFault('Error sending response data reason ' . socket_strerror());
}
}
socket_close ($msgsock);
}
socket_close ($sock);
}
function service(&$data)
{
/* TODO: we need to handle attachments somehow. */
return $this->parseRequest($data, $attachments);
}
}
|