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

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

Мой мозг взорван

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

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


person Josh    schedule 16.11.2010    source источник
comment
Серьезно, я не понимаю этих людей, которые думают, что IP-адрес — это личные данные, которые вы должны защищать. Если вас могут атаковать, просто зная ваш IP, вам все равно пиздец.   -  person Camilo Martin    schedule 17.11.2010
comment
Я согласен @Камило. И это серьезно подорвало то, что раньше было потрясающим интерфейсом для чата!   -  person Josh    schedule 17.11.2010


Ответы (3)


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

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

person Dan Lecocq    schedule 07.10.2011
comment
Ничего себе, это выглядит великолепно, и, возможно, это просто стимул, который мне нужен, чтобы выбрать проект моста StackExchange XMPP Chat! - person Josh; 08.10.2011
comment
Дайте мне знать, если вы это сделаете - насколько я могу судить, я реализовал спецификацию, но Google Talk, по-видимому, очень придирчив и / или запутан в своих сообщениях об ошибках. Мне было бы интересно помочь / посмотреть, как это получится! - person Dan Lecocq; 08.10.2011

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

person Zash    schedule 16.11.2010
comment
Это была отличная идея. Я должен был упомянуть, что я пытался это сделать, но в Adium он отображается как битое изображение :-( - person Josh; 16.11.2010

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

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

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

person Camilo Martin    schedule 17.11.2010
comment
Проблема в том, что мост XMPP работает на удаленном сервере, а не на моей локальной машине. Так что URL-адрес file:// ни к чему меня не приведет. Я мог бы попробовать вашу идею, но вместо file:// обслуживать их с URL-адреса http://, где домен URL-адреса совпадает с доменом сервера XMPP, но будет ли это работать? - person Josh; 17.11.2010
comment
Я понимаю. Ну, теоретически да - я думаю, вы могли бы установить что-то быстрое cURL в другом порту. Сказав это, я не парень на стороне сервера. - person Camilo Martin; 17.11.2010