Описание Протокола NMDC, NeoModus Direct Connect Protocol |
Здравствуйте, гость ( Вход | Регистрация )
Описание Протокола NMDC, NeoModus Direct Connect Protocol |
16.12.2008, 18:57
Сообщение
#21
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Protocol NMDC Структурированное описание протокола NeoModus Direct Connect (NMDC), под управлением которого на сегодняшний день работает подавляющее большинство хабов. Хотя уже внедряется новый протокол ADC, однако, как говориться, всему своё время. По мере написания, на каждую команду будет появляться ссылка на пост, описывающий эту команду. Делаю тему закрытой, дабы структурировано описать команды. О структуре команд Все команды протокола начинаются с символа $. Исключение составляет команда сообщения чата, которая должна иметь следующую структуру: Код <Ник> Сообщение| При этом, данный синтаксис команды чата обязателен в направлении клиент -> хаб, в то время, как хаб может отсылать клиенту любые сообщения, не начинающиеся с символа $, и клиент должен принимать такие сообщения, однако обработка таких сообщение не регламентирована протоколом (клиент может отображать такие сообщения как в чате, так и в статусной строке, или же вовсе игнорировать такие сообщения).Символы-разделители протокола: $, | и пробел. Протокол не имеет экранирующих символов, поэтому для отсылки символов $ и | в параметрах команд нужно использовать их коды: $ и | Строка сообщения разделяется на команды по средствам символа |. Пример трёх команд, отосланных одной строкой: Код $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 [Строка]| Хаб: Код Отсылает список пользователей. Примечания:
Вход на пальцах выглядит так: Клиент коннектится, сервер отвечает командой $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 Примечание: Команда $LogedIn отсылается только в случае если у вас есть ключ (операторские права). Внимание! Последовательность входа указана для одного потока. Для разных потоков она может быть произвольной, поэтому никогда не используйте глобальные таблицы пользователей, дабы сохранить принцип многопоточности. Последовательность команд при получении списка пользователей (GetNickList) на хабе PtokaX Последовательность команд при получении списка пользователей (GetNickList) на хабе PtokaX Клиент -> Хаб: ---> $GetNickList| Последовательность входа на хаб HeX (последовательные команды могут отсылаться одной строкой, разделённой символом | ) Последовательность входа на хаб HeX Хаб -> Клиент: ---> $Lock EXTENDEDPROTOCOL[некий_ключ_хаба] Pk=versiunea5.03 Примечание: Данный хаб различает вход и переподключение к хабу! Это достигается с помощью задержки в отправлении команды $Quit. Материал из этой темы перенесён в вики: Сообщение отредактировал Setuper - 18.1.2012, 21:48 |
|
|
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 всех зарегистрированных на хабе ботов. Современные хабы должны быть наделены способностью как показывать ботов среди ОПераторов, так и не показывать. Если клиент найдёт в параметрах данной команды свой ник, то он должен включить у себя функции перенаправления и кика пользователей (добавить соответствующие контекстные менюшки). |
|
|
17.12.2008, 17:47
Сообщение
#23
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$Quit
Синтаксис: Код $Quit [Ник]| Направление команды: Хаб ---> Клиент возможен случай: Клиент ---> Хаб Описание: Данная команда может отсылаться только хабом для того, чтобы клиент удалил разъединившегося пользователя из своего списка пользователей. Если вы решили написать свой клиент, не посылайте на хаб команду $Quit. Данная команда показывает, что [Ник] отключился от хаба. Пример: Код $Quit Вася| Известны случаи, когда данная команда использовалась на хабе. Данная команда отсылалась клиентом на хаб и ник являлся ником клиента - хаб закрывал соединение с клиентом. Реализован этот принцип в Verli хабе. |
|
|
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] - ник клиента, с которым нужно соединиться (активный). Примечание: Данная команда не применима к пассивному пользователю (к клиенту в пассивном режиме). Соединение пассив-пассив невозможно! Спасибо сказали: |
|
|
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. [Тип_данных] - ограничение поиска по типу файлов. Данное ограничение принимает одно из следующих целых чисел:
[Поисковый_параметр] - поисковый параметр определяет совпадения в имени файлов Если тип поиска установлен в 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 |
|
|
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)|
|
|
|
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 Спасибо сказали: |
|
|
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 не обязательно. |
|
|
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 клиента при входе на хаб. Спасибо сказали: |
|
|
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 не зависимый от местоположения компьютера. Спасибо сказали: |
|
|
20.12.2008, 2:31
Сообщение
#31
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$ValidateNick
Синтаксис: Код $ValidateNick [Ник]| Направление команды: Клиент ---> Хаб Описание: Эта команда является частью рукопожатия между клиентом и хабом. Она посылается клиентом на хаб после команды $Key. Она определяет ник [Ник], который вы хотите использовать на хабе. Внимание! По протоколу ник не должен содержать символы: $ | и пробел. Клиент, до входа на хаб, может преобразовывать все пробелы на нижние подчёркивания, и, таким образом, продолжать использование данного модифицированного ника. Смотрите также: $HubIsFull, когда хаб полон $ValidateDenide, когда ник уже используется $GetPass, когда для ника запрашивается пароль $Hello, когда ник принят Спасибо сказали: |
|
|
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, как казалось бы должно быть! |
|
|
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 Спасибо сказали: |
|
|
20.12.2008, 13:35
Сообщение
#34
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$Canceled
Синтаксис: Код $Canceled Направление команды: Клиент ---> Клиент Описание: Данная команда отсылается клиентом в ответ на команду $Cancel другого клиента. Смотрите описание команды $Cancel для более детального вникания. Следует отметить орфографию написания команды $Canceled, в отличии от хорошо известного слова "Cancelled." Спасибо сказали: |
|
|
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 и тогда в статусной строке появляется надпись "Соединение...". Решение этой проблемы предложено на страницах обсуждения клиента. Выход из этой ситуации осуществляется отправкой всё большего и большего случайного числа, пока не освободится свободный слот и не установится соединение. Спасибо сказали: |
|
|
20.12.2008, 14:23
Сообщение
#36
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$Error
Синтаксис: Код $Error [Сообщение]| Направление команды: Клиент ---> Клиент Описание: Эта команда отсылается когда возникает ошибка. [Сообщение] - это строка, описывающая ошибку. Наиболее распространённая ошибка "File Not Available" (Файл не доступен), возвращается когда у запрошенного клиента не оказалось нужного файла (хотя он раньше у него был). Если вы пишете своего клиента, то учтите, что реализация этой строки может привести к несовместимости. Спасибо сказали: |
|
|
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" (Файл не найден). Спасибо сказали: |
|
|
20.12.2008, 14:35
Сообщение
#38
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$FileLength
Синтаксис: Код $FileLength [Размер_файла]| Направление команды: Клиент ---> Клиент Описание: Данная команда отсылается отдающим клиентом скачивающему клиенту в ответ на команду $Get. Единственным параметром является размер скачиваемого файла в байтах. Спасибо сказали: |
|
|
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|
Спасибо сказали: |
|
|
20.12.2008, 15:01
Сообщение
#40
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$GetListLen
Синтаксис: Код $GetListLen| Направление команды: Клиент ---> Клиент Описание: Старая команда. Данная команда используется для того, чтобы получит размер файл-листа стиля DcLst удалённого пользователя. Удалённый пользователь в ответ отправит команду $ListLen. Однако эта команда давно исключена из протокола. Начиная с версии 0.69, DC++ больше не генерирует списки стиля DcLst. Спасибо сказали: |
|
|
20.12.2008, 15:06
Сообщение
#41
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
$MaxedOut
Синтаксис: Код $MaxedOut| Направление команды: Клиент ---> Клиент Описание: Данная команда отсылается клиентом, когда у него нету свободных слотов. Спасибо сказали: |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
Описание протокола DC Для созадния PHP клиента-"клиента" |
7 | Ацкий Слон | 15 559 | 25.6.2020, 21:37 Посл. сообщение: Alexey | |
Расширения протокола Обсуждение новых расширений протокола |
2 | alex82 | 7 247 | 11.1.2017, 16:41 Посл. сообщение: PPA | |
Вопросы по протоколу NMDC Делаю программу |
26 | Master255 | 29 668 | 12.1.2015, 0:38 Посл. сообщение: Master255 | |
От: вопрос по NMDC. От темы с ID: 4932 |
0 | MIKHAIL | 5 524 | 25.1.2013, 19:48 Посл. сообщение: MIKHAIL | |
вопрос по NMDC. . |
6 | Lamo | 13 337 | 29.5.2012, 19:35 Посл. сообщение: Lamo | |
Протокол IPv6 в протоколе NMDC Спецификация и тестирование IPv6 в NMDC |
109 | gif-t | 95 544 | 26.2.2012, 10:12 Посл. сообщение: AMD | |
NMDC Extensions Расширения и новые команды NMDC протокола |
10 | Meloun | 18 373 | 19.2.2012, 16:39 Посл. сообщение: gif-t | |
От: NMDC Extensions От темы с ID: 5095 |
0 | Артём | 5 590 | 4.1.2012, 18:56 Посл. сообщение: Артём | |
Поддержка сетевого протокола SCTP | 2 | CSRedRat | 6 957 | 30.12.2011, 14:57 Посл. сообщение: pro | |
ВАЖНО: Описание Eximius и публикация новых версий Eximius |
14 | Saymon21 | 23 183 | 2.10.2011, 16:59 Посл. сообщение: Артём | |
Пингер NMDC-хабов Ударим опенсорсом по нездоровой шняге |
23 | alex82 | 38 709 | 11.4.2011, 18:12 Посл. сообщение: alex82 | |
От: Пингер NMDC-хабов От темы с ID: 4787 |
1 | Invisible | 6 732 | 4.4.2011, 1:10 Посл. сообщение: EvilNico | |
ВАЖНО: Описание Протокола ADC Advanced Direct Connect Protocol |
31 | Setuper | 76 125 | 14.3.2011, 15:15 Посл. сообщение: Setuper | |
Скачивание файл-листа, nmdc Последовательность команд |
16 | HackFresse | 26 041 | 3.11.2010, 12:48 Посл. сообщение: Atlant | |
Описание | 3 | denis | 9 330 | 13.2.2010, 14:27 Посл. сообщение: Артём |
|
Сейчас: 23.11.2024, 6:52 |