myDC.ru

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

 

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

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


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 > »   
Начать новую тему
Ответов
Setuper
сообщение 16.12.2008, 19:19
Сообщение #2


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

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




$BadPass

Синтаксис:

Код
$BadPass|


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

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

Описание:

Эту команду отсылает хаб клиенту, который коннектится. Команда посылается, если клиент отослал хабу неправильный(некорректный) пароль в ответ на посланную хабом команду $GetPass. После отсылки этой команды хаб закрывает соединение с этим клиентом, или даже банит его.


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


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

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




$BotList

Синтаксис:

Код
$BotList [Бот1]$$[Бот2]$$[Бот3]$$ ... $$|


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

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

Описание:

Данная команда используется хабом для передачи клиенту списка ботов. Этот список ограничен и разделён символами "$$". Клиенты BDCH, BlackDC и ZionPlusPlus поддерживают эту команду для того чтобы различать операторов и ботов. Однако данная команда не является распространённой и не поддерживается большинством хабов.

На поддержку данной команды указывает наличие характеристики BotList в команде $Supports.


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


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

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




$Close

Синтаксис:

Код
$Close [Ник]|


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

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

Описание:

Эта команда заставляет хаб закрыть соединение с клиентом, чей ник написан в аргументе этой команды. Только операторы могут (имеют право) отправлять эту команду хабу. Эта команда в простонародье называется ДРОП.

[Ник] - ник пользователя, который подлежит разъединению с хабом.

В отличии от команды $Kick, команда $Close разъединяет пользователя без уведомления о разъединении. (По крайней мере на хабах NMDC первой версии эта команда работает именно так).


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


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

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




$ConnectToMe

Синтаксис:

Для клиентов DC++ и NMDC.

Код
$ConnectToMe [Ник_получателя] [IP_отправителя]:[Порт_отправителя]|


Пример:

Код
$ConnectToMe Вася 10.10.10.10:16437|


Для клиентов NMDC v2.205 и DC:PRO v0.2.3.97A:

Код
$ConnectToMe [Ник_отправителя] [Ник_получателя] [IP_отправителя]:[Порт_отправителя]|


Пример:

Код
$ConnectToMe Петя Вася 10.10.10.10:16437|


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

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

Описание:

Эта команда начинает процесс соединения между клиентами. Команда отправляется на хаб клиентом, находящимся в активном режиме соединения с хабом. Хаб пересылает эту команду целевому клиенту без изменения. Получив эту команду, целевой клиент отвечает, соединяясь напрямую с указанным IP через указанный порт.

[Ник_отправителя] - ник клиента в активном режиме, который хочет соединиться с целевым клиентом [Ник_получателя]. Клиент отправителя, после отправки на хаб запроса на соединение, начинает слушать указанный в запросе TCP порт.

Замечание:

Обратите внимание, что в скриптовую функцию старой версии PtokaX данная команда передаётся без символа вертикальной черты '|' на конце.


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


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

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




$ForceMove

Синтаксис:

Код
$ForceMove [Новый_адрес]


Команда сопровождается отсылкой в личку оповещения о перенаправлении:

Код
$To: [Ник_жертвы] From: [Ник_отправителя] $<[Ник_отправителя]> You are being redirected to [Новый_адрес]: [Причина]|


Команда сопровождается отсылкой в чат оповещения о перенаправлении:

Код
<[Ник_бота]> [Причина]|


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

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

Описание:

Хаб отсылает команду $ForceMove клиенту, чтобы предложить ему переместиться на другой хаб (предлагает клиенту перенаправиться).

[Ник_отправителя] - ник, который отправляет команду $OpForceMove.
[Ник_бота] - ник основного бота на хабе.
[Ник_жертвы] - ник, который должен быть перенаправлен на новый адрес.
[Новый_адрес] - это IP адрес или хост-имя (и опционально, через двоеточие, порт) другого хаба, на который происходит перенаправление.
[Причина] - причина перенаправления.

Комментарии:

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

Примечание:

Обратите внимание, что если команды чата и лички следуют после команды перенаправления, то в случае автоматического следования перенаправлению пользователь не увидит сообщения о перенаправлении в чате и личке, однако, последовательность отсылаемых команд полностью на совести хаба, который может отослать сообщения как после команды перенаправления, так и до.


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


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

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




