myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

> Описание Протокола NMDC, NeoModus Direct Connect Protocol

Setuper
сообщение 16.12.2008, 18:57
Сообщение #21


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Protocol NMDC

Структурированное описание протокола NeoModus Direct Connect (NMDC), под управлением которого на сегодняшний день работает подавляющее большинство хабов. Хотя уже внедряется новый протокол ADC, однако, как говориться, всему своё время.

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


О структуре команд

Все команды протокола начинаются с символа $. Исключение составляет команда сообщения чата, которая должна иметь следующую структуру:
Код
<Ник> Сообщение|
При этом, данный синтаксис команды чата обязателен в направлении клиент -> хаб, в то время, как хаб может отсылать клиенту любые сообщения, не начинающиеся с символа $, и клиент должен принимать такие сообщения, однако обработка таких сообщение не регламентирована протоколом (клиент может отображать такие сообщения как в чате, так и в статусной строке, или же вовсе игнорировать такие сообщения).

Символы-разделители протокола: $, | и пробел. Протокол не имеет экранирующих символов, поэтому для отсылки символов $ и | в параметрах команд нужно использовать их коды: &#36; и &#124;
Строка сообщения разделяется на команды по средствам символа |. Пример трёх команд, отосланных одной строкой:
Код
$Cmd1 параметр|$Cmd2|$Cmd3 параметр1 параметр2$параметр3|



Взаимодействие хаб-клиент


$BadPass
$Close
$ConnectToMe
$ForceMove
$GetINFO
$GetNickList
$GetPass
$Hello
$HubIsFull
$HubName
$HubTopic
$Key
$Kick
$Lock
$LogedIn
$MyINFO
$MyPass
$MultiConnectToMe
$MultiSearch
$NickList
$OpForceMove
$OpList
$Quit
$RevConnectToMe
$Search
$SR
$Supports
$UserCommand
$UserIP
$Version
$ValidateNick
$ValidateDenide


Взаимодействие клиент-клиент

$Cancel
$Canceled
$Direction
$Error
$Failed
$FileLength
$Get
$GetListLen
$Key
$Lock
$MaxedOut
$MyNick
$Ping
$Send
$To


Взаимодействие хаб-хаб

$FeaturedNetworks
$ConnectToMe
$Search
$SR
$Up
$UpToo




Взаимодействие хаб-хаблист

$Key
$Lock
$Supports


Взаимодействие пингер-хаб

$BotINFO
$HubINFO
$Key
$Lock
$Supports


Команды характеристик

$ADCGET / $ADCSND
$BotList
$Capabilities
$FeaturedNetworks
$GetZBlock
$MCTo
$Sending
$UGetBlock
$UGetZBlock
$Z
$ZOn


Разное

TTH
Lock2Key


Известные характеристики

Хаб-Клиент:
BotList
ClientID
Feed
HubTopic
IN
MCTo
NoGetINFO
NoHello
OpPlus
QuickList
TTHSearch
UserCommand
UserIP2
ZLine
ZPipe0

Клиент-Клиент:
ADCGet
BZList
CHUNK
ClientID
GetCID
GetTestZBlock
GetZBlock
MiniSlots
TTHL
TTHF
XmlBZList
ZLIG



Общая (обязательная) последовательность входа на хаб.
"Рукопожатие" между клиентом и хабом.

Общая (обязательная) последовательность входа на хаб
Хаб:
Код
$Lock [Код] Pk=[PrimaryKey]|

Клиент:
Код
$Key [Рассчитанный_ключ]|$ValidateNick [Ник]|

Хаб:
Код
$HubName [Имя_хаба]|$Hello [Ник]|

Клиент:
Код
$Version [Версия]|$GetNickList|$MyINFO [Строка]|

Хаб:
Код
Отсылает список пользователей.


Примечания:
  1. Команда $HubName может "выпадать" из этой последовательности и отсылаться, например, после команды $Lock, или вовсе отсутствовать.
  2. Если в начале параметра команды $Lock присутствует слово EXTENDEDPROTOCOL, то клиент должен отослать на хаб команду с поддерживаемыми им характеристиками $Supports. В ответ хаб должен отослать такую же команду со своими характеристиками. Однако, данный механизм обмена характеристиками фактически является не обязательным.
  3. Также, вне зависимости от данной последовательности, в любом месте входа хаб может отослать клиенту команду чата: "<[Бот_хаба]> Этот хаб работает под управлением...".
  4. При входе, клиент отошлёт команды $Version, $GetNickList и $MyINFO только после того, как получит от хаба команду $Hello [Ник], причём со своим ником, который он отсылал на хаб в команде $ValidateNick. Причем команда $GetNickList может и вовсе не отсылаться клиентом.
  5. Команду $Version клиент может отослать и раньше указанного шага (например, непосредственно после $ValidateNick), однако она должна быть отослана до команды $MyINFO.
  6. При отсылке хабом списка пользователей, хаб руководствуется поддержкой со стороны клиента той или иной характеристики. Подробности см. в описании характеристик NoHello и NoGetINFO.


