Dedicated Server API Client Communication

Discuss the Dedicated Server Tools developed by Nadeo Live such as ManiaLive, Trust Circles, Dedicated Manager, Competition Manager and Lobbies

Moderator: NADEO

kremsy
Posts: 1712
Joined: 21 Jul 2011, 09:51

Re: Dedicated Server API Client Communication

Post by kremsy » 09 May 2014, 15:07

kremsy wrote:Today I let a profile running over the application to find performance issues, I just found out that in 20sec of our running application, the executeCallbacks takes almost 9 seconds (in only 59 calls or something), but the strange thing is that of that 9 seconds, over 5seconds get lost in the unpack Method, is this method really that inefficient?

http://www.pictures.esc-clan.net/upload/profiler.png

Edit: My fault the times shown in the screenshot are in ms not s.
Its really second (5000ms).

How can it take that long?
Lukas alias Kremsy, Developer of:
ManiaControl: http://www.maniacontrol.com
ParagonLeague: http://league.paragon-esports.com
MPAseco: http://mpaseco.org
ManiaViewer: http://www.maniaviewer.com

User avatar
The_Big_Boo
Posts: 1041
Joined: 15 Jun 2010, 15:46

Re: Dedicated Server API Client Communication

Post by The_Big_Boo » 09 May 2014, 15:15

steeffeen wrote:
kremsy wrote:I just think it can get sometimes weird [...] if the Method names are differing from the official DedicatedServer Method names
this.
imo the dedi-api is an interface to the dedi and not a framework that does additional logic
Then we should:
- add all the *ToId or *Id methods
- split methods which automatically calls the *ToLogin variant when a player/login is provided, something chatSend and chatSendServeMessage were already doing (but there are lots of other cases where it's done)
- remove structures classes
- remove callVoteKick, callVoteBan, callVoteNextMap, callVoteRestartMap, writeFileFromFile and tunnelSendDataFromFile methods which doesn't exist at all in the official API

Imo, if people want to use only the "official" methods then they don't need the Connection class and should use only the Xmlrpc classes. The Connection class is here to help by providing documentation and autocompletion while coding but also by adding this additional logic when you don't want to bother with similar method names doing almost the same thing.

Thanks to additional logic, there are around 250 methods in the Connection class (excluding those which aren't making call to the dedicated, like factory and such) compared to the almost 300 from the official API. I don't understand why you're suddenly worried about differing method names while there were already tens of them that you weren't complaining about...


Edit: about unpack, whatever the time it takes, there are no other function anyway.
Edit2: and it really is 5ms in your screen, it's a dot not a comma.
OS: Win 7 Pro x64
RAM: 2x4GB Corsair @ 1600MHz
CPU: Intel i5 760 @ 3.6GHz
Mobo: Asus P7P55D-E
GPU: NVidia GTX 760 2GB
HDD: WD Black 1TB
Sound: VIA VT1828S (onboard)
Peripherals: Razer DeathAdder - Razer DeathStalker - Logitech F310

kremsy
Posts: 1712
Joined: 21 Jul 2011, 09:51

Re: Dedicated Server API Client Communication

Post by kremsy » 09 May 2014, 20:03

We have the first two transport Traces now:

Exception 1:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)

#0 /srv/shootmania/mania-pubobstacle/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /srv/shootmania/mania-pubobstacle/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /srv/shootmania/mania-pubobstacle/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetServerPasswo...', Array)
#3 /srv/shootmania/mania-pubobstacle/core/Libs/Maniaplanet/DedicatedServer/Connection.php(1467): Maniaplanet\DedicatedServer\Connection->execute('GetServerPasswo...')
#4 /srv/shootmania/mania-pubobstacle/plugins/TheM/QueuePlugin.php(263): Maniaplanet\DedicatedServer\Connection->getServerPassword()
#5 [internal function]: TheM\QueuePlugin->handleEverySecond(1399660756.3191)
#6 /srv/shootmania/mania-pubobstacle/core/Callbacks/TimerListening.php(50): call_user_func(Array, 1399660756.3191)
#7 /srv/shootmania/mania-pubobstacle/core/Callbacks/TimerManager.php(119): ManiaControl\Callbacks\TimerListening->triggerCallback(1399660756.3191)
#8 /srv/shootmania/mania-pubobstacle/core/Callbacks/CallbackManager.php(156): ManiaControl\Callbacks\TimerManager->manageTimings()
#9 /srv/shootmania/mania-pubobstacle/core/ManiaControl.php(368): ManiaControl\Callbacks\CallbackManager->manageCallbacks()
#10 /srv/shootmania/mania-pubobstacle/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#11 {main}
Exception 2:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading data Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] =>
[blocked] => 1
[eof] => 1
)
#0 /srv/shootmania/obstacle2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /srv/shootmania/obstacle2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /srv/shootmania/obstacle2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetMapList', Array)
#3 /srv/shootmania/obstacle2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Connection.php(3411): Maniaplanet\DedicatedServer\Connection->execute('GetMapList', Array)
#4 /srv/shootmania/obstacle2/maniacontrol/core/Maps/MapManager.php(382): Maniaplanet\DedicatedServer\Connection->getMapList(150, 46800)
#5 /srv/shootmania/obstacle2/maniacontrol/core/Maps/MapManager.php(608): ManiaControl\Maps\MapManager->updateFullMapList()
#6 [internal function]: ManiaControl\Maps\MapManager->handleOnInit()
#7 /srv/shootmania/obstacle2/maniacontrol/core/Callbacks/CallbackManager.php(219): call_user_func_array(Array, Array)
#8 /srv/shootmania/obstacle2/maniacontrol/core/ManiaControl.php(339): ManiaControl\Callbacks\CallbackManager->triggerCallback('ManiaControl.On...')
#9 /srv/shootmania/obstacle2/maniacontrol/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#10 {main}
Lukas alias Kremsy, Developer of:
ManiaControl: http://www.maniacontrol.com
ParagonLeague: http://league.paragon-esports.com
MPAseco: http://mpaseco.org
ManiaViewer: http://www.maniaviewer.com

