miranda-ng / miranda-ng

Miranda NG: Next Generation of Miranda IM
https://miranda-ng.org
GNU General Public License v2.0
485 stars 126 forks source link

XMPP Не передаются файла в одном из направлений #3513

Closed OmlineEditor closed 1 year ago

OmlineEditor commented 1 year ago

Есть два аккаунта: test@oracle Anastasia@oracle

файлы можно передать из аккаунта test@oracle в Anastasia@oracle, но нельзя наоборот передать файл.

Версии Миранды везде одинаковые 0.96.2 Настройки проверила везде одинаковые. Фаервол ничего не блокирует, по логам чисто. Сервер один и тот же, но в одну сторону идет передача в другую нет. До этого все работало в старой версии.

Где может быть ошибка?

В логах есть следующее:

[16:55:57 2444] bytesParsed = 9030 [16:56:05 272C] (0000000006DA9DF0:756) Data sent <iq type="get" to="upload.oracle" id="mir0dc043eb4c546dd2_11"><request xmlns="urn:xmpp:http:upload"><filename>clp-20230427-1656040.jpg</filename><size>7332</size><content-type>image/jpeg</content-type></request></iq>

[16:56:05 2444] (0000000006DA9DF0:756) Data received <iq to='anastasia@oracle/Home' id='mir0dc043eb4c546dd2_11' type='error' from='upload.oracle'><error type='cancel'><not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Communication with remote domains is not enabled</text></error></iq> [16:56:05 2444] recvResult = 284 [16:56:05 2444] HTTP upload aborted

georgehazan commented 1 year ago

Это надо брать доку на сервер и смотреть, что означает это "Communication with remote domains is not enabled", запрос к серверу 100% правильный

OmlineEditor commented 1 year ago

Где может быть ошибка? почему при одинаковых программах и одинаковых настройках не получается нормально отправить файл, притом что до этого все работало

dartraiden commented 1 year ago

Это надо брать доку на сервер и смотреть, что означает это "Communication with remote domains is not enabled"

stanza_router.lua

function core_route_stanza(origin, stanza)
    local to_host = jid_host(stanza.attr.to);
    local from_host = jid_host(stanza.attr.from);

    -- Auto-detect origin if not specified
    origin = origin or hosts[from_host];
    if not origin then return false; end

    if hosts[to_host] then
        -- old stanza routing code removed
        core_post_stanza(origin, stanza);
    else
        local host_session = hosts[from_host];
        if not host_session then
            log("error", "No hosts[from_host] (please report): %s", stanza);
        else
            local xmlns = stanza.attr.xmlns;
            stanza.attr.xmlns = nil;
            local routed = host_session.events.fire_event("route/remote", {
                origin = origin, stanza = stanza, from_host = from_host, to_host = to_host });
            stanza.attr.xmlns = xmlns; -- reset
            if not routed then
                log("debug", "Could not route stanza to remote");
                if stanza.attr.type == "error" or (stanza.name == "iq" and stanza.attr.type == "result") then return; end
                core_route_stanza(host_session, st.error_reply(stanza, "cancel", "not-allowed",
                    "Communication with remote domains is not enabled"));
            end
        end
    end
end
OmlineEditor commented 1 year ago

Хорошо, а как это поможет решить проблему? Напомню еще раз. До обновления все работало в обе стороны и файлы перемещались, потом после обновления в одну из стороно файлы не перемещаются. Ничего кроме обновления программы не менялось. Вы по прежнему считаете что это не глюк программы и тикет должен быть закрыт?

dartraiden commented 1 year ago

До этого все работало в старой версии.

В какой? Если есть возможность откатиться (предыдущие версии измененных файлов лежат в /Plugin Updates/Backups), то проверьте на предыдущей версии. Если проблема останется, то что-то изменилось на сервере (вероятно, в базе для конкретной учётки). Если проблема исчезнет, то это наш косяк.

OmlineEditor commented 1 year ago

Я могу это проверить толко после всех майских праздников, нужно найти бэкап и откатиться. Как все проверю я напишу

OmlineEditor commented 1 year ago

Проверка завершилась. Итог такой проблема есть. Из бэкапа достала версию 0.95.13.1 build 23808 и там все работает как нужно без проблем. В новой версии 0.96.2 build 25337 - не работает. Ничего не менялось, только обновилась программа. Прошу открыть тикет и решить проблему. Со своей стороны чем смогу тем помогу.

upd. Из настроек замети ла что пропал пункт: Разрешить передачу файлов только внутри протока Может это из-за этого пункта?

georgehazan commented 1 year ago

@OmlineEditor давай тогда сделаем два лога, один на старой версии, один на новой, где есть ошибка, и сравним

OmlineEditor commented 1 year ago

давай тогда сделаем два лога, один на старой версии, один на новой, где есть ошибка, и сравним

Первый лог с ошибкой в самом первом сообщении, а вот в файле второй вариант при передачи файла когда все идет как нужно miranda_send_ok.txt

При тосовании и замене разных версий случилась проблема: Я не могу получать сообщения, миранда мне пишет что нельзя расшифровать сообщения: << Undecryptable incomming OMEMO message >>

Это теперь со всеми утсройствами, другие люди мне не могут писать, я не вижу что они написали мне. Другие люди пишут мне с других приложений Blabber например и с Миранды пишут, результат один и тот же. Вот лог что дает миранда: miranda_msg_bug.txt

В ошибках вижу только: Jabber OMEMO: error -1005 at session_cipher_decrypt_signal_message

Как починить чат и вернуть OMEMO?


UPD: Начала закрывать сесии с другими устроствами через меню, и вообще все сообщения пропали и я не вижу ничего что пишут мне, и другие люди не видят что написала я. Вот лог с пустыми сообщениями: miranda_msg_bug_2.txt

