LINUX.ORG.RU

[Protocol] Direct Connect

 


0

0

Кто-нибудь занимался?.
Не могу понять один момент:
Пример из документации аплоада файла:

	Client <-> Client Communication in DC. 11-05-2002. By aDe 
	---------------------------------------------------------- 

	ACTIVE FILE DOWNLOAD 
	---------------------- 
	D = downloader 
	U = uploader 
	H = hub 

	D>H: $ConnectToMe <U's username> <D's IP and port>|
	H>U: $ConnectToMe <U's username> <D's IP and port>|
	U>D: Connection
	U>D: $MyNick <U's nick>|$Lock <new lock with pk>|
	D>U: $MyNick <D's nick>|$Lock <new lock with pk>|$Direction Upload <anumber>|$Key <key for U's lock>|
	U>D: $Direction Download <anumber>|$Key <key for D's lock>|
	D>U: $Get <filepath + filename in exact case>$<start at byte (1=beginning of file)>|
	U>D: $FileLength <length of the requested file>|
	D>U: $Send|
	U>D: Data, in many chunks.
	D>U: $Send|       <- when 40906 bytes are sent, ask for more


У меня получается:

$ConnectToMe botnick 92.125.195.196:31333
Creating Upload Connection to addr 92.125.195.196:31333
92.125.195.196
Localhost connection
#>>>>> HERE <<<<<<#

>>$MyNick botnick|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC pk=1024|
<<$MyNick n0uk|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.698ABCABC|$Supports MiniSlots XmlBZList ADCGet TTHL TTHF GetZBlock ZLIG |$Direction Download 6172|$Key ����A ѱ���0�0 0 0 0 0 0|
DLOCK IS: (EXTENDEDPROTOCOLABCABCABCABCABCABC)
>>$Direction Download 6172|$Key ����A ѱ���0�0 0 0 0 0 0|
<<

Вот в этом месте -- клиент перестает отвечать, когда исходя из документации должен сказать "$Get блаблабла"

(>>) - отправляю я
(<<) - приходит мне

Что я упустил?

Не уверен, что тут быстро ответят спецы по DC, т.ч. не побрезгуй мнением прохожего :)

Не понятно, что именно ты хочешь - upload или download? На словах ты пишешь про аплоад, а мануал привёл для active download. Не знаком с DC, но здравый смысл подсказывает, что это разные операции - в одном случае U связывается с D и отправляет файл, в другом - D связывается с U и скачивает файл с него. Инициатор операции разный, и именно инициатор знает, что собственно надо.

Связанный с этим вопрос - откуда вообще при аплоаде D может узнать имя файла, который ты хотел ему передать?

alexsaa
()

Вероятно ключ неправильно генерите. Вот такой правильный: ÑÀ° A ѱ±ÀÀ0Ð0 0 0 0 0 0

А что такое дисишное пишете?

anonymous
()
Ответ на: комментарий от alexsaa

>Не уверен, что тут быстро ответят спецы по DC, т.ч. не побрезгуй мнением прохожего :)

Не понятно, что именно ты хочешь - upload или download? На словах ты пишешь про аплоад, а мануал привёл для active download. Не знаком с DC, но здравый смысл подсказывает, что это разные операции - в одном случае U связывается с D и отправляет файл, в другом - D связывается с U и скачивает файл с него. Инициатор операции разный, и именно инициатор знает, что собственно надо.

Связанный с этим вопрос - откуда вообще при аплоаде D может узнать имя файла, который ты хотел ему передать?
---------
Я из linuxdcpp (n0uk) пытаюсь скачать у программы (botnick) файл-лист.
То есть,в linuxdcpp жму кнопку, скачать файллист у botnick, и linuxdcpp шлет мне через хаб свой ip:port в команде $ConnectToMe.
Я (программа botnick) соединяюсь к нему, шлю ему $MyNick|$Lock. Он отвечает мне ключем, локом, и $Direction. После этого мои ответы он не воспринимает правильно, и после ответа с ключем на его лок, и дирекшеном Upload, он дисконнектится (linuxdcpp).

nnkd
() автор топика
Ответ на: комментарий от anonymous

Тысяча чертей.(с). А я так понял, что я ему его должен вернуть.
Спасибо, сейчас проверю.
Не могли бы вы сразу сказать, откуда эта строчка?. Документации по протоколу почти ноль нашел.

nnkd
() автор топика
Ответ на: комментарий от anonymous

Ключ -- правильный, я сделал такой же лок, и шлю ему его же ключ, ибо думал проблема в этом.
>А что такое дисишное пишете?
Пока либу дисишную на пайтоне.

nnkd
() автор топика
Ответ на: комментарий от alexsaa

А про схему -- там или она через не здравый смысл, или я не понял.
В смысле, если у меня кто-то хочет что-то скачать, я должен с ним соединиться и он мне скажет что ему нужно, я ему отдам.
D -- может узнать имя файла на моем пк, после операции поиска, или если скачает у меня MyList.dclst и посмотрит в нем все возможные файлы.

nnkd
() автор топика
Ответ на: комментарий от nnkd

Теперь понял, что хочешь сказать. D хочет скачать у U файл. Устанавливает соединение, здоровается, но почему-то запрос get так и не подаёт. Так что со здравым смыслом больше проблем не вижу, настораживает только то, что оба ключа почему-то оказались равны, хотя в приведённом примере документации эти ключи даже называются по-разному. Может, второй ключ сгенерировать случайно?

alexsaa
()

На первый взгляд, действительно, оба клиента хотят скачивать (везде $Download) и если числа разные, то оба дисконнектятся.

Во-вторых, нужно ещё отправлять $Supports, если у обоих клиентов в $Lock написано EXTENDEDPROTOCOL.

Одно время я писал либу на C для Direct Connect. Но абсолютная убогость протокола в конце-концов меня взбесила и я на это дело забил. В принципе, код находится вот тут: http://tools.assembla.com/dcengine/wiki Если он вам как-то поможет, то буду только рад. Вам, скорее всего, нужен файл /lib/dcengine_user.c Помнится, там файлы скачивались, хотя абсолютно уверен быть не могу. Да и вообще, я уже плохо помню, в каком состоянии там всё находится. И более заниматься этим не собираюсь. :)

По поводу документации... На сайту DC++ раньше было неплохое вики с описанием протокола. Только сайт заддосили и его вырубили. В принципе, если стукнуться на оффициальный хаб и попросить доступ к вики (ну или дамп), то могут помочь. Мне помогли.

Успехов в этом нелегком деле.

ptomaine
()
Ответ на: комментарий от ptomaine

Спасибо большое за код, посмотрю. А про вики -- попробую к ним постучаться.

nnkd
() автор топика
Ответ на: комментарий от ptomaine

>В принципе, если стукнуться на оффициальный хаб и попросить доступ к вики (ну или дамп), то могут помочь. Мне помогли.
Нашел только контакт некоего Todd Pederzani, он сказал что выключил машину с локальной копией вики на целое лето (ибо тепло и шумно) и навряд ли включит когда-нибудь, т.к. бросает это дело.
Эх. Придется ковыряться в логах тисипидампа и чужих сорцах.

nnkd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.