User avatar
The_Big_Boo
Posts: 1041
Joined: 15 Jun 2010, 15:46

Re: Dedicated Server API Client Communication

Post by The_Big_Boo » 09 May 2014, 20:19

The second one is clearly a real interruption (eof is true) so nothing wrong on the library side.

For the first one, you can try to set a higher timeout (though 5 seconds is supposed to be enough for simple requests like the one failing here). Could you possibly include the server status with exceptions (the last StatusChanged callback values)?
OS: Win 7 Pro x64
RAM: 2x4GB Corsair @ 1600MHz
CPU: Intel i5 760 @ 3.6GHz
Mobo: Asus P7P55D-E
GPU: NVidia GTX 760 2GB
HDD: WD Black 1TB
Sound: VIA VT1828S (onboard)
Peripherals: Razer DeathAdder - Razer DeathStalker - Logitech F310

kremsy
Posts: 1712
Joined: 21 Jul 2011, 09:51

Re: Dedicated Server API Client Communication

Post by kremsy » 09 May 2014, 22:07

The_Big_Boo wrote:The second one is clearly a real interruption (eof is true) so nothing wrong on the library side.

For the first one, you can try to set a higher timeout (though 5 seconds is supposed to be enough for simple requests like the one failing here). Could you possibly include the server status with exceptions (the last StatusChanged callback values)?
Guess its not that easy but we can try, but happily these were the only 2 interrupts the whole day ;).

I increase the timeout to 8seconds for the moment.
Lukas alias Kremsy, Developer of:
ManiaControl: http://www.maniacontrol.com
ParagonLeague: http://league.paragon-esports.com
MPAseco: http://mpaseco.org
ManiaViewer: http://www.maniaviewer.com

User avatar
The_Big_Boo
Posts: 1041
Joined: 15 Jun 2010, 15:46

Re: Dedicated Server API Client Communication

Post by The_Big_Boo » 09 May 2014, 23:04

