[Remoteconsole] Question about proxy
Anton Paymyshev
toxe at gorodok.net
Wed Nov 16 23:04:34 NOVT 2005
On Wed, 16 Nov 2005 18:04:10 +0600, Dmitri Korolkov <kel at gorodok.net>
wrote:
> Здравствуй, Антон
> По предыдущему багу все понял.
> Возникл вопрос: как подключаться через прокси сервер? Предполагаю, что
> примерно так:
> new_p_socket = new cProxySocket(адрес прокси сервера);
> new_p_socket->connect(адрес relay-я);
> а потом как с обычным соединением. Я прав?
> Корольков Дмитрий
>
> _______________________________________________
> Remoteconsole mailing list
> Remoteconsole at swsoft.nsu.ru
> http://swsoft.nsu.ru/mailman/listinfo/remoteconsole
Здравствуй, Дмитрий
Небольшой экскурс в код.
В реализации этого протокола есть такой класс как cPSocket - класс
реализующий интерфейс соединения(iSocket) и имеющий так называемый
"транспортный уровень", то есть это некая обертка одного соединения воrруг
другого. Далее есть класс cActiveSocket - в принципе тот же cPSocket, но
он имеет связанный с ним таймер и подразумевается, что все его методы
могут вызываться из разных потоков(поэтому код всех функций защищен
мутексами). cPrpSocket - то же самое, что и cActiveSocket но при создании
инициализируется cPrpController'ом.
По поводу соединения с пркоси.
В конструкторе cPrpController'a есть такой аргумент как транспортный
уровень. В примерах в качестве значения передается NULL, поэтому в
качестве транспортного уровня в конструкторе cPSocket создается простой
cSocket. Но в качестве значения аргумента тр. у-ня можно передать уже
созданный объект класса реализующего iSocket - cProxySocket. Далее когда
произойдет вызов connect у cPrpSocket'а он попытается сначала соеденить
свой "транспортный уровень"(здесь соединиться с прокси и послать запрос),
а затем начнет инициацию PRP протокола поверх созданного соединения.
Итак:
Forw = new BAM::cPrpSocket(T, lm, BAM::cPacket((BAM::byte*)argv[2],
strlen(argv[2])), (BAM::word)atoi(argv[3]), BAM::Prp_Socket_Client);
где T инциализировать как:
T = new cProxySocket(.....);
Ну вроде все. Надеюсь понятно :)
More information about the Remoteconsole
mailing list