actionscript-3socketsflex3content-typepolicy

How to make my PHP Socket Server send a policy file to flash clients?


My flash game needs to connect to my PHP Socket Server. Because of security things, a policy file has to be send to the flash client when it tries to connect.

The following is what I've done.

In Actionscript / Flex 3 / Flash:

Security.loadPolicyFile("http://[SERVER.IP]:9000/crossdomain.xml");
socket.connect(hostName, port); //connect to the socket
[rest of original code]

To make the socket server respond on the request, I added the following to the server:

elseif (preg_match("/policy-file-request/i", $buffer) or preg_match("/crossdomain/i", $buffer)) {
                    socket_write($socket, '<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="*" to-ports="9000" /></cross-domain-policy>');
                    unset($read_sockets[array_search($socket, $read_sockets)]);
                    socket_shutdown($socket, 2);
                    socket_close($socket);

I however get the following error: "Ignoring policy file at (URL) due to missing Content-Type." So, I tried to fix this by adding a header right above my xml code:

socket_write($socket, "Content-Type: text/xml\n");

Unfortunately, I still get the same error. Am I giving the content type in a wrong way?


Solution

  • Try sending this:

    HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r\n
    

    Make sure nothing is sent before this. Also, send a \r\n before the socket is closed.