Actually, maybe we could try something different than the timeout for once ^^. Can you add the following after the loop in GbxRemote::write (should be line 289)

Code: Select all

fflush($this->socket);
It shouldn't be needed to explicitely flush the socket (and I'm not even sure which underlying buffer this function is flushing), but let's do it anyway just in case.
OS: Win 7 Pro x64
RAM: 2x4GB Corsair @ 1600MHz
CPU: Intel i5 760 @ 3.6GHz
Mobo: Asus P7P55D-E
GPU: NVidia GTX 760 2GB
HDD: WD Black 1TB
Sound: VIA VT1828S (onboard)
Peripherals: Razer DeathAdder - Razer DeathStalker - Logitech F310

kremsy
Posts: 1712
Joined: 21 Jul 2011, 09:51

Re: Dedicated Server API Client Communication

Post by kremsy » 09 May 2014, 23:34

The_Big_Boo wrote:Actually, maybe we could try something different than the timeout for once ^^. Can you add the following after the loop in GbxRemote::write (should be line 289)

Code: Select all

fflush($this->socket);
It shouldn't be needed to explicitely flush the socket (and I'm not even sure which underlying buffer this function is flushing), but let's do it anyway just in case.
Will add it into the next update :).

But i really think in most cases its fine atm, most are just normal interrupts as I see, we will see how it goes in the next days, had 4 interrupts yet, 3 of these like the second I posted before, so just only one weired one.
Lukas alias Kremsy, Developer of:
ManiaControl: http://www.maniacontrol.com
ParagonLeague: http://league.paragon-esports.com
MPAseco: http://mpaseco.org
ManiaViewer: http://www.maniaviewer.com

kremsy
Posts: 1712
Joined: 21 Jul 2011, 09:51

Re: Dedicated Server API Client Communication

Post by kremsy » 14 May 2014, 09:35

Here is one exception which definitly happened without an interrupt of the server (the server is running 14 days and mc is running locally on the same machine):

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)
	Maniaplanet\DedicatedServer\Xmlrpc\TransportExcept 	#0 /home/smparagon24/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /home/smparagon24/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /home/smparagon24/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetServerPasswo...', Array)
#3 /home/smparagon24/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(1467): Maniaplanet\DedicatedServer\Connection->execute('GetServerPasswo...')
#4 /home/smparagon24/ManiaControl/plugins/TheM/QueuePlugin.php(263): Maniaplanet\DedicatedServer\Connection->getServerPassword()
#5 [internal function]: TheM\QueuePlugin->handleEverySecond(1400000218.3328)
#6 /home/smparagon24/ManiaControl/core/Callbacks/TimerListening.php(60): call_user_func(Array, 1400000218.3328)
#7 /home/smparagon24/ManiaControl/core/Callbacks/TimerManager.php(119): ManiaControl\Callbacks\TimerListening->triggerCallback(1400000218.3328)
#8 /home/smparagon24/ManiaControl/core/Callbacks/CallbackManager.php(157): ManiaControl\Callbacks\TimerManager->manageTimings()
#9 /home/smparagon24/ManiaControl/core/ManiaControl.php(417): ManiaControl\Callbacks\CallbackManager->manageCallbacks()
#10 /home/smparagon24/ManiaControl/core/ManiaControl.php(360): ManiaControl\ManiaControl->loop()
#11 /home/smparagon24/ManiaControl/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#12 {main}
Another one:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)
	Maniaplanet\DedicatedServer\Xmlrpc\TransportExcept 	#0 /home/smdevota11/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /home/smdevota11/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /home/smdevota11/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetServerName', Array)
