Körningen söker som standard efter en socketprincipfil som hanteras från port 843. Liksom med URL-principfiler kallas den här filen för
huvudprincipfil
.
När principfiler först började användas i Flash Player 6 fanns det inget stöd för socketprincipfiler. Anslutningar till socketservrar fick behörighet genom en principfil i standardplatsen på en HTTP-server på port 80 för samma värddator som socketservern. Flash Player 9 stöder fortfarande den här funktionen men Flash Player 10 gör det inte. I Flash Player 10 kan bara socketprincipfiler auktorisera socketanslutningar.
Precis som URL-principfiler stöder socketprincipfiler en metaprincipprogramsats, som anger vilka portar som kan hantera principfiler. I stället för att vara en ”master-only” är standardmetaprincipen för socketprincipen ”all”. Såvida inte huvudprincipfilen anger en mer restriktiv inställning förutsätter Flash Player att valfri socket på värden kan hantera en socketprincipfil.
Åtkomsten till socket- och XML-socketanslutningar inaktiveras som standard, även om den socket som du ansluter till finns i samma domän som SWF-filen. Du kan tillåta åtkomst på socketnivå genom att hantera en socketprincipfil från någon av följande platser:
-
Port 843 (huvudprincipfilens placering)
-
Samma port som huvudsocketanslutningen
-
En annan port än huvudsocketanslutningen
Flash Player söker som standard efter en socketprincipfil på port 843 och på samma port som huvudsocketanslutningen. Om du vill hantera en socketprincipfil från en annan port måste SWF-filen anropa
Security.loadPolicyFile()
.
En socketprincipfil har samma syntax som en URL-principfil, förutom att den också måste ange vilka portar som ska vara öppna. När en socketprincipfil hanteras från en port med ett lägre nummer än 1024 kan den ge åtkomst till alla portar. När en principfil kommer från port 1024 eller högre kan den bara ge åtkomst till port 1024 och högre. De tillåtna portarna anges i ett
to-ports
-attribut i taggen
<allow-access-from>
. Enstaka portnummer, portintervall och jokertecken får användas.
Följande är ett exempel på en socketprincipfil:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.mysite.com -->
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.example.com" to-ports="507,516" />
<allow-access-from domain="*.example.org" to-ports="516-523" />
<allow-access-from domain="adobe.com" to-ports="507,516-523" />
<allow-access-from domain="192.0.34.166" to-ports="*" />
</cross-domain-policy>
Om du vill hämta en socketprincipfil från port 843 eller från samma port som huvudsocketanslutningen anropar du metoden
Socket.connect()
eller
XMLSocket.connect()
. Flash Player söker först efter en huvudprincipfil på port 843. Om det finns någon där, kontrollerar programmet om filen innehåller en metaprincipprogramsats som förbjuder socketprincipfiler på målporten. Om åtkomsten inte förbjuds söker Flash Player först efter en lämplig
allow-access-from
-sats i huvudprincipfilen. Om det inte finns någon, söker programmet efter en socketprincipfil på samma port som huvudsocketanslutningen.
Om du vill hämta en socketprincipfil på en annan plats anropar du först metoden
Security.loadPolicyFile()
med den speciella
"xmlsocket"
-syntaxen, så här:
Security.loadPolicyFile("xmlsocket://server.com:2525");
Anropa metoden
Security.loadPolicyFile()
innan anrop av metoden
Socket.connect()
eller
XMLSocket.connect()
görs. Därefter väntar Flash Player tills principfilens begäran är slutförd innan programmet avgör om huvudanslutningen tillåts. Om huvudprincipfilen anger att målplatsen kan hantera principfiler, har anropet till
loadPolicyFile()
ingen effekt, även om det finns en principfil på den platsen.
Om du implementerar en socketserver och du behöver använda en socketprincip, måste du bestämma om du ska använda principfilen via samma port som tillåter huvudanslutningar eller en annan port. I båda fallen måste servern vänta på den första överföringen från klienten innan ett svar skickas.
Om Flash Player begär en principfil skickas alltid följande sträng så snart anslutningen är upprättad:
<policy-file-request/>
När servern tar emot den här strängen kan principfilen skickas. Förfrågningen från Flash Player avslutas alltid med en null-byte, och svaret från servern måste också avslutas med en null-byte.
Du kan inte återanvända samma anslutning för både en principfilsbegäran och en huvudanslutning. Stäng anslutningen när principfilen har skickats. Om du inte gör det avslutas principfilsanslutningen av Flash Player innan huvudanslutningen upprättas.