pavel-pimenov / flylinkdc-r5xx

flylinkdc-r5xx
GNU General Public License v2.0
55 stars 26 forks source link

Лишний пробел в конце команды $Supports #931

Closed pavel-pimenov closed 9 years ago

pavel-pimenov commented 9 years ago

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

pavel-pimenov commented 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

pavel-pimenov commented 9 years ago

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|| <- This hub is running version 0.9.8e- r2 (Monday Jul 20 2009) of VerliHub (RunTime: 1weeks 6days / Current user count: 5)| <- This hub is enhanced by plugman for Verlihub.| <- $Supports OpPlus NoGetINFO NoHello UserIP2 HubINFO| <- $HubName Verlihub| <- $GetPass| -> $MyPass mysecretpassword55555| <- $Hello TestNick| http://wiki.gusari.org/index.php?title=$Supports В общем, имхо конечно, но "разработчиков" этих хабов можно слать в леса, ибо если Флай начнёт посылать Supports без разделителя перед терминатором, то другие клиенты всё равно это поведение не изменят. Пускай не ленятся и пишут нормальный парсер протокола, в соответствии со стандартом.

pavel-pimenov commented 9 years ago

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++.

Вся эта ситуация становится похожа на борьбу двух упрямцев, ленивца и перфекциониста, в результате которой множится несовместимость и страдают пользователи.

pavel-pimenov commented 9 years ago

From tehnic...@yandex.ru on January 20, 2013 13:12:03

Фикс тривиальный: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/9cb1004 Вы больше времени на спор потратили.

toss.Alexey, не вижу ссылки на баг-трекер DC++, где они отказались это исправить. Без пруфа считаю наезд на разработчиков DC++ пустым трепом...

pavel-pimenov commented 9 years ago

From tehnic...@yandex.ru on January 20, 2013 13:29:45

Отправил им баг-репорт: https://bugs.launchpad.net/dcplusplus/+bug/1102181 Вот и посмотрим как они отреагируют...

pavel-pimenov commented 9 years ago

From toss.Alexey on January 20, 2013 14:07:28

https://answers.launchpad.net/dcplusplus/+question/179023

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 20, 2013 20:08:28

Патчик c дырой. https://github.com/eiskaltdcpp/eiskaltdcpp/commit/9cb1004 если окажется что feat пустой - упадет. ну и явная копипаста - я бы на вашем месте ее поправил

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 20, 2013 20:31:32

А можно уточнить какой хабсофт игнорирует эту команду и как он это делает? и урл для подключения к нему. если это пробел всегда был. может возникнуть ситуация что хабы ожидают этот пробел и если его не окажется - то также проигнорят команду или упадут...

pavel-pimenov commented 9 years ago

From tehnic...@yandex.ru on January 20, 2013 23:09:02

toss.Alexey, Действительно отклонили.

Pavel.Pimenov@gmail.com, Следующим коммитом вчера поправил: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/8705646 Но сюда уже не стал писать. Про копипасту не понял.

А можно уточнить какой хабсофт игнорирует эту команду и как он это делает?

Плюсую к вопросу.

pavel-pimenov commented 9 years ago

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 + '|' можно вытащить в отдельную утилитную функцию.

pavel-pimenov commented 9 years ago

From tehnic...@yandex.ru on January 20, 2013 23:45:34

Действительно, так будет лучше. Спасибо.

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 20, 2013 23:52:58

This issue was closed by revision r12593 .

Status: Fixed

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 20, 2013 23:55:01

Исправлено в r12593 но ждем подтверждения проблемы - т.к. возможно пробел имеет смысл вернуть для совместимости с остальными DC++ клиентами.

pavel-pimenov commented 9 years ago

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]: ==> This hub is running PtokaX DC Hub 0.5.0.0 (UpTime: 0 days, 0 hours, 1 minutes / Users: 0) [18:33:35]: ==> $MyINFO $ALL PtokaX $ $$$$ [18:33:35]: ==> $MyINFO $ALL SELECT <LuaBot V:0.1,M:A,H:1/0/0,S:10>$A$100A$$10737418240$ [18:33:35]: ==> $OpList PtokaX$$ [18:33:35]: ==> Welcome to PtokaX

Без пробела [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]: ==> This hub is running PtokaX DC Hub 0.5.0.0 (UpTime: 0 days, 0 hours, 0 minutes / Users: 0) [18:32:34]: ==> $MyINFO $ALL PtokaX $ $$$$ [18:32:34]: ==> $MyINFO $ALL SELECT <LuaBot V:0.1,M:A,H:1/0/0,S:10>$A$100A$$10737418240$ [18:32:34]: ==> $OpList PtokaX$$ [18:32:34]: ==> $UserIP SELECT 127.0.0.10 [18:32:34]: ==> Welcome to PtokaX

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 07:08:13

This issue was closed by revision r12603 .

pavel-pimenov commented 9 years ago

From toss.Alexey on January 21, 2013 07:11:14

Данные из команды $UserIP используются флайлинком этой включённой по умолчанию опции.

Attachment: 20130121_FLDCPP_fav.png

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 07:19:47

Я думаю всеж это бага PtokaX. но флай пробел теперь не шлет. также поправлю это в r4xx и StrongDC++ sqlite

pavel-pimenov commented 9 years ago

From toss.Alexey on January 21, 2013 07:43:27

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

[2013-01-18 02:50] $Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0 TLS DHT0 | <- correct support don't have space before pipe... that is why ip is missing :oP

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 07:47:41

И что он этим добился?

pavel-pimenov commented 9 years ago

From toss.Alexey on January 21, 2013 07:53:55

"Вся эта ситуация становится похожа на борьбу двух упрямцев, ленивца и перфекциониста, в результате которой множится несовместимость и страдают пользователи."

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 08:01:54

Проверьте серую сборку - в ней вас и птоху все устраивает?

pavel-pimenov commented 9 years ago

From tehnic...@yandex.ru on January 21, 2013 08:10:16

toss.Alexey, цитирование своего сообщения во второй раз ответом на поставленный вопрос не является. Вопрос: чего добивался разработчик PtokaX, внося это несовместимое с другими клиентами изменение?

Поскольку программ, основанных на ядре DC++ существенно больше, чем независимых реализаций, то именно этот разработчик создал проблему, "в результате которой множится несовместимость и страдают пользователи".

pavel-pimenov commented 9 years ago

From toss.Alexey on January 21, 2013 08:34:03

@21 У меня ежовая, её не апните?

@22 Вы требуете у меня ответов так, будто я автор птоки или, как минимум, одобряю такие правки. Но это не так. Возможно, вы найдёте ответы в этом логе http://yadi.sk/d/IqSp-Qhy20oMU (извиняюсь за корявый английский), а если останутся вопросы, то можно задать их тут dchub://ptokax-lua.damnserver.com:2006

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 08:44:55

Попросил Ежика - как прочитает. запустит ребилд ежовой версии

pavel-pimenov commented 9 years ago

From Pavel.Pimenov@gmail.com on January 21, 2013 18:28:29

This issue was closed by revision r12613 .