Flash SecurityDomain, настройки P2P и умножение swfs - PullRequest
2 голосов
/ 19 марта 2012

У меня есть два swfs:

  1. приложение SWF
  2. p2p клиент SWF, который позволяет загружать данные с использованием репликации rtmfp технология (через службу цирруса)

Основная идея состоит в том, чтобы иметь один загрузчик p2p в определенном домене, который сможет работать в сети p2p, не запрашивая много раз разрешения для каждого домена, например:

p2p-клиент загружает двоичные данные по запросу, содержание, на самом деле, не имеет значения, я верю.

Итак, я загружаю p2pclient swf, используя следующий класс ( app.swf )

public class ClientLoader {

    // .. some code

    public function load(cb:Function, err:Function):void
    {
        _cb = cb;
        _err = err;

        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onLoaded);
        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _onIoError);
        loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _onSecurityError);
        // note that context has neither application domain nor security domain
        loader.load(new URLRequest(_url), new LoaderContext());
    }

    private function _onLoaded(e:Event):void
    {
        trace("Loaded. Connecting to the p2p network...");

        _client = e.target.content;
        _client.addEventListener(Event.CONNECT, _onClientReady);
        _client.connect();
    }

    private function _onClientReady(e:Event):void
    {
        _cb(_client);
    }

}
}

Сам p2pclient ( p2pcli.swf ):

public class P2P extends Sprite
{
    public function SqP2P() {
        Security.allowDomain("*");
    }

    public function connect():void
    {
        _connection = new NetConnection();
        _connection.addEventListener(NetStatusEvent.NET_STATUS, _netStatus);
        _connection.connect(CIRRUS_ADDRESS, CIRRUS_KEY);

        // after successful connect this method called
        _loadGroup();
    }

    private method _loadGroup():void
    {
        var spec:GroupSpecifier = new GroupSpecifier(_name);
        spec.serverChannelEnabled = true;
        spec.objectReplicationEnabled = true;

        _group = new NetGroup(connection, spec.groupspecWithAuthorizations());
        _group.addEventListener(NetStatusEvent.NET_STATUS, _netStatus);
    }

    private function _netStatus(event:NetStatusEvent):void
    {
        trace("NetStatusEvent:", event.info.code);
    }

}

Но похоже, что Flash Player игнорирует сеанс безопасности и пытается сохранить настройки всплывающего окна для домена, к которому принадлежит app.swf, но не для домена p2pcli.swf. Почему?!

p2p settings box

У меня абсолютно такой же код, но p2pcli.swf заменен на swf, который хранит данные в Local Shared Object, и все domain1-2-N.com имеют к нему доступ.

Есть идеи?

Я знаю, мой английский дерьмо: (

1 Ответ

1 голос
/ 22 марта 2012

Я действительно не совсем уверен, но я выложу свой ответ там, если это будет полезно.

Исходя из общего назначения таких сообщений безопасности, я не совсем уверен, что вы МОЖЕТЕ удержать этот диалог от показа.В некоторых случаях я уверен, что одноранговая сеть может быть угрозой безопасности для некоторых людей (и в любом случае она использует их пропускную способность). Настройки для включения и выключения этого уведомления на стороне пользователя, в диалоге настроек FlashПанель управления в Windows 7 ...), что намекает на то, что она встроена в платформу Flash.

Конечно, поскольку я больше специалист по Adobe AIR, я могу ошибаться ..Ради вашего проекта я искренне надеюсь, что Я ЕСМЬ!

И, к сведению, ваш английский был почти идеальным.Я подправил один абзац для ясности, но в остальном на месте.: D

...