xmpp

gateway short circuit

Изображение пользователя oleg_mmm@jabber.ru.


UPDATE: Нечто похожее теперь реализовано в JIT 1.1.7 (Link)

0. Описание проблемы.


Очень часто происходит следующее: пользователи переходят с ICQ на Jabber, импортируют контакты с сервера ICQ и продолжают общаться, используя старые контакты, причем несколько пользователей могут использовать один транспорт.

Имеем такой путь прохождения сообщения:
На клиенте:
[user1@jabber]->[uin2@icq.jabber]

На JIT происходит преобразование сообщения от user1@jabber в сообщения протокола ICQ от uin1.
Далее сообщение идет на сервер ICQ в Америку, потом возвращается на тот же транспорт. Происходит обратное преобразование, на выходе транспорта получаем:
[uin1@icq.jabber]->[user2@jabber]

Задача: "спрямить" путь таких сообщений, т.е. получить нечто вроде
[user1@jabber]->[user2@jabber]

Update: Аналогично можно сделать для транспортов MSN и Yahoo.
Update: Можно предусмотреть отключение преобразования сообщений для особо нервных пользователей.

1. Способ реализации.


Будем рассматривать связку ejabberd + JIT, при этом не желательно вносить изменения в код JIT.

Схема связки
([ejabberd] - [ejabberd_service]) - [JIT]

Реализовать задачу можно, изменив пакет (получателя сообщения, поле to ) на этапе
[ejabberd_service]

Допустим, измененная схема будет выглядеть так:

([ejabberd] - [ejabberd_service_jit]) - [JIT]

2. Структура таблицы


Предположим, что имеется таблица соответствия jid и uin вида:

original_jid jit_jid active registered
user1@jabber uin1@icq.jabber yes yes
user2@jabber uin2@icq.jabber no yes
user3@jabber uin3@icq.jabber yes yes
... ... ... ...


Тогда, воспользовавшись ею, можно проводить преобразование адреса получателя при условии, что поля active=yes и registered=yes, т.е. например, заменять в поле to uin3@icq.jabber на user3@jabber на этапе [ejabberd_service_jit].

Как это выглядит для пользователей:

user1@jabber зарегистрировался на сервере jabber, на JIT, получил контакты своих приятелей с сервера ICQ.

user3@jabber пользуется jabber и ICQ через JIT, но еще не знает, что user1 пользуется jabber.

user1@jabber отправляет своему приятелю uin3@icq.jabber сообщение (например, "привет, user3, как дела"), которое преобразуется, и его получает user3@jabber, в поле from стоит адрес user1@jabber, в поле to - user3@jabber, т.е. сообщение выглядит как обычное. Update: В принципе, можно добавлять в тело сообщения что-то вроде "From ICQ user uin1@icq.jabber \n" во избежаниe путаницы, но возможна ситуация, когда подобные сообщения будут подделаны.

user3@jabber отвечает user1@jabber (например,"ой, да ты тоже в jabber, не пользуйся ICQ больше, давай болтать тут" :). В общем, они нашли друг друга :)

Если вдруг, по каким-либо причинам, один из них пользуется родным протоколом ICQ, то он будет неактивным active=no в таблице и сообщения пойдут через JIT и далее через сервер ICQ.

3. Составление таблицы активности.



Предположим, что у нас есть таблица соответствия jid и uin, но в ней все пользователи помечены неактивными.

Это тоже можно реализовать на этапе [ejabberd_service_jit].

Достаточно отслеживать

Статус активности:
<presence from='icq.jabber/registered' to='user@jabber/resource'><status/><show>online</show></presence>

Статус неативности:
<presence from='icq.jabber/registered' to='user@jabber/resource' type='unavailable'>

Примечание: Почему-то jit (Jabber: Jabberd 1.1.2 stable / with real threads / by Lukas Karwacki ICQ: 1.1.6) на моем сервере на посылает 'unavailable'... Тогда, по идее, можно отслеживать