$GetNickList

Синтаксис:

Код
$GetNickList|


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

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

Описание:

Эта команда заставляет хаб послать клиенту 2 списка зарегистрированных(вошедших) ников.

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


Тут надо отметить, что список $OpList является подмножеством списка $NickList. Если на хабе нет операторов и ботов, то хаб должен послать просто "$OpList $$|".

Однако, только старые версии протокола отправляют данные команды. Новые же версии несколько упрощены и отправляют только команду $OpList, а вместо команды $NickList используется команда $MyINFO.

Замечание:
Клиент не обязан запрашивать у хаба список пользователей, поэтому данная команда по своей сути не является обязательной.


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


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

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




$GetPass

Синтаксис:

Код
$GetPass|


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

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

Описание:

Хаб посылает данную команду клиенту для запроса пароля зарегистрированного пользователя.
Команда посылается соединяющемуся с хабом пользователю только если его ник находится в регистрационном листе хаба (ник зарегистрирован на хабе).

Также см. команду $MyPass


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


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

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




$Hello

Синтаксис:

Код
$Hello [Ник]|


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

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

Описание:

Данная команда является частью рукопожатия между клиентом и хабом. Посылается клиенту для того, чтобы указать ему ник, с которым хаб сопоставляет данный клиент. Хаб как бы даёт согласие на вход пользователя под данным ником. В ответ на эту команду, входящий на хаб клиент, должен отослать команду $Version

Данная команда является командой приветствия пользователя и отправляется хабом не только вошедшему на хаб клиенту, но и всем клиентам, находящимся в данный момент на хабе. Однако, если клиент при входе на хаб в команде $Supports указал характеристику NoHello, то такому клиенту, при входе какого-либо пользователя, хаб не будет отправлять команду $Hello.


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


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

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




$HubIsFull

Синтаксис:

Код
$HubIsFull|


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

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

Описание:
Команда, посылаемая клиенту хабом для того, чтобы сообщить, что хаб полный, то есть на хабе достигнут предел пользователей.

Связанная с данной команда: $ValidateNick


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


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

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




$HubName

Синтаксис:

Код
$HubName [Имя_хаба]|


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

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

Описание:

Данная команда является частью рукопожатия между клиентом и хабом. Команда отправляет клиенту имя хаба.

[Имя_хаба] - это имя, которое использует данный хаб. Имя хаба обычно состоит из самого имени и из топика.

Дополнения:
Эта команда может быть отправлена в любое время, например, когда хаб изменил имя. Данная команда используется только для описания хаба.

Клиент1 и Клиент2 на одном и том же хабе этой командой могут получить разные имена, это может получится только на NMDC хабах, поэтому это имя не может быть использовано для однозначного определения хаба.

В Имени хаба в DC++ вместо символов (&, |, $) ожидаются их HTML эквиваленты.


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


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

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




$HubTopic

Синтаксис:

Код
$HubTopic [Топик]|


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

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

Описание:

Команда $HubTopic отсылает клиенту топик хаба, на подобии IRC.

[Топик] - это строка, содержащая топик.

Доступность команды в клиентах:

Данная команда поддерживается почти всеми современными клиентами.

Данная команда поддерживается следующими хабами: Verlihub, RusHub. Хаб PtokaX не поддерживает данную команду, однако команда может отправляться скриптом. На поддержку данной команды может указывать наличие дополнения HubTopic в команде $Supports, однако, это наличие не обязательно.


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


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

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




$Key

Синтаксис:

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


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

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

Описание:

Команда $Key отсылается на хаб в ответ на команду $Lock, которая отсылается хабом перед входом на хаб. Когда соединяются клиент с клиентом, или хаб с клиентом, ключ рассчитывается по определённому алгоритму, исходные коды которого доступны и свободно распространяются на разных языках программирования (см. Lock2Key). Команда $Key также используется, когда хаб регистрируется в хаб-листе, однако, в этом случае ключ вычисляется по иному. Такой обмен ключами является своего рода гарантом того, что соединяемые устройства работают на одном протоколе.

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


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


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

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




$Kick

Синтаксис:

Код
$Kick [Ник_жертвы]|


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

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

Описание:

