Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
pavel-pimenov opened this issue Aug 22, 2015 · 25 comments
Closed

Comments

@pavel-pimenov
Copy link
Owner

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

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

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

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

@pavel-pimenov
Copy link
Owner Author

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
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

This issue was closed by revision r12593 .

Status: Fixed

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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
Copy link
Owner Author

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

This issue was closed by revision r12603 .

@pavel-pimenov
Copy link
Owner Author

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

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

Attachment: 20130121_FLDCPP_fav.png

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

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

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

@pavel-pimenov
Copy link
Owner Author

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
Copy link
Owner Author

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

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

@pavel-pimenov
Copy link
Owner Author

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

This issue was closed by revision r12613 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant