update mp api

This commit is contained in:
kremsy 2014-02-19 12:38:38 +01:00 committed by Steffen Schröder
parent 9f2b4b143d
commit 34f5598f24
3 changed files with 32 additions and 32 deletions

View File

@ -104,14 +104,14 @@ class Client
$this->socket = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
if (!$this->socket)
{
throw new Exception("transport error - could not open socket (error: $errno, $errstr)", -32300);
throw new FatalException("transport error - could not open socket (error: $errno, $errstr)", FatalException::NOT_INITIALIZED);
}
// handshake
$array_result = unpack('Vsize', fread($this->socket, 4));
$size = $array_result['size'];
if ($size > 64)
{
throw new Exception('transport error - wrong lowlevel protocol header', -32300);
throw new FatalException('transport error - wrong lowlevel protocol header', FatalException::OTHER);
}
$handshake = fread($this->socket, $size);
if ($handshake == 'GBXRemote 1')
@ -124,7 +124,7 @@ class Client
}
else
{
throw new Exception('transport error - wrong lowlevel protocol version', -32300);
throw new FatalException('transport error - wrong lowlevel protocol version', FatalException::OTHER);
}
}
@ -163,7 +163,7 @@ class Client
$r = fwrite($this->socket, $bytes);
if ($r === false || $r == 0)
{
throw new Exception('Connection interupted');
throw new FatalException('Connection interupted', FatalException::INTERRUPTED);
}
$bytes_to_write -= $r;
@ -191,7 +191,7 @@ class Client
$contents = fread($this->socket, 4);
if (strlen($contents) == 0)
{
throw new Exception('transport error - connection interrupted!', -32700);
throw new FatalException('transport error - connection interrupted!', FatalException::INTERRUPTED);
}
$array_result = unpack('Vsize', $contents);
$size = $array_result['size'];
@ -202,7 +202,7 @@ class Client
$contents = fread($this->socket, 8);
if (strlen($contents) == 0)
{
throw new Exception('transport error - connection interrupted!', -32700);
throw new FatalException('transport error - connection interrupted!', FatalException::INTERRUPTED);
}
$array_result = unpack('Vsize/Vhandle', $contents);
$size = $array_result['size'];
@ -217,12 +217,12 @@ class Client
if ($recvhandle == 0 || $size == 0)
{
throw new Exception('transport error - connection interrupted!', -32700);
throw new FatalException('transport error - connection interrupted!', FatalException::INTERRUPTED);
}
if ($size > SIZE_MAX)
{
throw new Exception("transport error - answer too big ($size)", -32700);
throw new Exception("transport error - answer too big ($size)", Exception::ANWSER_TOO_BIG);
}
self::$received += $size;
@ -253,7 +253,7 @@ class Client
if (!$this->message->parse())
{
// XML error
throw new Exception('parse error. not well formed', -32700);
throw new Exception('parse error. not well formed', Exception::OTHER);
}
// Is the message a fault?
if ($this->message->messageType == 'fault')
@ -272,15 +272,15 @@ class Client
if (!$this->socket || $this->protocol == 0)
{
throw new Exception('transport error - Client not initialized', -32300);
throw new FatalException('transport error - Client not initialized', FatalException::NOT_INITIALIZED);
}
$request = new Request($method, $args);
// Check if request is larger than 1024 Kbytes
if ($request->getLength() > 1024*1024-8)
if ($request->getLength() > 1024*1024-8)
{
throw new Exception('transport error - request too large!', -32700);
throw new Exception('transport error - request too large!', Exception::REQUEST_TOO_BIG);
}
$this->sendRequest($request);
@ -295,14 +295,14 @@ class Client
if (!$this->socket || $this->protocol == 0)
{
throw new Exception('transport error - Client not initialized', -32300);
throw new FatalException('transport error - Client not initialized', FatalException::NOT_INITIALIZED);
}
$request = new Request($method, $args);
// Check if the request is greater than 1024 Kbytes to avoid errors
// Check if the request is greater than 512 Kbytes to avoid errors
// If the method is system.multicall, make two calls (possibly recursively)
if ($request->getLength() > 1024*1024-8)
if ($request->getLength() > 1024*1024-8)
{
if ($method == 'system.multicall' && isset($args[0]))
{
@ -310,7 +310,7 @@ class Client
// If count is 1, query cannot be reduced
if ($count < 2)
{
throw new Exception('transport error - request too large!', -32700);
throw new Exception('transport error - request too large!', Exception::REQUEST_TOO_BIG);
}
$length = floor($count/2);
@ -324,7 +324,7 @@ class Client
// If the method is not a multicall, just stop
else
{
throw new Exception('transport error - request too large!', -32700);
throw new Exception('transport error - request too large!', Exception::REQUEST_TOO_BIG);
}
}
@ -340,7 +340,7 @@ class Client
function readCallbacks($timeout = 2000)
{
if (!$this->socket || $this->protocol == 0)
throw new Exception('transport error - Client not initialized', -32300);
throw new FatalException('transport error - Client not initialized', FatalException::NOT_INITIALIZED);
if ($this->protocol == 1)
return false;
@ -349,7 +349,7 @@ class Client
$contents = '';
$contents_length = 0;
@stream_set_timeout($this->socket, 0, 10000); // timeout 10 ms (to read available data)
@stream_set_timeout($this->socket, 0, 100000); // timeout 10 ms (to read available data)
// (assignment in arguments is forbidden since php 5.1.1)
$read = array($this->socket);
$write = NULL;
@ -392,20 +392,19 @@ class Client
$contents = fread($this->socket, 8);
if (strlen($contents) == 0)
{
throw new Exception('transport error - connection interrupted!', -32700);
throw new FatalException('transport error - connection interrupted!', FatalException::INTERRUPTED);
}
$array_result = unpack('Vsize/Vhandle', $contents);
$size = $array_result['size'];
$recvhandle = $array_result['handle'];
if ($recvhandle == 0 || $size == 0)
{
throw new Exception('transport error - connection interrupted!', -32700);
throw new FatalException('transport error - connection interrupted!', FatalException::INTERRUPTED);
}
if ($size > SIZE_MAX)
{
throw new Exception("transport error - answer too big ($size)", -32700);
throw new Exception("transport error - answer too big ($size)", Exception::ANWSER_TOO_BIG);
}
self::$received += $size;
@ -470,4 +469,4 @@ class Client
}
}
?>
?>