Данная команда отсылается на хаб клиентом и заставляет хаб закрыть соединение с жертвой. Жертве отсылается оповещение, в отличии от команды $Close. Только ОПераторы могут отсылать команду $Kick. В простонароде данную команду называют КИК.

Замечание:
На самом дела на хаб клиентом отправляется строка, состоящая из 3 команд:
Код
$To: [Ник_жертвы] From: [Ник_оператора] $<[Ник_оператора]> You are being kicked because: [Причина_кика]|<[Ник_оператора]> is kicking [Ник_жертвы] because: [Причина_кика]|$Kick [Ник_жертвы]|

Однако, первые 2 команды, которые представляют из себя, соответственно, сообщение в личку жертве, и сообщение всем в чат, автоматически приписывает клиентом. А непосредственно за кик отвечает только последняя команда: $Kick [Ник_жертвы]|


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


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

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




$Lock

Синтаксис:

Код
$Lock [Код] Pk=[ПК]|


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

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

Описание:

Данная команда используется для того, чтобы убедиться в том, что с сервером соединяется оригинальный клиент DC (NMDC). Сервер (хаб, клиент, хаблист) может и не проверять отправленный клиентом (клиент, хаб, пингер) ключ, однако ключ должен посылаться клиентом в любом случае.

[Код] - это какая-либо последовательность символов (может даже случайная), исключая пробел, $ и |, максимальная и минимальная длина которой неизвестна.
[ПК] - это идентификатор устройства.

Эта команда является частью рукопожатия между клиентом и хабом, между клиентом и клиентом и в регистрации хаб-листа. Из-за того, что используемый алгоритм легко декодируется (см. Lock2Key), практически каждый может создать свой клиент.

Клиент никогда не должен посылать команду $Lock на хаб. Клиенты должны отсылать команду $Lock, когда два клиента соединяются друг с другом.

Пример для DC++:

Код
$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.242ABCABC|


Секции "ABCABC" являются наполнителями.

Ключевое слово EXTENDEDPROTOCOL в коде команды даёт право клиенту, кроме прочих команд рукопожатия отправить команду $Supports. Те есть это слово говорит о том, что хаб (клиент) поддерживает систему дополнительных расширений или характеристик.
Хаб(клиент) в ответ на команду $Supports также отправляет эту команду другой стороне уже со своим списком поддерживаемых расширений. Если какой-либо из участников не поддерживает дополнительные расширения, отправки команды $Supports не происходит.

Характеристики команды $Lock в протоколе NMDC:
  • длина кода от 46 до 115 символов;
  • длина Pk до 16 символов;
  • символы команды $Lock: случайные, с кодами от 37 до 122.
  • символы команд $Lock и $Key с кодами 0, 5, 36, 96, 124 и 126 должны быть заменены, соответственно, на /%DCN000%/, /%DCN005%/, /%DCN036%/, /%DCN096%/, /%DCN124%/ и /%DCN126%/