Вход на пальцах выглядит так: Клиент коннектится, сервер отвечает командой $Lock, что мол я такой-то сервер, на что клиент отвечает: ок раз ты такой-то сервер - вот тебе ключ ($Key) и проверь мой ник ($ValidateNick), сервер проверяет ник и отправляет клиенту приглашение на вход под этим ником ($Hello), на что клиент отправляет на сервер внутреннюю версию ($Version), запрашивает список пользователей ($GetNickList) и отправляет информацию о себе ($MyINFO), а сервер отсылает ему список пользователей хаба.



Последовательность входа на хаб, который поддерживает характеристику QuickList.
Входа на хаб при поддержке характеристики QuickList (быстрый вход)
Хаб:
Код
$Lock EXTENDEDPROTOCOL[Код] Pk=[PrimaryKey]|

Клиент:
Код
$Supports QuickList|$Key [Рассчитанный_ключ]|

Хаб:
Код
$Supports QuickList|

Клиент:
Код
$MyINFO [Строка]|$GetNickList|

Хаб:
Код
Отсылает список пользователей.


См. подробности в характеристике QuickList



Последовательность действий хаба при регистрации в хаб-листе
Последовательность действий хаба при регистрации в хаб-листе
Хаб коннектится к хаб-листу.

Хаб-лист:
Код
$Lock [Код] Pk=[PrimaryKey]|

Хаб:
Код
$Key [Рассчитанный_ключ]|[Имя_хаба]|[Хост_хаба(:порт)]|[Описание_хаба]|[Число_юзеров]|[Текущая_шара]|


Тут хаб выступает в роли клиента. Он коннектится к прописанным в настройках хаб-листам и передаёт им текущую информацию о себе.
Коннект к хаб листу должен производится не чаще чем раз в 15 минут, в противном случае, хаб может быть забанен хаб-листом)).



Последовательность входа на хаб PtokaX
(последовательные команды могут отсылаться одной строкой, разделённой символом | )
Последовательность входа на хаб PtokaX
Хаб -> Клиент: ---> $Lock EXTENDEDPROTOCOL[некий_ключ_хаба] Pk=PtokaX
Клиент -> Хаб: ---> $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 |$Key [ключ_сгенерированный_по_полученному_ключу_хаба]|$ValidateNick [Мой_ник]|
Выполнение скриптовой функции SupportsArrival
Выполнение скриптовой функции KeyArrival (выполнение не происходит, если проверка ключа отключена)
Выполнение скриптовой функции ValidateNickArrival
Хаб -> Клиент: ---> $Supports NoHello|$GetPass|
Клиент -> Хаб: ---> $MyPass [Мой_пароль]|
Выполнение скриптовой функции PasswordArrival
Хаб -> Клиент: ---> $Hello [Мой_ник]|
Клиент -> Хаб: ---> $Version 1,0091|$GetNickList|$MyINFO $ALL [Мой_ник] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
Выполнение скриптовой функции VersionArrival
Выполнение скриптовой функции GetNickListArrival
Выполнение скриптовой функции MyINFOArrival
Хаб -> Клиент: ---> $LogedIn [Мой_ник]|$HubName [Имя_хаба] - [Топик]|<[Бот_хаба]> Этот хаб работает под управлением PtokaX DC Hub ...
Хаб -> Клиент: ---> $ZOn
Хаб -> Клиент: ---> $MyINFO $ALL [Бот_хаба] [Описание]$ $ $[EMail]$0$|$MyINFO $ALL [Ник1] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|$MyINFO $ALL [Ник2] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
...
$MyINFO $ALL [Мой_ник] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|$OpList [Оператор1]$$[Оператор2]$$[Оператор3]$$ ... $$[ОператорN]$$|$UserIP [Ник1] [IP1]$$[Ник2] [IP2]$$ ... $$[НикN] [IPN]$$|
Выполнение скриптовых функций UserConnected, RegConnected и OpConnected


Примечание: Команда $LogedIn отсылается только в случае если у вас есть ключ (операторские права).

Внимание! Последовательность входа указана для одного потока. Для разных потоков она может быть произвольной, поэтому никогда не используйте глобальные таблицы пользователей, дабы сохранить принцип многопоточности.



Последовательность команд при получении списка пользователей (GetNickList) на хабе PtokaX
Последовательность команд при получении списка пользователей (GetNickList) на хабе PtokaX
Клиент -> Хаб: ---> $GetNickList|
Выполнение скриптовой функции GetNickListArrival
Хаб -> Клиент: ---> $MyINFO $ALL [Бот_хаба] [Описание]$ $ $[EMail]$0$
Хаб -> Клиент: ---> $MyINFO $ALL [Ник1] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
Хаб -> Клиент: ---> $MyINFO $ALL [Ник2] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
...
Хаб -> Клиент: ---> $MyINFO $ALL [Мой_ник] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
Хаб -> Клиент: ---> $OpList [Оператор1]$$[Оператор2]$$[Оператор3]$$ ... $$[ОператорN]$$



