Domyślnie środowisko wykonawcze poszukuje pliku strategii gniazd udostępnianego z portu numer 843. W przypadku plików strategii URL ten plik jest nazywany
nadrzędnym plikiem strategii
.
Gdy pliki strategii po raz pierwszy pojawiły się w programie Flash Player w wersji 6, nie uwzględniano jeszcze obsługi plików strategii gniazd. Połączenia z serwerami w gniazdach były autoryzowane przez plik strategii w domyślnej lokalizacji na serwerze HTTP przez port 80 tego samego hosta, na którym działał serwer w gnieździe. Program Flash Player 9 nadal uwzględnia taką możliwość, ale plik Flash Player 10 już nie. W programie Flash Player 10 połączenia z gniazdami mogą być autoryzowane wyłącznie przez pliki strategii gniazd.
Podobnie jak pliki zasad URL, pliki zasad gniazd obsługują instrukcję metazasady, która określa porty udostępniające pliki zasad. Jednak domyślną metastrategią gniazd jest strategia „all” (wszystkie), a nie „master-only” (tylko główne). A zatem, o ile główny plik strategii nie określa bardziej restrykcyjnych ustawień, program Flash Player zakłada, że każde gniazdo na hoście może udostępniać plik strategii gniazd.
Dostęp do gniazd o połączenia z gniazdami XML są domyślnie wyłączone, nawet jeśli docelowe gniazdo połączenia jest w tej samej domenie, co plik SWF. Można zezwolić na dostęp na poziomie gniazd, udostępniając plik strategii gniazd z dowolnej z następujących lokalizacji:
-
port 843 (lokalizacja głównego pliku strategii);
-
ten sam port, co używany przez główne połączenie z gniazdem;
-
port inny niż używany przez główne połączenie z gniazdem.
Domyślnie program Flash Player poszukuje pliku strategii gniazd w porcie 843 i w tym samym porcie, co główne połączenie z gniazdem. Jeśli plik strategii gniazd ma być udostępniony z innego portu, plik SWF powinien wywołać metodę
Security.loadPolicyFile()
.
Składnia pliku strategii gniazd jest taka sama, jak składnia pliku strategii URL, z tym że plik ten musi również określać porty, którym ma być udzielone zezwolenie na dostęp. Gdy plik strategii jest udostępniany z portu o numerze niższym niż 1024, plik ten może udzielać zezwolenia dowolnym portom; gdy plik strategii jest udostępniany z portu o numerze 1024 lub wyższym, może udzielać zezwolenia tylko portom o numerach od 1024 wzwyż. Dozwolone porty określa się w atrybucie
to-ports
w znaczniku
<allow-access-from>
. Dozwolone jest korzystanie z pojedynczych numerów portów, zakresów numerów, a także z symboli wieloznacznych.
Oto przykładowy plik strategii gniazd:
<?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>
Aby pobrać plik strategii gniazd z portu 843 lub z tego samego portu, którego używa główne połączenie z gniazdem, należy wywołać metodę
Socket.connect()
lub
XMLSocket.connect()
. Program Flash Player najpierw sprawdza, czy główny plik strategii jest udostępniany w porcie 843. Jeśli znajdzie taki plik, sprawdza czy zawiera on instrukcję metastrategii zabraniającą udostępniania plików strategii gniazd na porcie docelowym. Jeśli dostęp nie jest zabroniony, program Flash Player najpierw poszukuje odpowiedniej instrukcji
allow-access-from
w głównym pliku strategii. Jeśli nie znajdzie takiej instrukcji, poszukuje pliku strategii gniazd w tym samym porcie, który obsługuje główne połączenie z gniazdem.
Aby pobrać plik strategii gniazd z innej lokalizacji, należy najpierw wywołać metodę
Security.loadPolicyFile()
, używając specjalnej składni
"xmlsocket"
przedstawionej poniżej:
Security.loadPolicyFile("xmlsocket://server.com:2525");
Metodę
Security.loadPolicyFile()
należy wywołać przed wywołaniem metody
Socket.connect()
lub
XMLSocket.connect()
. Teraz program Flash Player czeka z zezwoleniem na główne połączenie, aż spełnione zostanie żądanie pobrania pliku strategii. Jeśli jednak główny plik strategii informuje, że lokalizacja docelowa nie może udostępniać plików strategii, wywołanie
loadPolicyFile()
nie odnosi skutku, nawet jeśli istnieje plik strategii w tej lokalizacji.
W przypadku implementowania serwera gniazd, jeśli chcemy udostępnić plik strategii gniazd, musimy zdecydować, czy plik strategii będzie udostępniany w tym samym porcie, który przyjmuje połączenia główne, czy też w innym porcie. W każdym przypadku serwer przed wysłaniem odpowiedzi musi poczekać na pierwszą transmisję z klienta.
Gdy program Flash Player żąda pliku strategii, zawsze wysyła następujący ciąg znaków natychmiast po ustanowieniu połączenia:
<policy-file-request/>
Gdy serwer odbierze ten ciąg, może wysłać plik strategii. Żądanie programu Flash Player jest zawsze zakończone bajtem null, a odpowiedź z serwera również musi kończyć się bajtem null.
Nie należy zakładać, że to samo połączenie będzie używane dla żądania pliku strategii i jako połączenie główne. Po przesłaniu pliku strategii należy zamknąć połączenie. Jeśli połączenie nie zostanie zamknięte, program Flash Player zamknie połączenie z plikiem strategii przed ponownym nawiązaniem połączenia w celu zestawienia połączenia głównego.