<presence from='user@jabber/resource' to='icq.jabber/registered' type='unavailable'>
Поправьте меня, если я ошибаюсь...

4. Составление таблицы соответствия.



Добавление пользователя в таблицу:

----
Нужно перехватить регистрацию пользователя на транспорте.

<iq from='user@jabber' id='14' to='icq.jabber' type='set'><query xmlns='jabber:iq:register'><x xmlns='jabber:x:data' type='submit'><field var='username'><value>uin</value></field><field var='password'><value>password</value></field><field var='key'><value>36d8e402d047474567d73ea5ec7e876d6de4788e</value></field><field var='registered'><value/></field></x></query></iq>

Из этого запроса получаем uin и jid и помещаем их в таблицу, причем ставим поле registered=no.

И ответ транспорта:

<iq from='icq.jabber' to='user@jabber/resource' id='14' type='result'>

<presence from='icq.jabber/registered' to='user@jabber/resource' type='subscribe'/>

После получения этого устанавливаем поле registered=yes.
----


Удаление регистрации

----
<presence from='user@jabber' to='icq.jabber/registered' type='unsubscribe'/>

устанавливаем поле registered=no.

5. Если транспорт JIT уже работает и на нем зарегистрированы пользователи.



Достаточно воспользоваться скриптом, который читает информацию из файлов spool транспорта JIT и составляет таблицу вида (для всех установлен active=no и registered=yes)
original_jid jit_jid active registered
user1@jabber uin1@icq.jabber no yes
user2@jabber uin2@icq.jabber no yes
user3@jabber uin3@icq.jabber no yes
... ... ... ...


Планирую чуть позже выложить тут ссылку на такой скрипт.

Update: можно заставить [ejabberd_service_jit] запрашивать авторизацию. Насколько это трудно реализовать, не знаю.

OUT:
<iq type="get" from='user@jabber/resource' to="icq.jabber" id="j15"><query xmlns="jabber:iq:register"/></iq>

IN:
<iq from='icq.jabber' to='user@jabber/resource' type='result' id='j15'>

<query xmlns='jabber:iq:register'><username>uin</username><registered/><password/>
<key>bc1837e16e0de9f64e2cea996713c647b79fffcb</key>
<instructions>Введите Ваш UIN и пароль</instructions>
<registered/><x type='form' xmlns='jabber:x:data'>
<title>Registration in JIT</title>
<instructions>Введите Ваш UIN и пароль</instructions>
<field type='text-single' var='username' label='UIN'>
<value>uin</value></field>
<field type='text-private' var='password' label='Password'>
<value/></field><field type='hidden' var='key'>
<value>bc1837e16e0de9f64e2cea996713c647b79fffcb</value>
</field><field type='hidden' var='registered'><value/>
</field></x></query></iq>



Прошу мнения


Опубликовано oleg_mmm@jabber.ru в пн, 2005-05-02 11:21. categories [ ]

Сколько друзей Вы привлекли в мир Jabber?

Изображение пользователя mcsim@jabber.ru.
сам подсел - остальные ни в какую
30% (185 votes)
1-2
22% (134 votes)
2-10
24% (148 votes)
10-30
8% (48 votes)
в совершенстве владею НЛП (более 50)
6% (34 votes)
они мне больше не друзья
10% (62 votes)
Всего голосов: 611

Опубликовано mcsim@jabber.ru в ср, 2004-02-04 12:00. categories [ ]

jabber.te.ua

Тернопольский сервер Jabber.

Адрес ссылки: http://www.jabber.te.ua/

Опубликовано aleksey@jabber.ru в вт, 2004-02-03 12:00. categories [ ]

Мысли о distributed jud по мотивам jabber-users@jabber.ru

Изображение пользователя oleg_mmm@jabber.ru.

1. На каждом сервере хранится список других серверов, обновляемый через определенное время (TTL). При подключении нового сервера (регистрации), последний получает полный список от одного из серверов, и сам попадает в этот список.

