- Timestamp:
- 2012/02/09 01:26:58 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/module/SOAP/Server/TCP.php
r20119 r21461 22 22 require_once 'SOAP/Server.php'; 23 23 24 require_once 'SOAP/Server/TCP/Handler.php'; 25 26 24 27 /** 25 28 * SOAP Server Class that implements a TCP SOAP Server. … … 43 46 var $localaddr; 44 47 var $port; 45 var $listen; 46 var $reuse; 48 var $type; 47 49 48 50 function SOAP_Server_TCP($localaddr = '127.0.0.1', $port = 10000, 49 $ listen = 5, $reuse = true)51 $type = 'sequential') 50 52 { 51 53 parent::SOAP_Server(); 52 54 $this->localaddr = $localaddr; 53 55 $this->port = $port; 54 $this->listen = $listen; 55 $this->reuse = $reuse; 56 $this->type = $type; 56 57 } 57 58 58 function run() 59 { 60 if (($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { 61 return $this->_raiseSoapFault('socket_create() failed. Reason: ' . socket_strerror($sock)); 59 function run($idleTimeout = null) 60 { 61 $server = &Net_Server::create($this->type, $this->localaddr, 62 $this->port); 63 if (PEAR::isError($server)) { 64 echo $server->getMessage()."\n"; 62 65 } 63 if ($this->reuse && 64 !@socket_setopt($sock, SOL_SOCKET, SO_REUSEADDR, 1)) { 65 return $this->_raiseSoapFault('socket_setopt() failed. Reason: ' . socket_strerror(socket_last_error($sock))); 66 } 67 if (($ret = socket_bind($sock, $this->localaddr, $this->port)) < 0) { 68 return $this->_raiseSoapFault('socket_bind() failed. Reason: ' . socket_strerror($ret)); 69 } 70 if (($ret = socket_listen($sock, $this->listen)) < 0) { 71 return $this->_raiseSoapFault('socket_listen() failed. Reason: ' . socket_strerror($ret)); 72 } 73 74 while (true) { 75 $data = null; 76 if (($msgsock = socket_accept($sock)) < 0) { 77 $this->_raiseSoapFault('socket_accept() failed. Reason: ' . socket_strerror($msgsock)); 78 break; 79 } 80 while ($buf = socket_read($msgsock, 8192)) { 81 if (!$buf = trim($buf)) { 82 continue; 83 } 84 $data .= $buf; 85 } 86 87 if ($data) { 88 $response = $this->service($data); 89 /* Write to the socket. */ 90 if (!socket_write($msgsock, $response, strlen($response))) { 91 return $this->_raiseSoapFault('Error sending response data reason ' . socket_strerror()); 92 } 93 } 94 95 socket_close ($msgsock); 96 } 97 98 socket_close ($sock); 66 67 $handler = &new SOAP_Server_TCP_Handler; 68 $handler->setSOAPServer($this); 69 70 // hand over the object that handles server events 71 $server->setCallbackObject($handler); 72 $server->readEndCharacter = '</SOAP-ENV:Envelope>'; 73 $server->setIdleTimeout($idleTimeout); 74 75 // start the server 76 $server->start(); 99 77 } 100 78 … … 102 80 { 103 81 /* TODO: we need to handle attachments somehow. */ 104 return $this->parseRequest($data, $attachments); 82 $response = $this->parseRequest($data); 83 if ($this->fault) { 84 $response = $this->fault->message($this->response_encoding); 85 } 86 return $response; 87 } 88 89 function onStart() 90 { 91 } 92 93 function onIdle() 94 { 105 95 } 106 96 }
Note: See TracChangeset
for help on using the changeset viewer.
