|
|
|||||
Цитата:
Цитата:
|
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Вот чего-чего, а нулевого байта при ответе в том коде я не вижу. Поэтому файл он, может, и отдает, а вот нулевой байт - нет. Это же подтверждается и средствами объективного контроля:
maxkar@... ~/test $ nc -o hex 5.187.4.231 843 > /dev/null && tail hex < 00000030 63 79 20 53 59 53 54 45 4d 20 22 68 74 74 70 3a # cy SYSTEM "http: < 00000040 2f 2f 77 77 77 2e 6d 61 63 72 6f 6d 65 64 69 61 # //www.macromedia < 00000050 2e 63 6f 6d 2f 78 6d 6c 2f 64 74 64 73 2f 63 72 # .com/xml/dtds/cr < 00000060 6f 73 73 2d 64 6f 6d 61 69 6e 2d 70 6f 6c 69 63 # oss-domain-polic < 00000070 79 2e 64 74 64 22 3e 3c 63 72 6f 73 73 2d 64 6f # y.dtd"><cross-do < 00000080 6d 61 69 6e 2d 70 6f 6c 69 63 79 3e 3c 61 6c 6c # main-policy><all < 00000090 6f 77 2d 61 63 63 65 73 73 2d 66 72 6f 6d 20 64 # ow-access-from d < 000000a0 6f 6d 61 69 6e 3d 22 2a 22 20 74 6f 2d 70 6f 72 # omain="*" to-por < 000000b0 74 73 3d 22 2a 22 2f 3e 3c 2f 63 72 6f 73 73 2d # ts="*"/></cross- < 000000c0 64 6f 6d 61 69 6e 2d 70 6f 6c 69 63 79 3e # domain-policy> Цитата:
Цитата:
Цитата:
Я вам рекомендую сначала разобраться с основами и поставить в качестве policy-file сервера мой. Или мой клиент попробовать с вашим policy-server'ом. И убедиться, что "на нижнем уровне" все работает. А затем выбросить библиотеки и написать свои транспорты для клиента и сервера на базе xmlsocket или socket. Это на самом деле проще и гораздо быстрее, чем разбираться в чужих библиотеках (т.е. если не заработало, то на "написать" времени нужно строго не больше, чем "исправить библиотеку"). Ну или сначала разобраться в основах, а потом смотреть, какие фреймворки/библиотеки можно взять (но это вам уже вряд ли захочется). Или вам так сильно нужно ручное управление proxy (только тогда имеет смысл смотреть что-то готовое)? |
|
|||||
На запрос от клиента <policy-file-request/>, ваш сервер должен отправить в ответ строку вашей политики безопасности. Например такой(с нулевым байтом на конце):
Цитата:
После отправки этого файла, клиент сам разорвет соединение и подключится заново уже полностью работоспособный. Это вроде как все в документации есть. |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
maxkar, спасибо, попробовал использовать ваш клиент:
public function Test() { Security.loadPolicyFile("http://5.187.4.231:8080"); sock = new XMLSocket("5.187.4.231", 8080); sock.addEventListener(Event.CONNECT, connected); sock.addEventListener(DataEvent.DATA, receive); addChild(tf); } private function connected(e : Event) : void { tf.text = "COnnected"; sock.send(<test/>); } private function receive(e : DataEvent) : void { tf.text = e.data.toString(); sock.send(<quit/>); } var chanel = require('socket.io').listen(8080); chanel.set('transports', [ 'flashsocket' ]); chanel.set('flashPolicyServer',true); chanel.set('log level', 2); chanel.sockets.on('connection', function (socket) { console.log('connect'); socket.on('message', function(msg){ console.log(msg); if (msg=='<policy-file-request/>'){ chanel.send("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>"); } }); }); Игнорирование файла политики на "http://5.187.4.231:8080/" target="_blank">http://5.187.4.231:8080/ из-за отсутствия типа содержимого var net = require('net'), sys = require('util'); console.log("Secur server started"); var server = net.createServer(function(stream) { stream.setEncoding('utf8'); stream.addListener('data', function(msg) { if (msg=='<policy-file-request/>'){ var polic = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>" stream.write(polic); console.log('policeSend'); } console.log(msg); }); }); server.listen('8080', '5.187.4.231');
Но коннект все равно не устанавливается. |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Сравните:
Security.loadPolicyFile("xmlsocket://127.0.0.1:3128"); // у меня Security.loadPolicyFile("http://5.187.4.231:8080"); // у вас Цитата:
И проверьте, во всех сообщениях (и на входе, и на выходе) в конце должен быть нулевой байт (\0 или как он в вашем языке записывается). |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
В общем таки добился успешной отправки файла политики и коннекта в лабораторных условиях.
клиент: Security.loadPolicyFile("xmlsocket://5.187.4.231:843"); sock = new XMLSocket("5.187.4.231", 8080); sock.addEventListener(Event.CONNECT, connected); var pf = require('policyfile').createServer(); pf.listen(843, function(){console.log('policeSend')}); var net = require('net'); console.log("Server started"); var server = net.createServer(function(stream) { stream.setEncoding('utf8'); stream.addListener('data', function(msg) { console.log(msg); }); }); server.listen('8080'); Не могу понять почему если с XMLSocket Security.loadPolicyFile("xmlsocket://5.187.4.231:843"); подключение идет номрально, а с FLASHSocket нет, ведь принцип должен быть тот же самый и те же порты. сервер socket.io: var chanel = require('socket.io').listen(8080); chanel.set('transports', [ 'flashsocket' ]); chanel.set('flashPolicyServer',true); chanel.set('log level', 2); chanel.sockets.on('connection', function (socket) { console.log('connect'); socket.on('message', function(msg){ console.log(msg); }); }); |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Цитата:
Использование сторонних библиотек может быть сильно не просто. Его нужно аккуратно продумать. Вот вдруг там где-то внутри в определнном сценарии какие-то баги обнаружатся. Что будете делать? Поменять у вас вроде архитектура так просто не позволяет. Отлаживать? Можно потренироваться уже сейчас . |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Переписывать транспорт конечно вариант, но это уже на крайни случай, и судя по этому, заставить работать их все таки можно:
http://stackoverflow.com/questions/1...93590#14093590 http://stackoverflow.com/questions/1...with-socket-io http://5.187.4.231:8080/socket.io/1/?time=123 не отвечал так как серв был отключен, сейчас ок, возвращает Как выяснилось у socket.io есть директива установки police server port, которая по умолчанию выставлена в 10843, изменил вручную, и теперь сервер сократился до: var chanel = require('socket.io').listen(8080); chanel.set('transports', ['websocket','flashsocket']); chanel.set('flash policy port', 843); chanel.sockets.on('connection', function (socket) { console.log('connect'); }); Просмотрел библиотеки FlashSocket и WebSocket в каждом из них есть запрос фала политик и оба xmlsocket://5.187.4.231:843 правильные. хотя здесь https://github.com/simb/web-socket-js что-то сказано про 10081 порт. |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Так... Возвращаемся к
Цитата:
* Запрос http://5.187.4.231:8080/crossdomain.xml * Запрос на http://.../socket.io/1/?time=... * Запрос на socket policy * Запрос на соединение Пункт 1 выполняется в момент программного запроса из п. 2 (это в коде FlashSocket). Пункт 3 может, выполняется вами вручную или автоматически в результате п. 4. Т.е. без loader/urllloader цепочка дальше не работает. Да, вам нужно два crossdomain. Один выдается по http (на порту 8080, обычным http-server'ом), второй - как socket policy file socket-сервер'ом. Ну и дальше можно обычные соединения отлаживать/тестировать/смотреть. Вообще, попробуйте все-таки сами собрать и подобавлять отладку во FlashSocket (т.е. ответы на IOError/SecurityError). Так будет быстрее. И ошбики будет проще отслеживать (про crossdomain.xml на 8080 я далеко не сразу подумал, а вот с сообщением про security error все бы стало ясно). |
Часовой пояс GMT +4, время: 04:06. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|