Последовательность входа на хаб HeX
(последовательные команды могут отсылаться одной строкой, разделённой символом | )
Последовательность входа на хаб HeX
Хаб -> Клиент: ---> $Lock EXTENDEDPROTOCOL[некий_ключ_хаба] Pk=versiunea5.03
Клиент -> Хаб: ---> $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 |$Key [ключ_сгенерированный_по_полученному_ключу_хаба]|$ValidateNick [Мой_ник]|
Хаб -> Клиент: ---> $HubName [Имя_хаба] - [Топик]|$HubTopic [Топик]|<[Бот_хаба]> HeXHub 5.03a Firewall 1.09 Hex Script 1.1.0.2 ...|
Обработка команды $Supports скриптовой функцией OnCommand
Хаб -> Клиент: ---> $Supports UserCommand NoGetINFO NoHello|
Обработка команды $Key скриптовой функцией OnCommand
Обработка команды $ValidateNick скриптовой функцией OnCommand

Хаб -> Клиент: ---> *** Your nickname is already taken by someone else|*** Current nickname: [Мой_ник]_1|*** This nick is also taken...|*** Current nickname: [Мой_ник]_2|<[Бот_хаба]> Your nickname is registered, please enter a password|$GetPass|
Клиент -> Хаб: ---> $MyPass [Мой_пароль]|
Обработка команды $MyPass скриптовой функцией OnCommand
Хаб -> Клиент: ---> $LogedIn [Мой_ник]|$Hello [Мой_ник]|
Клиент -> Хаб: ---> $Version 1,0091|$GetNickList|$MyINFO $ALL [Мой_ник] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
Хаб -> Клиент: ---> $Hello [Мой_ник]|
Обработка команды $Version скриптовой функцией OnCommand
Обработка команды $GetNickList скриптовой функцией OnCommand
Обработка команды $MyINFO скриптовой функцией OnCommand
Хаб -> Клиент: ---> $MyINFO $ALL [Бот_хаба] [Описание]$ $ $[EMail]$0$|$MyINFO $ALL [Ник1] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|$MyINFO $ALL [Ник2] [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|
...
$MyINFO $ALL [Мой_ник]_2 [Описание]<[Клиент] V:[Версия],M:[Режим],H:[Хабы],S:[Слоты]>$[EMail]$[Соедиение][Магический_байт]$ $[Шара]$|$OpList [Оператор1]$$[Оператор2]$$[Оператор3]$$ ... $$[ОператорN]$$|$UserIP [Ник1] [IP1]$$[Ник2] [IP2]$$ ... $$[НикN] [IPN]$$|
Выполнение скриптовой функции OnUserJoined

Примечание: Данный хаб различает вход и переподключение к хабу! Это достигается с помощью задержки в отправлении команды $Quit.


Материал из этой темы перенесён в вики: http://wiki.mydc.ru/Описание_протокола_NMDC

Сообщение отредактировал Setuper - 18.1.2012, 21:48
Go to the top of the page
+Quote Post
4 страниц V  < 1 2 3 4 >  
Начать новую тему
Ответов
Setuper
сообщение 17.12.2008, 17:36
Сообщение #22


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$OpList

Синтаксис:

Код
$OpList [ОПератор1]$$[ОПератор2]$$[ОПератор3]$$ ... $$|


Направление команды:

Хаб ---> Клиент

Описание:

Данная команда используется хабом для отсылки клиентам списка ОПераторов (ники с ключиками). Этот список ограничен и разделён символами "$$".

В старых версиях протокола NMDC команда $OpList является подмножеством команды $NickList.

По протоколу NMDC v1 хаб также включает в команду $OpList всех зарегистрированных на хабе ботов. Современные хабы должны быть наделены способностью как показывать ботов среди ОПераторов, так и не показывать.

Если клиент найдёт в параметрах данной команды свой ник, то он должен включить у себя функции перенаправления и кика пользователей (добавить соответствующие контекстные менюшки).


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 17.12.2008, 17:47
Сообщение #23


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Quit

Синтаксис:

Код
$Quit [Ник]|


Направление команды:

Хаб ---> Клиент
возможен случай: Клиент ---> Хаб

Описание:

Данная команда может отсылаться только хабом для того, чтобы клиент удалил разъединившегося пользователя из своего списка пользователей. Если вы решили написать свой клиент, не посылайте на хаб команду $Quit.
Данная команда показывает, что [Ник] отключился от хаба.

Пример:

Код
$Quit Вася|


Известны случаи, когда данная команда использовалась на хабе. Данная команда отсылалась клиентом на хаб и ник являлся ником клиента - хаб закрывал соединение с клиентом. Реализован этот принцип в Verli хабе.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 17.12.2008, 18:10
Сообщение #24


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$RevConnectToMe

Синтаксис:

Код
$RevConnectToMe [Ник1] [Ник2]|


Направление команды:

Клиент ---> Хаб
Хаб ---> Клиент

Описание:

Клиент посылает данную команду на хаб для того, чтобы попросить пользователя [Ник2] инициализировать соединение с помощью команды $ConnectToMe. Команда $RevConnectToMe отсылается когда клиент не может сам соединиться (находится в пассивном режиме соединения с хабом).

[Ник1] - ник клиента, который просить соединиться с ним (пассивный).
[Ник2] - ник клиента, с которым нужно соединиться (активный).

Примечание:

Данная команда не применима к пассивному пользователю (к клиенту в пассивном режиме). Соединение пассив-пассив невозможно!


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 17.12.2008, 19:24
Сообщение #25


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Search

Синтаксис:

Пользователь в активе:

Код
$Search [IP]:[Порт] [Строка_поиска]


Пользователь в пассиве:

Код
$Search Hub:[Ник] [Строка_поиска]


Направление команды:

Клиент ---> Хаб
Хаб ---> Клиент
Хаб ---> Хаб

Описание:

Данная команда используется для начала поиска файлов на хабе. Формат [Строки_поиска] не зависит от режима подключения клиента (актив, писсив).


[IP] - IP адрес активного пользователя.
[Порт] - UDP порт, который клиент слушает для приёма ответов на запрос от других клиентов.
[Ник] - ник пассивного пользователя.
[Строка_поиска] - строка поиска, которая описывает файл, который ищет клиент. Части этой строки разделяются знаками вопроса ('?'):

[Размер_ограничения]?[Максимальный_размер]?[Размер]?[Тип_данных]?[Поисковый_параметр]

[Размер_ограничения] - принимает значение 'T', если поиск должен быть ограничен максимальным или минимальным размером, иначе 'F'.
[Максимальный_размер] - принимает значение 'F', если [Размер_ограничения] равен 'F' или если размер ограничения устанавливает более низкий предел размера файла, инача 'T'.
[Размер] - минимальный или максимальный размер файла в байтах (в случае если указан [Максимальный_размер]) и если [Размер_ограничения] принимает значение 'T', иначе 0.
[Тип_данных] - ограничение поиска по типу файлов. Данное ограничение принимает одно из следующих целых чисел:
  • 1 для любого типа файлов;
  • 2 для аудио файлов ("mp3", "mp2", "wav", "au", "rm", "mid", "sm");
  • 3 для архивов и сжатых файлов ("zip", "arj", "rar", "lzh", "gz", "z", "arc", "pak");
  • 4 для документов и текстовых файлов ("doc", "txt", "wri", "pdf", "ps", "tex");
  • 5 для выполняемых файлов ("pm", "exe", "bat", "com");
  • 6 для картинок ("gif", "jpg", "jpeg", "bmp", "pcx", "png", "wmf", "psd");
  • 7 для видео ("mpg", "mpeg", "avi", "asf", "mov");
  • 8 для папок;
  • 9 для TTH поиска;
  • 10 для CD/DVD образов.

[Поисковый_параметр] - поисковый параметр определяет совпадения в имени файлов
Если тип поиска установлен в 9, то поисковый параметр должен представлять из себя TTH искомого файла.

Как и во всех сообщениях NMDC, в поисковом параметре следует избегать употребления следующих символов: "$", "|" и "&".
Все пробелы в поисковом параметре заменяются на знак '$'.

После отправки на хаб этого сообщения, хаб должен без изменений переслать это сообщение всем пользователям хаба. Каждый пользователь с одним или более совпадениями должен послать UDP пакет на [IP]:[Порт] в случае активного запроса или на хаб в случае пассивного запроса.

Смотрите описание команды $SR для детального разбора.

Примеры:

Код
$Search 10.10.10.10:412 T?T?500000?1?Gentoo$2005
$Search Hub:Вася T?T?500000?1?Gentoo$2005

$Search 10.10.10.10:3746 F?T?0?9?TTH:TO32WPD6AQE7VA7654HEAM5GKFQGIL7F2BEKFNA
$Search Hub:Пётр F?T?0?9?TTH:TO32WPD6AQE7VA7654HEAM5GKFQGIL7F2BEKFNA


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 19.12.2008, 10:20
Сообщение #26


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$SR

Синтаксис:

Код
$SR [Ник_ответчика] [Результат][0x05][Свободные_слоты]/[Всего_слотов][0x05][Имя_хаба] ([IP_хаба:Порт]){[0x05][Целевой_ник]}|


Направление команды:

Клиент ---> Хаб
Хаб ---> Клиент
Клиент ---> Клиент
Хаб ---> Хаб

Описание:

Данная команда используется для возврата файла или директории, которая соответствует запросу в команде $Search. Все условия, которые находятся в оригинальном запросе, должны находиться в [Результат], и все типы и ограничения, используемые в команде $Search, должны быть выполнены.

[Результат] представляет из себя либо [Имя_файла][0x05][Размер_файла] для поиска по файлам, либо [Директория] для поиска по директориям
[0x05] - это 5-ый ASCII символ (используется в качестве разделителя).

Данная команда посылается клиентом, если у данного клиента нашлось что-то из запроса команды $Search от другого клиента.
Если команда $Search была послана от пассивного пользователя, то команда $SR должна быть возвращена хабу (через TCP). В этом случае, в конец данной команды должно быть дописано [0x05][Целевой_ник]. Перед пересылкой этой команды пользователю, который инициализировал поиск, хаб удаляет данную приписку с разделителем и целевым ником. Если команда $Search была послана от активного пользователя, то команда $SR возвращается на указанный в команде $Search IP адрес и UDP порт.
Параметр [IP_хаба:Порт] нужен только в том случае, если порт хаба не является портом по умолчанию (411).
В UNIX системах в путях к файлу должен встречаться только прямой слеш (/).
DC++ клиент будет отсылать максимум 5 результатов поиска для пассивных пользователей и 10 для активных. Кроме этого, для того, чтобы снизить нагрузку, хаб может сократить количество возвращаемых поисковых запросов.
Для файлов, содержащих TTH, параметр [Имя_хаба] заменяется на TTH:[base32_encoded_tth_hash] (см. TTH)

Примеры:

Ответ на пассивный поиск:

Код
$SR Вася Файл.txt[0x05]437 3/4[0x05]МойХаб (10.10.10.10:411)[0x05]Петя|


Ответ на активный поиск:

Код
$SR Вася Файл.txt[0x05]437 3/4[0x05]МойХаб (10.10.10.10:411)|


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 19.12.2008, 10:39
Сообщение #27


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Supports

Синтаксис:

Код
$Supports [Характеристика1] [Характеристика2] [Характеристика3] ... [ХарактеристикаN] |


Характеристики поддерживаются: DC++ 0.17+ (Клиент - Клиент), DC++ 0.300 (Хаб - Клиент)

Направление команды:

Хаб ---> Клиент
Клиент ---> Хаб
Клиент ---> Клиент
Хаблист ---> Хаб
Хаб ---> Хаблист
Пингер ---> Хаб
Хаб ---> Пингер

Описание:

Данная команда используется для определения характеристик. Чтобы указать на то, что сервер имеет хотя бы одну характеристику, он должен отослать в начале команды $Lock следующую фразу EXTENDEDPROTOCOL. Если вторая сторона также поддерживает некоторые характеристики, то она также отсылает $Supports. Эта команда обязательно предшествует команде $Key.

Замечания:

• EXTENDEDPROTOCOL не должна отсылаться, если сервер не поддерживает никакие характеристики
• Пустая команда $Supports не допустима
• Пробелы в именах характеристик также не допустимы
• Для характеристик клиента, имя дополнения должно быть таким же как и имя команды этого дополнения.
• Хабы обычно хотят получить команду $Supports до команд $Key и $ValidateNick. Итак, последовательность должна быть такова:
Код
$Supports ..|$Key ..|$ValidateNick ..|


Характеристики для связи Клиент - Хаб:

BotList
ClientID
Feed
HubTopic
IN
MCTo
NoGetINFO
NoHello
OpPlus
QuickList
TTHSearch
UserCommand
UserIP2
ZLine
ZPipe0


Характеристики для связи Клиент - Клиент:

ADCGet
BZList
CHUNK
ClientID
GetCID
GetTestZBlock
GetZBlock
MiniSlots
TTHL
TTHF
XmlBZList
ZLIG


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 1:50
Сообщение #28


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$UserCommand

Направление команды:

Хаб ---> Клиент

Синтаксис:

Код
$UserCommand [Тип] [Контекст] [Детали]||




[Тип] - положительное, целое число, описывающее тип команды:
0 - разделитель
1 - raw команда
2 - raw команда с ограничением на единственный ник %[nick]
255 - очистка команд
[Контекст] - целое число, регулирующее где показывать контекстные менюшки:
[1] - Контекстное меню хаба (доступно по клику на вкладке хаба). Примеры: просмотр правил, смена пароля. Эта команда может содержать параметр %[nick]. Вместо этого следует использовать переменную %[mynick] или %[line:blah].
[2] - Контекстное меню юзера (доступно по клику на любого юзера). Примеры: показ статистики юзера, проверка бана юзера. Эта команда может содержать переменные: %[nick], %[mynick] и %[line:blah].
[4] - Контекстное меню поиска. Пример: сообщить о битом файле. Эта команда может содержать специфические аргументы ника и файла.
[8] - Конкестное меню файл-листа. Пример: сообщение о найденном итом файле у юзера в списке файлов. Эта команда может содержать специфические аргументы ника и файла.
Замечание: этот контекст является новым в DC++ 0.669

[Детали] - этот параметр зависит от параметра [Тип]
[Тип] = 0 (разделитель) и [Тип] = 255 (очистка) не должны содержать параметра [Детали]
[Тип] = 1 (raw) использует в качестве деталей [Заголовок]$[Команда]
[Заголовок] - это название менюшки. Менюшка может быть составной, то есть содержать подменюшки. Для построения подменюшки используется обратный слеш (\). Например, [Подменю]\[Заголовок]. Степень вложенности подменюшек может быть любой.

Более высокие числа зарезервированы для дальнейшего использования.


Эскейп последовательности:
Если в меню используются знаки $, | и &, то их необходимо заменить на кодовые аналоги (аналоги html). Соответственно $ | и &

Как и все команды NMDC, данная команда разделяется от других знаком |.


Контекст:

Контекстное число - это бинарный флаг, который может быть составлен из других чисел, например, меню юзера и меню поиска вместе дадут (2 | 4 = 6). То есть для того, чтобы менюшка появилась в меню юзера и в меню поиска следует указывать контекст равный шести.


Детали:

Разделитель (вертикальная черта):

Код
$UserCommand 0 [Контекст] |


После [Контекста] и перед символом | может находиться некий текст, который в любом случае будет игнорироваться

Raw команды:

Код
$UserCommand 1 [Контекст] [Заголовок]$[raw]||


Команда добавляет raw пункт меню с заголовком [Заголовок] и raw командой [raw]. Эта команда должна оканчиваться на |, и если этого символа нет, то она отвергается.

Raw команда с ограничением на единственный ник:

Код
$UserCommand 2 [Контекст] [Заголовок]$[raw]||


Тоже самое, что и в предыдущем случае, но эта команда работает одна на один ник. Это должно помешать использованию массовой рассылки.

Очистка меню:

Код
$UserCommand 255 [Контекст] |


Команда стирает все менюшки из указанного контекста и ниже. То есть, например, 7 - сотрёт все менюшки с контекстами 1,2 и 4.

Примеры:

Код
$UserCommand 2 6 Кик$$To: %[nick] From: %[mynick] $<%[mynick]> You are being kicked====|$Kick %[nick]||


Эта команда отсылает в приват сообщение "You are being kicked====" для ника, и отправляет команду $Kick. Менюшки будут в поиске и меню юзера. Raw команда с ограничением на единственный ник не позволит сделать множественный кик.

Код
$UserCommand 255 1 |


Команда удалить все менюшки из контекстного меню хаба (вкладка хаба).

На поддержку данной команды может указывать наличие характеристики UserCommand в команде $Supports. Однако, из-за большой распространённости данной команды наличие этой характеристики в команде $Supports не обязательно.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 2:10
Сообщение #29


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$UserIP

Направление команды:

Хаб ---> Клиент
Клиент ---> Хаб

Синтаксис:

Запрос со стороны клиента:

Код
$UserIP [Ник1]$$[Ник2]$$[Ник3]$$ ... $$[НикN]$$|


Ответ со стороны сервера:

Код
$UserIP [Ник1] [IP1]$$[Ник2] [IP2]$$[Ник3] [IP3]$$ ... $$[НикN] [IPN]$$|


Описание:

Эта команда посылается клиентом на хаб, для того, чтобы получить ip адрес одного или более пользователей. Все пользователи разделены в команде знаками $$ (также как и в командах $NickList и $OpList). IP адрес, посылаемый хабом, должен быть реальным для хаба удалённым IP адресом, и этот IP адрес может отличаться от IP адреса, посылаемого в команде $ConnectToMe (потому что клиент может быть подключен к хабу напрямую, а между вторым клиентом и данным клиентом может находится маршрутизатор, который и сменит ip адрес в случае использования команды $ConnectToMe). DC++ не просит свой собственный IP адрес. Хабы, поддерживающие расширение протокола UserIP2 (UserIP v2), должны автоматически отсылать собственный IP клиента при входе на хаб.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 2:23
Сообщение #30


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Version

Направление команды:

Клиент ---> Хаб

Синтаксис:

Код
$Version [Версия]|


Описание:

Команда, содержащая версию NMDC протокола клиента.
Эта команда должна быть послана клиентом на хаб после того, как хаб пошлёт клиенту команду $Hello.

Последняя 1.x версия NMDC была 1.0091. Используется альтернативный десятичный разделитель (,). Поэтому, DC++ использует номер версии в качестве числа 1,0091 не зависимый от местоположения компьютера.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 2:31
Сообщение #31


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$ValidateNick

Синтаксис:

Код
$ValidateNick [Ник]|


Направление команды:

Клиент ---> Хаб

Описание:

Эта команда является частью рукопожатия между клиентом и хабом. Она посылается клиентом на хаб после команды $Key. Она определяет ник [Ник], который вы хотите использовать на хабе.

Внимание!
По протоколу ник не должен содержать символы: $ | и пробел.
Клиент, до входа на хаб, может преобразовывать все пробелы на нижние подчёркивания, и, таким образом, продолжать использование данного модифицированного ника.

Смотрите также:

$HubIsFull, когда хаб полон
$ValidateDenide, когда ник уже используется
$GetPass, когда для ника запрашивается пароль
$Hello, когда ник принят


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 2:43
Сообщение #32


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$ValidateDenide

Синтаксис:

Код
$ValidateDenide [Ник]|


Направление команды:

Хаб ---> Клиент

Описание:

Эта команда является частью рукопожатия между клиентом и хабом. Хаб отправит эту команду клиенту в ответ на команду $ValidateNick, если такой ник уже используется на хабе, или ник совпадает с зарезервированным ником (таким как "Hub-Security").

[Ник] - это отвергнутый ник.
После того как эта команда придёт к клиенту клиент сгенерирует сообщение "Your nick was already taken (Ваш ник уже используется)" (содержание этого сообщения, вообще говоря, настраивается в клиенте).

Замечание:
Обратите внимание на название команды: $ValidateDenide, а не $ValidateDenied, как казалось бы должно быть!


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 13:22
Сообщение #33


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Cancel

Синтаксис:

Код
$Cancel


Направление команды:

Клиент ---> Клиент

Описание:

Скачивающий клиент может отменить скачку с некоторых клиентов (версии NMDC Windows по крайней мере). Это делается с помощью отсылки команды $Cancel (без символа | на конце!).

В свою очередь отдающий клиент при получении этой команды должен закрыть поток и отослать в ответ команду $Canceled (также без символа | на конце). Следующий пример показывает как это работает. D - скачивающий клиент, U - отдающий клиент.

Цитата
D>U: $Send|
U>D: файловый поток (D сохраняет куски файла на диск)
D>U: $Cancel (D прекращает сохранять на диск и ожидает команду $Canceled)
U>D: отдача может продолжаться, однако она уже будет игнорироваться клиентом D
U>D: $Canceled


Данная команда поддерживается только в версиях NMDC 1.x. Mac и Windows NMDC 2.x версии не могут отменить передачу как это делает NMDC 1.x. DC++ никогда не поддерживал команду $Cancel или $Canceled.

Смотрите также описание команды $Canceled


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 13:35
Сообщение #34


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Canceled

Синтаксис:

Код
$Canceled


Направление команды:

Клиент ---> Клиент

Описание:

Данная команда отсылается клиентом в ответ на команду $Cancel другого клиента. Смотрите описание команды $Cancel для более детального вникания. Следует отметить орфографию написания команды $Canceled, в отличии от хорошо известного слова "Cancelled."


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 14:11
Сообщение #35


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Direction

Синтаксис:

Код
$Direction [Направление] [Номер]|


Направление команды:

Клиент ---> Клиент

Описание:

Эта команда отсылается в ответ на команду $Key. Команда решает какая сторона будет скачивать.

[Направление] - данный параметр может принимать значения "Upload" или "Download". Параметр принимает значение "Upload" только в случае если ваш клиент ничего не хочет скачать с соединяемого пользователя.
[Номер] - это случайное число. Когда оба клиента хотят скачивать друг у друга, первым начинает скачивать тот, у кого это число выше. Если эти числа равны, то соединение закрывается.

Специфичность:

Максимальное значение параметра [Номер] - 0x7FFF. NMDC должен разорвать соединение, если отсылаемое число вдруг оказалось больше максимального.

DC++ может не посылать эту команду после команды $Lock, если в команде $Lock встретилось значение EXTENDED. Смотрите описание команды $Supports.

У DC++ клиентов есть следующий баг:
У клиента A ноль свободных слотов, у клиента B есть свободные слоты. Клиент B хочет скачать у A файлы, клиент A также хочет скачать у B некоторые файлы.
Если клиент A хочет получить что-то от клиента B и он посылает случайное число, клиент B не может получить слот, потому что их нет у клиента A и тогда в статусной строке появляется надпись "Соединение...". Решение этой проблемы предложено на страницах обсуждения клиента. Выход из этой ситуации осуществляется отправкой всё большего и большего случайного числа, пока не освободится свободный слот и не установится соединение.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 14:23
Сообщение #36


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Error

Синтаксис:

Код
$Error [Сообщение]|


Направление команды:

Клиент ---> Клиент

Описание:

Эта команда отсылается когда возникает ошибка.

[Сообщение] - это строка, описывающая ошибку. Наиболее распространённая ошибка "File Not Available" (Файл не доступен), возвращается когда у запрошенного клиента не оказалось нужного файла (хотя он раньше у него был). Если вы пишете своего клиента, то учтите, что реализация этой строки может привести к несовместимости.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 14:30
Сообщение #37


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Failed

Синтаксис:

Код
$Failed [Сообщение]|


Направление команды:

Клиент ---> Клиент

Описание:

Эта команда является командой DC++ дополнительных характеристик. Отсылается в ответ на команду $GetZBlock, $UGetBlock, или $UGetZBlock. Одним из значений параметра [Сообщение] может быть значение "File Not Available" (Файл не найден).


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 14:35
Сообщение #38


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$FileLength

Синтаксис:

Код
$FileLength [Размер_файла]|


Направление команды:

Клиент ---> Клиент

Описание:

Данная команда отсылается отдающим клиентом скачивающему клиенту в ответ на команду $Get. Единственным параметром является размер скачиваемого файла в байтах.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 14:49
Сообщение #39


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$Get

Синтаксис:

Код
$Get [Файл]$[Число]|


Направление команды:

Клиент ---> Клиент

Описание:

Данная команда используется для инициализации загрузки нужного файла. Клиент как бы просит у другого клиента файл.

[Файл] - это полное имя файла и путь к нему в соответствие с указанным в команде $SR или в файл-листе.
[Число] - начальная точка загрузки (начинается с 1, а не с 0)

Команда $Error с параметром "File Not Found" посылается когда файл не доступен. NMDC разъединяет пользователя если в запросе не указана директория. (то есть клиент отсылает команду $Error в ответ на команду "$Get не_существующая_директория\не_существующий_файл$1|" и разъединяет в ответ на команду "$Get не_существующий_файл$1|")

Когда файл доступен, источник файла отсылает команду $FileLength.

Для извлечения файл-листа служит команда:
Код
$Get MyList.DcLst$1|


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 15:01
Сообщение #40


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$GetListLen

Синтаксис:

Код
$GetListLen|


Направление команды:

Клиент ---> Клиент

Описание:

Старая команда.

Данная команда используется для того, чтобы получит размер файл-листа стиля DcLst удалённого пользователя. Удалённый пользователь в ответ отправит команду $ListLen.

Однако эта команда давно исключена из протокола. Начиная с версии 0.69, DC++ больше не генерирует списки стиля DcLst.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 20.12.2008, 15:06
Сообщение #41


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




$MaxedOut

Синтаксис:

Код
$MaxedOut|


Направление команды:

Клиент ---> Клиент

Описание:

Данная команда отсылается клиентом, когда у него нету свободных слотов.


Спасибо сказали:
Go to the top of the page
+Quote Post

4 страниц V  < 1 2 3 4 >
Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Описание протокола DC
Для созадния PHP клиента-"клиента"
7 Ацкий Слон 15 671 25.6.2020, 21:37 Посл. сообщение: Alexey
No New Posts Расширения протокола
Обсуждение новых расширений протокола
2 alex82 7 321 11.1.2017, 16:41 Посл. сообщение: PPA
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 30 046 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts От: вопрос по NMDC.
От темы с ID: 4932
0 MIKHAIL 5 569 25.1.2013, 19:48 Посл. сообщение: MIKHAIL
No New Posts вопрос по NMDC.
.
6 Lamo 13 434 29.5.2012, 19:35 Посл. сообщение: Lamo
No new Topic has attachmentsПротокол IPv6 в протоколе NMDC
Спецификация и тестирование IPv6 в NMDC
109 gif-t 96 747 26.2.2012, 10:12 Посл. сообщение: AMD
No New Posts NMDC Extensions
Расширения и новые команды NMDC протокола
10 Meloun 18 499 19.2.2012, 16:39 Посл. сообщение: gif-t
No New Posts От: NMDC Extensions
От темы с ID: 5095
0 Артём 5 638 4.1.2012, 18:56 Посл. сообщение: Артём
No New Posts Поддержка сетевого протокола SCTP
2 CSRedRat 7 011 30.12.2011, 14:57 Посл. сообщение: pro
No new ВАЖНО: Topic has attachmentsОписание Eximius и публикация новых версий
Eximius
14 Saymon21 23 340 2.10.2011, 16:59 Посл. сообщение: Артём
No new Topic has attachmentsПингер NMDC-хабов
Ударим опенсорсом по нездоровой шняге
23 alex82 38 990 11.4.2011, 18:12 Посл. сообщение: alex82
No New Posts От: Пингер NMDC-хабов
От темы с ID: 4787
1 Invisible 6 789 4.4.2011, 1:10 Посл. сообщение: EvilNico
Closed ВАЖНО: Описание Протокола ADC
Advanced Direct Connect Protocol
31 Setuper 76 729 14.3.2011, 15:15 Посл. сообщение: Setuper
No new Скачивание файл-листа, nmdc
Последовательность команд
16 HackFresse 26 230 3.11.2010, 12:48 Посл. сообщение: Atlant
No New Posts Описание
3 denis 9 414 13.2.2010, 14:27 Посл. сообщение: Артём

 



RSS Сейчас: 26.12.2024, 22:51