Круго написано: empty message, returning

georgehazan commented 1 year ago

а вот в файле второй вариант при передачи файла когда все идет как нужно

Так выключи HTTP Upload - и будет счастье. Это делается в Services - Discovery, rclick на Http Upload, отожми Use for uploads.

dartraiden commented 1 year ago

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

Поддержка омемо всё ещё очень экспериментальная и у меня оно чаще не работает, чем работает. Когда-то я пытался это тестировать и закончилось точно так же: от меня сообщения не уходили, пока я не вычистил всё это из базы и не зарёкся больше не трогать омемо.

dartraiden commented 1 year ago

Первый лог с ошибкой в самом первом сообщении

На вашем сервере сломан https://xmpp.org/extensions/xep-0363.html Сервер заявляет его поддержку, но он не работает. Начиная с 0.96.2, Миранда, видя наличие HTTP File Upload, автоматически начинает использовать его вместо того, чтобы по-старинке кидать файлы напрямую. На старой версии поддержка XEP-0363 по умолчанию выключена.

https://wiki.miranda-ng.org/index.php?title=Plugin:Jabber/ru#/media/File:XEP-0363_enable.png

OmlineEditor commented 1 year ago

XEP-0363 на сервере нет и небыло. вся передача идет внутри протокола. В этом и ошибка что миранда не понимает что не нужно использовать HTTP File Upload, а нужно внутри протокола передавать данные

dartraiden commented 1 year ago

XEP-0363 на сервере нет

Тогда нужно разбираться, почему сервер прислал сведения об upload.oracle Не враги же это подбросили в нетлог, а от сервера пришло Разбираться с этим нужно на сервере

OmlineEditor commented 1 year ago

Тогда нужно разбираться, почему сервер прислал сведения об upload.oracle

Сервер этого не может присылать, миранда это похоже закэшировала и это сидит в ее базе данных. upload.oracle - это наш рабочий сервер который был давным давно и сейчас его нет, в настройках сервера нет информации об этом сервере, но она была давным давно (Админ проверил подтвердил что там сейчас нет таких строк).

Как можно в ручном режиме удалить или поменять информацию в миранде чтобы она не использовала HTTP File Upload?

dartraiden commented 1 year ago

Как вариант, удалить всё, связанное с кэшем из профиля Миранды. Также, выполнить редактором базы поиск по базе.

HTTP File Upload включается и отключается в настройках дискавери, как описано в вики.

После реализации https://github.com/miranda-ng/miranda-ng/issues/3538 эта настройка переедет в настройки протокола.

georgehazan commented 1 year ago

Сервер этого не может присылать

Как же не может, если в нетворк логе это есть. На самом деле, как показало расследование, есть скрытая настройка, которая блокирует использование HTTP Upload. Надо зайти в dbeditor и добавить в Settings -> JABBER_1 настройку UseHttpUpload BYTE = 0

OmlineEditor commented 1 year ago

Как же не может, если в нетворк логе это есть.

Эта настройка сидит почему-то в базе данных миранды, если экспортировать все настройки и поискать по "upload.oracle" то там есть такие строки:

[JABBER_1]
HttpUpload=uupload.oracle

и вот:

[UserOnline]
LastEvent=d0
OldStatus=w40071
CONTACT: upload.oracle *(JABBER_1)*<jid>*{upload.oracle}*

[CList]
NotOnList=b1

[JABBER_2]
IsTransport=b1
Nick=uupload.oracle
jid=uupload.oracle

Иными словами на сервере этого реально нет но в мираде почему-то осталось.

Надо зайти в dbeditor и добавить в Settings -> JABBER_1 настройку UseHttpUpload BYTE = 0

Заработало, стали передаваться файлы, починили! Можно добавить эту настройку в саму миранду? Например такую: "Запретить использовать Http Upload и передавать файлы только внутри протокола" - Да/нет

dartraiden commented 1 year ago

https://github.com/miranda-ng/miranda-ng/issues/3513#issuecomment-1575642051

После реализации https://github.com/miranda-ng/miranda-ng/issues/3538 эта настройка переедет в настройки протокола.

Это она и будет.

dartraiden commented 1 year ago

Перенести не вышло, приделали костыль.

Если у юзера хоть раз включался HTTP File Upload (автоматически или руками через дискавери), то в настройках протокола у него появится опция "Enable HTTP Upload (XEP-0363)", которая под капотом меняет как раз тот самый ключ UseHttpUpload в базе.

В целом, можно лишь посоветовать администраторам серверов не отключать единожды включённый HTTP File Upload и не менять адрес ноды, отвечающей за него. Иначе, у клиентов возникают такие вот чудеса, а XEP-0363 не предусматривает никакого нормального способа сладить с этим.

OmlineEditor commented 1 year ago

Может сделать костыль так: ключ UseHttpUpload в базе данных есть всегда и он равен 0 и есть опция в настройках миранды что передача идет внутри протокола, а если на сервере включается HTTP Upload (XEP-0363) тогда в базе можно менять UseHttpUpload на 1.

Если на сервере выключить HTTP Upload (XEP-0363) тогда или в ручном режиме или в атоматическом можно будет поменять UseHttpUpload на 0.

Всегда иметь в настройках миранды опцию HTTP File Upload вариант?

georgehazan commented 1 year ago

ключ UseHttpUpload в базе данных есть всегда и он равен 0

По факту так и есть: физически ключа в базе нет, но он автоматически читается с дефолтным значением 0. Если хоть раз шевельнуть настройкой в Service Discovery, в базу прописывается собственно HttpUpload, и тогда настройка начинает показываться в интерфейсе. Бинго