2. После создания списка серверов производится запрос к их jud и копирование данных в локальный список. Логично, если jud будет иметь serial по аналогии с DNS. В целях безопасности, при репликации можно заменять реальный jid на его hash. Опять же, в целях безопасности на каждом сервере необходимо ввести списки доступа (acl), где указываются разрешения на репликацию jud по маске или regexp.

3. Желательно расширить список полей jud и синхронизировать из с данными vcard. Логично сделать следующие поля:

jid
Имя
Фамилия
Дата рождения
Пол
Страна
Город
Языки
семейный статус
цели знакомсва (не хочу знакомиться, друзья, флирт, задавать вопросы)..
Краткий список интересов
E-mail
URL site
URL photo
доп. информация - обычно там пишут с кем именно хотят общаться


Предложения и замечания отправляйте на jabber-users@jabber.ru Оригинал http://www.jabber.ttn.ru/doc/djud/

Опубликовано oleg_mmm@jabber.ru в пт, 2003-10-24 11:01. categories [ ]

Что такое Jabber?

Изображение пользователя mcsim@jabber.ru.

перевод краткого введения в Jabber(взято с jabber.org)

Содержание

Введение
История
Суть

Введение

Jabber - это открытый протокол, использующий XML, для быстрого обмена сообщениями и информацией о присутствии между любыми двумя абонентами в Интернет. Первым применением технологии Jabber стало появление асинхронной и расширяемой платформы для обмена мгновенными сообщениями и сети обмена мгновенными сообщениями (от англ. IM - Instant Messaging), cходная по возможностям c коммерческими системами IM, такими, как AIM, ICQ, MSN и Yahoo. Однако, Jabber имеет ряд преимуществ по сравнению с коммерческими системами IM:

  • Открытость -- протокол Jabber является свободным (от лицензирования), открытым, общедоступным и, кроме того, лёгок для понимания; существует множество реализаций серверов и клиентов, а также библиотек с открытым исходным кодом.

  • Расширяемость -- с помощью пространств имён в XML можно расширить протокол Jabber для выполнения требуемых задач и для обеспечения поддержки взаимодействия между различными системами. Общие расширения разрабатываются под контролем Jabber Software Foundation.

  • Децентрализованность -- кто угодно может запустить свой собственный сервер Jabber, это позволит организациям и частным лицам заниматься любыми экспериментами с IM.

  • Безопасность -- Любой сервер Jabber может быть изолирован от общедоступной сети Jabber, многие из вариантов реализации сервера используют SSL при обмене между клиентом и сервером, и немало клиентов поддерживают шифрование с помощью PGP/GPG внутри протокола.

Jabber удовлетворит многие потребности частных лиц и организаций. Однако, важно понимать что он не является панацеей от всех бед. В частности, Jabber НЕ является:

  • Универсальным чат-клиентом для различных систем IM -- несмотря на множество клиентов Jabber под различные платформы, они не предоставляют таких возможностей по взаимодействию с различными системами IM, как Trillian или GAIM; взаимодействие между Jabber и другими системами осуществляют шлюзы, расположенные на стороне сервера.

  • 100% решением проблем взаимодействия с различными системами -- некоторые сервера Jabber предоставляют возможность взаимодействия с другими системами IM через шлюзы, которые транслируют протокол Jabber в протокол этих систем; однако, Jabber не был ориентирован на обеспечение взаимодействия с другими системами IM, потому что только от самих систем IM зависит осуществление взаимодействия (к чему они не стремятся и даже наоборот прим. переводчика).

  • Единозависимая система IM, разрабатываемая одной компанией -- cообщество в Jabber не монолитно; напротив, существует большой набор общедоступных и закрытых серверов Jabber, проектов с открым кодом, компаний по разработке ПО, использующих протокол Jabber.

Для изучения Jabber вы можете использовать следующие документы:

История

