Closed pavel-pimenov closed 9 years ago
From a.rain...@gmail.com on January 18, 2013 07:21:49
931 ==== $Supports
932 $Supports extension1 extension2 [...]|
933 $Supports extension1 extension2 [...] |
934
935 Contexts: Client -> Hub, Hub -> Client, Client -> Client
936
937 This command is used to negotiate and notify about protocol extensions.
938
939 If a client or hub implements an extension, the $Lock command MUST start with \'EXTENDEDPROTOCOL'.
940
941 This command MUST be sent before $Key.
942
943 Implementations should only send extension specific messages if the other party has signaled support for it.
944
945 There must be at least 1 (one) supported extension.
946
947 For client extensions, the extension name should be the same as the command name.
948
949 Note that DC++ 0.XXX added a space after the last extension. I.e., the first form is the original implementation of $Supports.
950
951 Example:
952 The following example signals support for 7 (seven) different extensions. See corresponding command/extension for description.
953 ====
954 $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 GetZBlock|
955 ==== http://nmdc.svn.sourceforge.net/viewvc/nmdc/trunk/NMDC.txt?revision=17&view=markup
From a.rain...@gmail.com on January 18, 2013 07:32:10
Тут ещё веселее :)
(client C successfully establishes TCP connection to a hub H)
C H
<- $Lock EXTENDEDPROTOCOL_verlihub Pk=version0.9.8e- r2 |
-> $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 GetZBlock |
-> $Key u���A ѱ011qP�q|
-> $ValidateNick TestNick||
<-
From toss.Alexey on January 18, 2013 08:51:02
Цитата1: Это не стандарт, а попытка описать текущую ситуацию, собрать информацию из разных источников в одну кучку. Цитата2: Неудачный пример лишь иллюстрирует, что подобная проблема есть не только во флае. В остальных разделах статьи чётко показано, что разделителя перед терминатором быть не должно.
В общем, имхо конечно, но "разработчиков" этих хабов можно слать в леса
В общем, разработчики DC++ так и делали, когда им указывали на несоответствие их реализации с их же собственным стандартом. http://web.archive.org/web/20040703015607/http://dcplusplus.sourceforge.net/wiki/index.php/Supports%20command > ибо если Флай начнёт посылать Supports без разделителя перед терминатором, то другие клиенты всё равно это поведение не изменят.
Тем лучше для флая: пользователям других клиентов с неработающими расширениями будут советовать переходить на флай с работающими расширениями.
Пускай не ленятся и пишут нормальный парсер протокола, в соответствии со стандартом.
Хороший совет для разработчиков DC++.
Вся эта ситуация становится похожа на борьбу двух упрямцев, ленивца и перфекциониста, в результате которой множится несовместимость и страдают пользователи.
From tehnic...@yandex.ru on January 20, 2013 13:12:03
Фикс тривиальный: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/9cb1004 Вы больше времени на спор потратили.
toss.Alexey, не вижу ссылки на баг-трекер DC++, где они отказались это исправить. Без пруфа считаю наезд на разработчиков DC++ пустым трепом...
From tehnic...@yandex.ru on January 20, 2013 13:29:45
Отправил им баг-репорт: https://bugs.launchpad.net/dcplusplus/+bug/1102181 Вот и посмотрим как они отреагируют...
From toss.Alexey on January 20, 2013 14:07:28
From Pavel.Pimenov@gmail.com on January 20, 2013 20:08:28
Патчик c дырой. https://github.com/eiskaltdcpp/eiskaltdcpp/commit/9cb1004 если окажется что feat пустой - упадет. ну и явная копипаста - я бы на вашем месте ее поправил
From Pavel.Pimenov@gmail.com on January 20, 2013 20:31:32
А можно уточнить какой хабсофт игнорирует эту команду и как он это делает? и урл для подключения к нему. если это пробел всегда был. может возникнуть ситуация что хабы ожидают этот пробел и если его не окажется - то также проигнорят команду или упадут...
From tehnic...@yandex.ru on January 20, 2013 23:09:02
toss.Alexey, Действительно отклонили.
Pavel.Pimenov@gmail.com, Следующим коммитом вчера поправил: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/8705646 Но сюда уже не стал писать. Про копипасту не понял.
А можно уточнить какой хабсофт игнорирует эту команду и как он это делает?
Плюсую к вопросу.
From Pavel.Pimenov@gmail.com on January 20, 2013 23:37:49
Копипаста - это когда куска кода идентичных: void UserConnection::supports(const StringList& feat) { string x; for (auto i = feat.cbegin(); i != feat.cend(); ++i) { x += *i + ' '; } send("$Supports " + x + '|'); }
void NmdcHub::supports(const StringList& feat) { string x; for (auto i = feat.cbegin(); i != feat.cend(); ++i) { x += *i + ' '; } send("$Supports " + x + '|'); }
В утилитах валяется функция склейки всех элементов StringList через сепаратор исключая последний.
string Util::toString(const string& sep, const StringList& lst) { string ret; for (auto i = lst.cbegin(), iend = lst.cend(); i != iend; ++i) { ret += *i; if (i + 1 != iend) ret += sep; } return ret; }
т.е. код в обоих метода преобразуется в такой и не нужно ничего обрезать с конца:
const string x = Util::toString(" ",feat);
send("$Supports " + x + '|');
по хорошему и склейку "$Supports " + x + '|' можно вытащить в отдельную утилитную функцию.
From tehnic...@yandex.ru on January 20, 2013 23:45:34
Действительно, так будет лучше. Спасибо.
From Pavel.Pimenov@gmail.com on January 20, 2013 23:52:58
This issue was closed by revision r12593 .
Status: Fixed
From Pavel.Pimenov@gmail.com on January 20, 2013 23:55:01
Исправлено в r12593 но ждем подтверждения проблемы - т.к. возможно пробел имеет смысл вернуть для совместимости с остальными DC++ клиентами.
From toss.Alexey on January 21, 2013 06:51:41
Делает это самый популярный хабсофт на территории бывшего СССР — PtokaX. В changelog-е версии 0.4.2.0, вышедшей в сентябре 2011 года: Removed: Setting for send userip to user on login, it is send always when client corretly indicate UserIP2 in supports.
С пробелом
[18:33:34]: ==> $Lock EXTENDEDPROTOCOLacNd8DILQn;DM?d57`FPWK=T[FQwin Pk=PtokaX
[18:33:34]: <== $Supports NoGetINFO NoHello UserIP2 |$Key tСА° A С±±АА0Т ТўЕЗРPСуUчђ'µ ubapБg–рСqbбp|$ValidateNick SELECT
[18:33:34]: ==> $Supports NoHello
[18:33:34]: ==> $Hello SELECT
[18:33:34]: <== $Version 1,0091|$GetNickList|$MyINFO $ALL SELECT <LuaBot V:0.1,M:A,H:1/0/0,S:10>$ $100$$10737418240$
[18:33:35]: ==> $HubName PX test extra
[18:33:35]: ==>
Без пробела
[18:32:34]: ==> $Lock EXTENDEDPROTOCOL<5dKkiB=:6JDYeA29Ub\TpNbnBUwin Pk=PtokaX
[18:32:34]: \<== $Supports NoGetINFO NoHello UserIP2|$Key tСА° A С±±АА0ђт ІчpАЗаСГB7°ЖsгЂBгВАВq"бp|$ValidateNick SELECT
[18:32:34]: ==> $Supports NoHello
[18:32:34]: ==> $Hello SELECT
[18:32:34]: <== $Version 1,0091|$GetNickList|$MyINFO $ALL SELECT <LuaBot V:0.1,M:A,H:1/0/0,S:10>$ $100$$10737418240$
[18:32:34]: ==> $HubName PX test extra
[18:32:34]: ==>
From Pavel.Pimenov@gmail.com on January 21, 2013 07:08:13
This issue was closed by revision r12603 .
From toss.Alexey on January 21, 2013 07:11:14
Данные из команды $UserIP используются флайлинком этой включённой по умолчанию опции.
Attachment: 20130121_FLDCPP_fav.png
From Pavel.Pimenov@gmail.com on January 21, 2013 07:19:47
Я думаю всеж это бага PtokaX. но флай пробел теперь не шлет. также поправлю это в r4xx и StrongDC++ sqlite
From toss.Alexey on January 21, 2013 07:43:27
Автор птоки вносил изменения осознанно, полностью понимая, к чему они ведут.
[2013-01-18 02:50]
From Pavel.Pimenov@gmail.com on January 21, 2013 07:47:41
И что он этим добился?
From toss.Alexey on January 21, 2013 07:53:55
"Вся эта ситуация становится похожа на борьбу двух упрямцев, ленивца и перфекциониста, в результате которой множится несовместимость и страдают пользователи."
From Pavel.Pimenov@gmail.com on January 21, 2013 08:01:54
Проверьте серую сборку - в ней вас и птоху все устраивает?
From tehnic...@yandex.ru on January 21, 2013 08:10:16
toss.Alexey, цитирование своего сообщения во второй раз ответом на поставленный вопрос не является. Вопрос: чего добивался разработчик PtokaX, внося это несовместимое с другими клиентами изменение?
Поскольку программ, основанных на ядре DC++ существенно больше, чем независимых реализаций, то именно этот разработчик создал проблему, "в результате которой множится несовместимость и страдают пользователи".
From toss.Alexey on January 21, 2013 08:34:03
@21 У меня ежовая, её не апните?
@22 Вы требуете у меня ответов так, будто я автор птоки или, как минимум, одобряю такие правки. Но это не так. Возможно, вы найдёте ответы в этом логе http://yadi.sk/d/IqSp-Qhy20oMU (извиняюсь за корявый английский), а если останутся вопросы, то можно задать их тут dchub://ptokax-lua.damnserver.com:2006
From Pavel.Pimenov@gmail.com on January 21, 2013 08:44:55
Попросил Ежика - как прочитает. запустит ребилд ежовой версии
From Pavel.Pimenov@gmail.com on January 21, 2013 18:28:29
This issue was closed by revision r12613 .
From toss.Alexey on January 18, 2013 15:33:34
Лишний пробел в конце команды $Supports
Отправляемая флайлинком команда NMDC-протокола $Supports содержит лишний пробел перед пайпой. $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 GetZBlock | Некоторые принципиальные разработчики хабсофта говорят, что это нарушение протокола и игнорируют такие команды в своих программах. А нет команды $Supports - нет и расширений протокола.
Просьба убрать этот камень преткновения.
Original issue: http://code.google.com/p/flylinkdc/issues/detail?id=892