![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Добрый вечер! Стоит задача разработать онлайн чат для сайта. Пребегли к помощи бинарных сокетов. Но в флеше нужно дать отачу файла безопасности, дабы не было ошибки "[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]"
Вот сам файл, написанный на perl: #!/usr/bin/perl
#
# policyd.pl
# Simple socket policy file server
#
# Usage: policyd.pl [-port=N] -file=FILE
# Logs to stdout
#
use strict;
use Socket;
my $NULLBYTE = pack( 'c', 0 );
my $port = 843;
my $filePath;
my $content;
### READ ARGS
while ( my $arg = shift @ARGV )
{
if ( $arg =~ m/^--port=(\d+)$/ )
{
$port = $1;
}
elsif ( $arg =~ m/^--file=(.*)/ )
{
$filePath = $1;
}
}
unless ( $filePath )
{
die "Usage: policyd.pl [--port=N] --file=FILE\n";
}
### READ FILE
-f $filePath or die "No such file: '$filePath'\n";
-s $filePath < 10_000 or die "File probably too large to be a policy file: '$filePath'\n";
local $/ = undef;
open POLICYFILE, "<$filePath" or die "Can't open '$filePath': $!\n";
$content = <POLICYFILE>;
close POLICYFILE;
$content =~ m/cross-domain-policy/ or die "Not a valid policy file: '$filePath'\n";
### BEGIN LISTENING
socket( LISTENSOCK, PF_INET, SOCK_STREAM, getprotobyname( 'tcp' ) ) or die "socket() error: $!";
setsockopt( LISTENSOCK, SOL_SOCKET, SO_REUSEADDR, pack( 'l', 1 ) ) or die "setsockopt() error: $!";
bind( LISTENSOCK, sockaddr_in( $port, INADDR_ANY ) ) or die "bind() error: $!";
listen( LISTENSOCK, SOMAXCONN ) or die "listen() error: $!";
print STDOUT "\nListening on port $port\n\n";
### HANDLE CONNECTIONS
while ( my $clientAddr = accept( CONNSOCK, LISTENSOCK ) )
{
my ( $clientPort, $clientIp ) = sockaddr_in( $clientAddr );
my $clientIpStr = inet_ntoa( $clientIp );
print STDOUT "Connection from $clientIpStr:$clientPort\n";
local $/ = $NULLBYTE;
my $request = <CONNSOCK>;
chomp $request;
if ( $request eq '<policy-file-request/>' )
{
print STDOUT "Valid request received\n";
}
else
{
print STDOUT "Unrecognized request: $request\n\n";
close CONNSOCK;
next;
}
print CONNSOCK $content;
print CONNSOCK $NULLBYTE;
close CONNSOCK;
print STDOUT "Sent policy file\n\n";
}
# End of file.
|
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Это он и есть
|
|
|||||
|
Это не он. Кто вообще писал этот скрипт?
В перл не силен, но тут и перл знать не надо, чтобы понять, что ссылка на файл политик должна выделяться из переданных аргументов с помощью регулярного выражения вот здесь: Значит сам файл должен физически храниться в какой-то директории.
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
listener
|
Приведенный перл-скрипт не что иное, как реализация на перле простейшего сокет-сервера (вполне себе достойная реализация, нужно отметить).
При запуске этого скрипта на сервере создается сокет, слушающий определенный порт (843 по умолчанию) и при коннекте на него клиенту отдается содержимое файла политик безопасности. Т.е. что нужно: - создать собственно сам файл политик (формат файла см. в справке адоба) - положить этот файл в какую-либо директорию на сервере - запустить на сервере скрипт "policyd.pl --port=843 --file=<путь_к _файлу_политик>" и убедиться, что запустился он без ошибок - и только после этого пытаться запустить флешку на клиенте Полезно в момент запуска флешки на клиенте смотреть на сервере консольный вывод запущенного скрипта. |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Вы имеете ввиду вот этот файл?
|
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Значить файл есть. Почему тогда есть ошибка? Может для ответа нужна дополнительная информация - спрашивайте, всё расскажу.
|
|
|||||
|
Расставьте промежуточный вывод. Проверьте записывается ли содержимое этого файла в переменную. И, кстати, флешплеер точно стучится туда с запросом файла политик?
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
При локальном запуске этой ошибки нет. Только на сервере. Значит ли это, что на сервере не хватает какой-то программы?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|