Проект Jabber был основан Jeremie Miller в начале 1998 года, с разработки сервера jabberd. Первое сообщение о проекте появилось на Slashdot 4 января 1999. Вскоре после этого к проекту присоединилось несколько основных разработчиков, которые стали работать над сервером jabberd, клиентами Jabber для Windows и Linux, а также шлюзами в основные системы IM (AIM, ICQ, MSN, и Yahoo). Позже, в 1999, Webb Interactive Services начало спонсировать некоторых основных разработчиков, что ускорило разрботку. В то время появилась основа протокола Jabber, а также сервер jabberd и ранние клиенты, такие как WinJab (устарел и получил своё развитие в Exodus) и Gabber. Этот ранний период постоянных изменений закончился в мае 2000 с выпуском jabberd 1.0.

С тех пор протокол Jabber продолжает развиваться (с августа 2001 под контролем Jabber Software Foundation) и количество основанных на проектов Jabber продолжает увеличиваться (сейчас большинство из них расположено на http://www.jabberstudio.org/). Например, в данный момент есть, по крайней мере, четыре реализации сервера, несколько библиотек для немалого количества языков программирования, клиенты Jabber для многих платформ от Amiga до Windows. Кроме того, множество серверов Jabber установлено в Интернет и в частных локальных сетях, и предположительно около миллиона человек используют Jabber по всему миру

Суть

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

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

Интернет - это, как мы все знаем, новая среда обмена, объединяющая людей, приложения и позволяющая получить доступ к огромным объёмам информации. С самых первых дней обмен информацией тет-а-тет играл огромную роль в развитии Интернет. С изобретением World Wide Web в 1990, основной движущей силой сети стал Web как способ получения информации. Затем центральное место заняли приложения, люди стали использовать службы Интернет на базе web-ориентированных приложений, такие, как E*Trade, Amazon.com и eBay.

В последние время всё опять идёт к тому. чтобы использовать Интернет всё больше для общения. Но круг и уровень обмена информацией вырос черезвычайно по сравнению с тем, что было в первое время после появления сети. Во первых, большинство наиболее интересных новых способов общения появляются в контексте определённого Web-сообщества или с использованием определённого приложения. И общение происходит не только между отдельными людьми один на один, но всё больше и больше включает в себя общение между группами людей, а также приложениями, и даже общение чисто между приложения без участия людей.

К сожалению, этот обмен сообщениями находится в сходной ситуации, в которой была информация до появления Web. Одно из наиболее сильных свойств Web - это увеличившаяся ценность информации за счёт универсализации технологий, сопровождающих создание информации и её доставку. В том же ключе в наше время обсуждается создание общей системы обмена сообщениями, которая поддерживала бы различные способы обмена, имела-бы гибкую струткуру и способствовала бы быстрому обмену знаниями.

Это в точности такая система, которую мы создаём здесь сообществом в Jabber..

Jabber(R) is a registered trademark of Jabber, Inc

Оригинал статьи раньше был здесь: http://www.jabber.org/about/overview.html

Перевод выполнил Maxim Loparev. JID: mcsim@city.veganet.ru



Опубликовано mcsim@jabber.ru в ср, 2003-09-24 11:00. categories [ ]

Таганрогский сервер Jabber

Изображение пользователя unatine@jabber.ru.

ну название думаю говорит само за себя :)

Адрес ссылки: http://www.jabber.ttn.ru


Опубликовано unatine@jabber.ru в пн, 2003-08-18 13:00. categories [ ]

Jabber Sessions Photos

Изображение пользователя unatine@jabber.ru.

Jabber Sessions Photos

Адрес ссылки: http://jru.yagel.net.ru/node/143


Опубликовано unatine@jabber.ru в вс, 2003-08-10 23:00. categories [ ]

Написание компонента для jabberd 1.4.x

Изображение пользователя ermine@jabber.ru.

Простая инструкция для написания компонента jabberd

Компонент может работать независимо от сервера джаббера. Есть два типа соединения компонента с сервером джаббера:

1. Компонент сам подключается к серверу.

2. Сервер сам подключается к компоненту.


Опубликовано ermine@jabber.ru в вт, 2003-05-13 11:14. categories [ ]