#3 /home/smdevota11/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(1383): Maniaplanet\DedicatedServer\Connection->execute('GetServerName')
#4 /home/smdevota11/ManiaControl/core/Server/UsageReporter.php(59): Maniaplanet\DedicatedServer\Connection->getServerName()
#5 [internal function]: ManiaControl\Server\UsageReporter->reportUsage(1399912603.707)
#6 /home/smdevota11/ManiaControl/core/Callbacks/TimerListening.php(60): call_user_func(Array, 1399912603.707)
#7 /home/smdevota11/ManiaControl/core/Callbacks/TimerManager.php(119): ManiaControl\Callbacks\TimerListening->triggerCallback(1399912603.707)
#8 /home/smdevota11/ManiaControl/core/Callbacks/CallbackManager.php(157): ManiaControl\Callbacks\TimerManager->manageTimings()
#9 /home/smdevota11/ManiaControl/core/ManiaControl.php(420): ManiaControl\Callbacks\CallbackManager->manageCallbacks()
#10 /home/smdevota11/ManiaControl/core/ManiaControl.php(363): ManiaControl\ManiaControl->loop()
#11 /home/smdevota11/ManiaControl/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#12 {main}
Another one:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)
	Maniaplanet\DedicatedServer\Xmlrpc\TransportExcept 	#0 /home/nadeo/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /home/nadeo/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /home/nadeo/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetStatus', Array)
#3 /home/nadeo/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(230): Maniaplanet\DedicatedServer\Connection->execute('GetStatus')
#4 /home/nadeo/ManiaControl/core/Server/Server.php(410): Maniaplanet\DedicatedServer\Connection->getStatus()
#5 /home/nadeo/ManiaControl/core/ManiaControl.php(391): ManiaControl\Server\Server->waitForStatus(4)
#6 /home/nadeo/ManiaControl/core/ManiaControl.php(332): ManiaControl\ManiaControl->connect()
#7 /home/nadeo/ManiaControl/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#8 {main}
Another:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)
	Maniaplanet\DedicatedServer\Xmlrpc\TransportExcept 	#0 /home/konte/tm2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /home/konte/tm2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /home/konte/tm2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('GetServerName', Array)
#3 /home/konte/tm2/maniacontrol/core/Libs/Maniaplanet/DedicatedServer/Connection.php(1383): Maniaplanet\DedicatedServer\Connection->execute('GetServerName')
#4 /home/konte/tm2/maniacontrol/core/Server/UsageReporter.php(59): Maniaplanet\DedicatedServer\Connection->getServerName()
#5 [internal function]: ManiaControl\Server\UsageReporter->reportUsage(1399783989.2056)
#6 /home/konte/tm2/maniacontrol/core/Callbacks/TimerListening.php(60): call_user_func(Array, 1399783989.2056)
#7 /home/konte/tm2/maniacontrol/core/Callbacks/TimerManager.php(119): ManiaControl\Callbacks\TimerListening->triggerCallback(1399783989.2056)
#8 /home/konte/tm2/maniacontrol/core/Callbacks/CallbackManager.php(156): ManiaControl\Callbacks\TimerManager->manageTimings()
#9 /home/konte/tm2/maniacontrol/core/ManiaControl.php(420): ManiaControl\Callbacks\CallbackManager->manageCallbacks()
#10 /home/konte/tm2/maniacontrol/core/ManiaControl.php(363): ManiaControl\ManiaControl->loop()
#11 /home/konte/tm2/maniacontrol/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#12 {main}
And another one:

Code: Select all

[ManiaControl EXCEPTION]: Connection interrupted while reading header Array
(
[stream_type] => tcp_socket/ssl
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] => 1
[blocked] => 1
[eof] =>
)
	Maniaplanet\DedicatedServer\Xmlrpc\TransportExcept 	#0 /home/smgtx15/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(193): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->readMessage()