View File

@ -7,6 +7,11 @@
namespace Maniaplanet\DedicatedServer\Xmlrpc;
class Exception extends \Exception {}
class Exception extends \Exception
{
const ANWSER_TOO_BIG = 1;
const REQUEST_TOO_BIG = 2;
const OTHER = 999;
}
?>

View File

@ -22,6 +22,7 @@ use ManiaControl\Statistics\StatisticManager;
use ManiaControl\Update\UpdateManager;
use Maniaplanet\DedicatedServer\Connection;
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
use Maniaplanet\DedicatedServer\Xmlrpc\FatalException;
require_once __DIR__ . '/Libs/Maniaplanet/DedicatedServer/Connection.php';
require_once __DIR__ . '/Libs/GbxDataFetcher/gbxdatafetcher.inc.php';
@ -276,7 +277,7 @@ class ManiaControl implements CommandListener {
// Register shutdown handler
register_shutdown_function(array($this, 'handleShutdown'));
// Connect to server
$this->connect();
@ -307,13 +308,9 @@ class ManiaControl implements CommandListener {
// Manager callbacks
$this->callbackManager->manageCallbacks();
} catch(Exception $e) {
if ($e->getMessage() == 'Connection interupted' || $e->getMessage() == 'transport error - connection interrupted!') {
} catch(FatalException $e) {
$this->quit($e->getMessage());
return;
}
throw $e;
}
// Manage FileReader
$this->fileReader->appendData();
@ -363,7 +360,6 @@ class ManiaControl implements CommandListener {
try {
$this->client = Connection::factory($host, $port, self::CONNECT_TIMEOUT, $login, $pass);
} catch(Exception $e) {
// TODO: is it even needed to try-catch here? we will crash anyways, YES to avoid a message report to mc website
trigger_error("Couldn't authenticate on server with user '{$login}'! " . $e->getMessage(), E_USER_ERROR);
}