Как отправить изображение в Интернете в сообщении XMPP (Jabber)?

Для интерфейса XMPP для чата, я в настоящее время беру HTML-сообщения чата и конвертируя его в допустимый XML и установка этого в качестве дочернего элемента html объекта XMPP message. В моем jabber клиенте Mac OS X это работало отлично! Это означало, что, когда пользователи в чате SO размещали однобортное изображение, изображение отображалось в моем клиенте XMPP (Adium для OS X):

My Mind Is Blown

Однако я только что обновил Adium до последней версии и, по-видимому, они рассмотрели то, что я делал, чтобы быть дырой в безопасности и спецификациями XMPP, и изменили это поведение. Их аргументация заключалась в том, что XMPP не должен раскрывать ваш IP-адрес, а для получения изображения через HTTP будет отображаться мой IP-адрес.

Итак, теперь чаты безличны по сравнению с XMPP. Как заставить изображения работать над XMPP? Должен ли мой компонент XMPP загружать изображения и вставлять их в строфы <Message>? Можно ли проксировать изображения через сервер XMPP? Или это невозможно?

Ответ 1

Adium, iChat и Pidgin поддерживают XEP-0231, что позволяет отправлять двоичные данные, включая изображения для этой цели. В основном это позволяет указать уникальный идентификатор в качестве источника изображения, а затем другой клиент может решить, хочет ли он запрашивать данные в запросе <iq>.

Я работал с этим в python Twisted, но встречался с некоторыми разочарованиями. Я знаю, что Adium и iChat хотя бы используют его для запроса данных.

Ответ 2

Попробуйте вставить его в данные: uri, например <img src="data:image/png;base64,VGhlIGltYWdlIGRhdGEgZ29lcyBoZXJlCg==" alt="some text" />

Ответ 3

Просто идея...

Как разобрать URL-адрес изображения, загрузить изображения, помещать их во временную папку с именами файлов, представляющими исходные URL-адреса (имя файла может быть хешем исходного URL-адреса) и заменять исходные URL-адреса в сообщениях для этих файлов URL-адрес?

Другая идея... с локальным сервером, который извлекает реальные URL-адреса?