#1 /home/smgtx15/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/GbxRemote.php(125): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->flush(true)
#2 /home/smgtx15/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(140): Maniaplanet\DedicatedServer\Xmlrpc\GbxRemote->query('SaveMatchSettin...', Array)
#3 /home/smgtx15/ManiaControl/core/Libs/Maniaplanet/DedicatedServer/Connection.php(3587): Maniaplanet\DedicatedServer\Connection->execute('SaveMatchSettin...', Array, false)
#4 /home/smgtx15/ManiaControl/core/Maps/MapManager.php(408): Maniaplanet\DedicatedServer\Connection->saveMatchSettings('MatchSettings/t...')
#5 /home/smgtx15/ManiaControl/core/Maps/MapManager.php(734): ManiaControl\Maps\MapManager->updateFullMapList()
#6 [internal function]: ManiaControl\Maps\MapManager->mapsModified(Array)
#7 /home/smgtx15/ManiaControl/core/Callbacks/CallbackManager.php(219): call_user_func_array(Array, Array)
#8 /home/smgtx15/ManiaControl/core/Callbacks/CallbackManager.php(202): ManiaControl\Callbacks\CallbackManager->triggerCallback('ManiaPlanet.Map...', Array)
#9 /home/smgtx15/ManiaControl/core/Callbacks/CallbackManager.php(167): ManiaControl\Callbacks\CallbackManager->handleCallback(Array)
#10 /home/smgtx15/ManiaControl/core/ManiaControl.php(420): ManiaControl\Callbacks\CallbackManager->manageCallbacks()
#11 /home/smgtx15/ManiaControl/core/ManiaControl.php(363): ManiaControl\ManiaControl->loop()
#12 /home/smgtx15/ManiaControl/ManiaControl.php(133): ManiaControl\ManiaControl->run()
#13 {main}
This are all which appeared in the last 2 days (from 85 servers running maniacontrol) + some with eof I didn't posted here.


By the way, I added the fflush already some days ago, it seems like there is no difference.
Lukas alias Kremsy, Developer of:
ManiaControl: http://www.maniacontrol.com
ParagonLeague: http://league.paragon-esports.com
MPAseco: http://mpaseco.org
ManiaViewer: http://www.maniaviewer.com

User avatar
The_Big_Boo
Posts: 1041
Joined: 15 Jun 2010, 15:46

Re: Dedicated Server API Client Communication

Post by The_Big_Boo » 14 May 2014, 14:32

Let's make another try, with the version I just pushed. Relevant changes:
- setting stream read buffer to 0 because of this comment (though it concerns non-blocking sockets and the "unexplainable problems" are not given... but why not?)
- making the requestHandle goes back to original value when overflowing (though reaching more than 2 billion calls to the dedicated is quite unlikely)

As the fflush, it probably won't make any difference but I'm now out of ideas...


Also, the exceptions will now clearly say when it's a timeout.
OS: Win 7 Pro x64
RAM: 2x4GB Corsair @ 1600MHz
CPU: Intel i5 760 @ 3.6GHz
Mobo: Asus P7P55D-E
GPU: NVidia GTX 760 2GB
HDD: WD Black 1TB
Sound: VIA VT1828S (onboard)
Peripherals: Razer DeathAdder - Razer DeathStalker - Logitech F310

User avatar
The_Big_Boo
Posts: 1041
Joined: 15 Jun 2010, 15:46

Re: Dedicated Server API Client Communication

Post by The_Big_Boo » 08 Jun 2014, 11:05

Jojo_44 wrote:I´ve used cdata as escaping option for the last 2 years which is a pretty cool trick I think. If you use /verbose_rpc_full it´s waaay better to read instead of the entities. Would be cool if you can change that.
I found an issue with cdata... The xmlrpc library doesn't escape the "]]>" sequence so a cdata section can be closed sooner than it should and make the whole request fails, or can even be used to inject xml in some cases.

So, I had two solutions:
- putting back 'markup' as escaping option instead of cdata
- walking through arguments to escape "]]>"

I chose first because it's obviously way faster (which is the point of using the extension in the first place) so from now, if you need to debug requests I recommend you to disable the xmlrpc extension and use the fallback xmlrpc encode/decode methods instead.
OS: Win 7 Pro x64
RAM: 2x4GB Corsair @ 1600MHz
CPU: Intel i5 760 @ 3.6GHz
Mobo: Asus P7P55D-E
GPU: NVidia GTX 760 2GB
HDD: WD Black 1TB
Sound: VIA VT1828S (onboard)
Peripherals: Razer DeathAdder - Razer DeathStalker - Logitech F310

Post Reply

Return to “Dedicated Server Tools”

Who is online

Users browsing this forum: No registered users and 2 guests