Экранируемые коды(символы):
0 (\0), 5(\5), 36($), 96(`), 124(|), 126(~)


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


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

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




$LogedIn

Синтаксис:

Код
$LogedIn [Ник]|


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

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

Описание:

Данная команда отсылается хабом клиенту в ответ на успешную последовательность пройденных команд $GetPass / $MyPass. Эта команда отправляется исключительно ОПераторам. Команда как бы контролирует вход операторов.

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


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


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

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




$MyINFO

Синтаксис:

Код
$MyINFO $ALL [Ник] [Описание][Тэг]$ $[Соедиенние][Флаг]$[E-Mail]$[Шара]$|


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

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

Описание:
Данная команда отправляется клиентом на хаб, и хабом всем клиентам и, содержит всю основную информацию о клиенте.

Описание параметров команды:

[Ник] - ник пользователя (без пробелов).

[Описание] - описание пользователя. Поле определяемое самим пользователем. Клиенты автоматически к описанию добавляют в конце тэг. Вообще говоря тэг является не обязательным элементом, однако тэг содержит важные параметры, которые помогают хабу общаться с клиентом. Одним из важнейших параметров является режим. При помощи режима хаб определяет как клиент будет взаимодействовать с ним и с другими клиентами.

[Тэг] - автоматически добавляемый клиентом тэг. Общий вид любого тэга: <[Имя_клиента] V:[Версия_клиента],M:[Режим],H:[Хабы],S:[Слоты],[Ограничители]>
Вообще говоря параметры не обязательно должны быть в тэге именно в такой последовательности. Такая последовательность просто является общепринятой, и некоторые клиенты любую другую последовательность параметров могут воспринимать не правильно.

Несколько примеров различных видов тэгов:

DC++:
<++ V:x,M:x,H:x/y/z,S:x,O:x>

BCDC++:
<++ V:x,M:x,H:x/y/z,S:x,O:x,B:x>

CZDC++:
<++ V:x,M:x,H:x/y/z,S:x,O:x,L:x>

DC:Pro:
<DC:PRO V:x,M:x,H:x/y/z,S:x,O:x,F:x/y>

DC++k CDM:
<++ V:x,M:x,H:x/y/z,S:x,O:x>

DCDM++:
<++ V:x,M:x,H:x/y/z,S:x,O:x,B:x>

DCGUI:
<DCGUI V:x,M:x,H:x,S:x,L:x>

iDC++:
<++ V:x,M:x,H:x/y/z,S:x,O:x>

MS++V:
<++ V:x,M:x,H:x/y/z,S:x,O:x,B:x>

NMDC v2:
<DC V:x,M:x,H:x/y/z,S:x,O:x>

oDC:
<oDC V:x,M:x,H:x/y/z,S:x,O:x>

PhantomDC:
<++ V:x,M:x,H:x/y/z,S:x,O:x,B:x>

PeerWebDC++:
<PWDC++ V:x,M:x,H:x/y/z,S:x>

PeerWebDC++:
<PWSDC++ V:x,M:x,H:x/y/z,S:x>

rmDC++:
<RMDC++ V:y,M:x,H:x/y/z,S:x,O:x,B:x,D:x>

StrongDC++:
<StrgDC++ V:y,M:x,H:x/y/z,S:x,O:x,L:x>

zDC++
<++ V:x,M:x,H:x/y/z,S:x,O:x>

Z++
<Z++ V:x,M:x,H:x/y/z,S:x,L:x>

LDC++
<LDC++ V:x,M:x,H:x/y/z,S:x,L:x>

ApexDC++
<ApexDC++ V:x,M:x,H:x/y/z,S:x,L:x>

AvaDC++
<AvaDC V:x,M:x,H:x/y/z,S:x,L:x>

FlylinkDC++
<FlylinkDC++ V:x,M:x,H:x/y/z,S:x,L:x>

Greylink++
<gl++ V:x,M:x,H:x/y/z,S:x,L:x>

Pelink++
<pl++ V:x,M:x,H:x/y/z,S:x,L:x>

RSX++
<RSX++ V:x,M:x,H:x/y/z,S:x,L:x>

zK++
<zK++ V:x,M:x,H:x/y/z,S:x,L:x>

UKCable++
<UKC++ V:x,M:x,H:x/y/z,S:x,L:x>





[Имя_клиента] - имя, которое определяет тот или иной клиент.

[Версия_клиента] - версия, под которой выпущен клиент.

[Режим] - режим клиента. Может принимать значения: A, P или иное (5). A - активное соединение с хабом, P - пассивное соединение с хабом, 5 - соединение через прокси-сервер SOCKS5.

[Хабы] - хабы на которых находится клиент. Параметр может иметь следующий формат: U/R/O, где U - число хабов, на которых данный пользователь является незарегистрированным, R - число хабов, на которых данный пользователь является зарегистрированным, O - число хабов, на которых пользователь яляется ОПератором.

[Слоты] - число свободных или полное число слотов в клиенте.

[Ограничители] - данный параметр является не обязательным. Он может содержать в себе несколько параметров. Всё зависит от того или иного клиента. Обычно данный параметр показывает ограничение скорости. Конкретные значения данного параметра не привожу, для тех, кто хочет узнать его значения, я привёл примеры тэгов различных клиентов (см. чуть выше).

[Соединение] - тип соединения с хабом (указывается либо тип соединения, либо скорость соединения). Устанавливается непосредственно пользователем клиента.
Типы соединений в клиенте NMDC1: 28.8Kbps, 33.6Kbps, 56Kbps, Satellite, ISDN, DSL, Cable, LAN(T1), LAN(T3).
Типы соединений в клиенте NMDC2: Modem, ISDN, Wireless, DSL, Cable, Satellite, LAN(T1), LAN(T3).
Новые типы (Мбит/c): 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 1000

[Флаг] - статус пользоателя (ascii символ). Этот символ ещё называют магическим байтом. При отсутствии принимает значение кода 0.
Типы статусов (коды ascii символов для данного статуса):
  • normal (1, 16, 17, 32);
  • normal away (2, 3, 18, 19);
  • server (4, 5, 12, 13, 20, 21, 28, 29);
  • server away (6, 7, 14, 15, 22, 23, 30, 31);
  • fireball (8, 9, 24, 25);
  • fireball away (10, 11, 26, 27).

Статус server используется, когда клиент пробыл на хабе больше 2 часов, расшарил больше 2 ГБ и имеет отдачу свыше 200 МБ.
Статус fireball используется, когда с клиента скачивают со скоростью, превышающей 100 КБ/с.

[E-Mail] - email адрес пользователя. Может отсутствовать (пустая строка).

[Шара] - количество байт, которые расшарил пользователь. Этот параметр в любом случае должен приводится к числу.



Расшифровка буквенных обозначений тэга (на английском):
V: Client Version.
M: Mode.
H: The number of Hubs the client is connected to.
S: Number of Slots open.
O: Open an extra slot if speed is below.
B: Upload Bandwidth limit in kb/s.
L: Upload bandwidth Limit.
D: Download bandwidth limit in kb/s.
F: Fraction download / upload.



Возможные комбинации ограничителей:
  • L:x
  • O:x
  • O:x,B:x
  • O:x,B:x,D:x
  • O:x,L:x
  • O:x,F:x/y
Ограничители, ограничивающие скорость скачки:
  • L:x
  • B:x
  • F:x/y




В параметрах данной команды символы $ и | не допустимы!

Эта команда является частью рукопожатия между клиентом и хабом. Посылается клиентом на хаб после получения команды $Hello. Клиент также отсылает эту команду время от времени, а также когда какой-либо из параметров этой команды изменится. Любая, как правило изменённая, отсылка этой команды транслируется хабом всем клиентам с характеристикой NoHello.


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


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

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




$MyPass

Синтаксис:

Код
$MyPass [Пароль]|


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

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

Описание:

Данная команда посылается клиентом на хаб в ответ на команду $GetPass.
[Пароль] - это обычно не шифрованный текст пароля клиента.
Символ | недопустим в пароле.

Также см. команду $GetPass


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


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

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




$NickList

Синтаксис:

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


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

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

Описание:

Данная команда используется хабом для того, чтобы отправить ники пользователей, которые находятся на хабе в данный момент. Этот список ников оканчивается и разделён символами "$$". Команда используется в старых версиях протокола NMDC.

Смотрите также $OpList, $GetNickList


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


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

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




$OpForceMove

Синтаксис:

Код
$OpForceMove $Who: [Ник_жертвы]$Where: [Новый_адрес]$Msg: [Причина]|


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

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

Описание:

ОПератор может отослать команду $OpForceMove для того, чтобы предложить клиенту переместиться на другой хаб.

[Ник_жертвы] - ник, которому предлагается перенаправиться.
[Новый_адрес] - это IP адрес или хост-имя (и опционально через двоеточие порт) другого хаба, на который происходит перенаправление.
[Причина] - причина перенаправления.

После получения этой команды хаб должен отослать жертве команду $ForceMove.
Сервер разъединяет клиента, однако клиент и сам закрывает соединение с хабом.

Комментарии:

После отправки ОПератором на хаб команды $OpForceMove, хаб отсылает жертве команды
Код
$ForceMove [Новый_адрес]|
$To:[Ник_жертвы] From: [Ник_отправителя] $<[Ник_отправителя]> You are being re-directed to [Новый_адрес] because: [Причина]
и прекращает отсылать клиенту-жертве какие-либо команды.
Если команда $OpForceMove послана на хаб пользователем, не являющемся ОПератором, хаб должен разъединить такого пользователя.


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

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

Collapse

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

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

 



RSS Сейчас: 4.12.2024, 14:35