Материал из Tkabber Wiki.
Содержание
- 1 Может
- 1.1 Соединение с сервером и логин
- 1.2 Browse/Discovery
- 1.3 Обмен сообщениями (messaging)
- 1.4 Присутствие (presence)
- 1.5 Info/Query (IQ)
- 1.6 Privacy
- 1.7 Передача файлов
- 1.8 Publish/Subscribe (pubsub)
- 1.9 Интерфейс
- 1.10 Список контактов (ростер)
- 1.11 Смайлики AKA emoticons
- 1.12 История
- 1.13 Стандартные плагины
- 1.14 Расширяемость
- 1.15 Управляемость
- 2 Не может
- 3 "Слабые места"
Может
Соединение с сервером и логин
Типы соединений с сервером
Поддерживаются следующие типы соединений:
- plaintext (на порт 5222).
- SSL (на порт 5223, "Старый SSL").
- STARTTLS (на порт 5222).
- HTTP poll (на порт 5280).
Возможны два вида аутентификации пользователя:
- обычный (plaintext)
- SASL
Поддерживается сжатие потока (stream compression) только для plaintext соединений через пакет ztcl. Сжатие потока на SSL-соединениях не поддерживается (см. секцию "Не может").
Прокси
Любое соединение может "ходить" через HTTP-прокси; любые соединения, кроме HTTP poll, требуют от прокси поддержки метода CONNECT на соответствующий порт. HTTP poll использует HTTP, то есть от прокси требуется только разрешение HTTP-запросов на соответствующий порт.
На прокси поддерживаются типы авторизации basic и NTLM.
Имеется возможность поддерживать соединение через прокси путём периодической посылки в выходной поток байта 0x20.
HTTPS и SOCKSx прокси в настоящее время не поддерживаются.
(Авто)определение параметров соединения
Возможно ручное указание хоста и порта для соединения. Также Ткаббер умеет запрашивать необходимые SRV или TXT записи в DNS для выяснения точных параметров подключения по доменной части JID'а пользователя.
Корректная работа с DNS требует достаточно свежей tcllib, а также — в большинстве случаев — пакета tcludp для возможности выполнения DNS-запросов по протоколу UDP.
Логин/автологин
Имеется удобная форма для изменения параметров логина. Все настройки логина можно изменить через механизм Customize.
Поддерживаются три варианта логина:
- Показ формы логина при старте и ожидание действий пользователя.
- Старт без показа формы логина и ожидание действий пользователя.
- Автологин.
Имеется поддержка "профилей" (или "профайлов", если угодно) логинов: в конфиге Ткаббера можно ввести произвольное количество независимых групп настроек логина и затем выбирать их в форме логина хоткеями Control+1 (первый профиль) и т.д.
Мультилогин
"Мультилогин" (одновременная регистрация и работа с несколькими аккаунтами) официально считается нереализованным.
На деле бо́льшая часть кода ткаббера поддерживает одновременную работу с несколькими аккаунтами, и добиться такой работы в Ткаббере можно, причём без особых усилий.
(Так же по этой теме см. ниже.)
Browse/Discovery
Обмен сообщениями (messaging)
Поддерживается:
- Обычные (normal) сообщения и чат.
- Рендеринг XHTML-сообщений.
- Обычные сообщения архивируются и доступны для просмотра через интерфейс, напоминающий читалку e-mail.
- Хэдлайны (headlines) (и, в частности, поддержка RSS-сервисов). Возможно кэширование хэдлайнов.
- Обработка урлов, смайлов и стайлкодов в тексте сообщений.
- Обработка /me-сообщений.
- Поддержка некоторых атрибутов сообщений, передаваемых в опциональном элементе <x>.
- Поддержка "хайлайтов" (цветовыделения заданных пользователем ключевых слов).
- Подписывание любых сообщений (включая групчат) при помощи PGP.
- Возможность выбора типа сообщения по умолчанию для исходящих сообщений (normal/chat).
Для окон чата и групчата поддерживается:
- Поиск (по Ctrl-S).
- Закладки и перемещение по ним.
- "Команды в стиле IRC" (/ban /kick /time /vcard /leave и т.д.) с автозавершением (completion) по Tab.
- "Умная" обработка кликов мышкой в окне лога чата (клик на нике помещает его в поле ввода чата, клик на URL'е запускает на нём браузер).
- Поддержка неограниченного undo/redo в поле ввода чата:
- Control-z (и Control-underscore в Unix, если включена опция
tk_strictMotif
) отменяет последнее действие редактирования текста. - Control-Z (или Control-y в Windows) перевыполняет последнюю отменённую операцию редактирования.
- Control-z (и Control-underscore в Unix, если включена опция
Недоработки/баги:
- Достаточно дубовый интерфейс обработки стандартных сообщений и элементов <x>.
- То же самое касается архива сообщений.
- Невозможно удалять закладки.
- Нет ограничения на максимальное число сообщений в окне чата/групчата.
(Работы по улучшению положения в этой области ведутся).
Чат
Поддерживаются уведомления о состоянии хода беседы (chat state notifications).
Групповой чат и MUC
Поддерживается:
- Автозавершение (completion) ников в комнате (по Tab).
- Подробное меню с возможностью полного управления конфигурацией комнаты (кнопка вызова меню замаскирована под метку "Тема").
Присутствие (presence)
Info/Query (IQ)
Privacy
Передача файлов
Publish/Subscribe (pubsub)
Интерфейс
Список контактов (ростер)
В ростер могут быть помещены:
- Обычные контакты (с людьми).
- Закладки на комнаты (groupchat, MUC).
- Сервисы (АКА транспорты АКА гейты).
Поддерживается:
- Возможность произвольного переименования контактов.
- Иконки транспортов для сервисов и обычных контактов с этих сервисах; тип сервисов узнаётся при помощи IQ-запросов.
- Автовход в выбранные конференции из ростера.
- Автологин на выбранные сервисы.
- Drag'n'drop комнат из дискавери в ростер.
- Приглашение контакта из ростера в комнату при помощи drag'n'drop (invitation).
- Вложенные группы.
- Перетаскивание мышкой контактов по ростеру.
- "Склеивание" нескольких ресурсов одного контакта, находящихся в онлайне, в один.
- Аннотации контактов (с показам в окне просмотра vCard'ов).
- Экспорт ростера в текстовый файл и импорт оттуда.
- Возможность послать список контактов из ростера другому контакту (send users).
- Переключение между видимостью всех контактов или только находящихся в онлайне.
- Возможность убрать/показать ростер (при работе в "tabbed" режиме) по хоткею Ctrl-R.
- Тултипы (tooltips, balloon hints, всплывающие подсказки) с информацией о контакте.
Смайлики AKA emoticons
История
Поддерживается:
- Запись всех сообщений чатов и комнат в текстовые файлы; файлы истории именуются по JID'ам контактов/комнат.
- Окно для просмотра истории общения в комнате/с контактом. Доступно в соответствующих контекстных меню.
- В окне просмотра лога поддерживается поиск (по Ctrl-S).
- Архивация лога при его открытии (перенос записей старше одного месяца в спец. подкаталог).
Не поддерживается/баги:
- Пока что отсутствует возможность лёгкого навешивания собственных обработчиков на событие "архивация лога" (далее читайте ниже в разделе "Не может").
- Ошибки времени выполнения при общении с идиотскими никами, содержащими символы, запрещённые
для использования в именах файлов текущей ОС. Это — ошибки попытки открыть файл с именем,
образованным из такого ника при общении с подобным ником в привате комнаты (в этом случае
лог имеет имя
ROOMNAME_SERVERNAME_NICK
). Лечится временным отключением логов групчата.
Стандартные плагины
Расширяемость
Управляемость
Не может
SO_KEEPALIVE на сокете
"Низкоуровневое" API сокетов в настоящий момент не "экспортировано" на уровень скриптов в тикле; также не известно ни одного расширения тикля, позволяющего это делать. Поэтому поддержка "настоящего keep alive" (каковое реализовано в программах, написанных на C/C++, вроде Psi или Gaim), в настоящий момент невозможно.
Разработчики Ткаббера наметили два пути решения этой проблемы:
- Написание простого компонента на Си для тикля, экспортирующего socket API на уровень скриптов. Это сложный, но полезный путь.
- Реализация высокоуровнего "forced keep-alive" (как это назвал автор идеи — teo) или — точнее — "keep-alive с обратной связью". Суть идеи: после неактивности входного потока более N единиц времени посылать серверу произвольный IQ-запрос (например, IQ version) и ждать ответа некоторое (настраиваемое) число секунд. Если ответ не появляется за отведённое время, считать соединение физически потерянным и закрывать его на стороне Ткаббера.
Сжатие потока при использовании SSL
Stream Compression в XMPP не может работать внутри SSL-соединения физически. Однако, SSL позволяет использовать собственные механизмы сжатия данных в потоке.
Использованию их в Ткаббере мешает два фактора:
- Пакет tcltls, предоставляющий обвязку вокруг OpenSSL для Tcl, не содержит "крутилок" для управления сжатием данных в потоке, то есть, чтобы эта фича появилась в Ткаббере, кто-то должен сделать соответствующий патч на tcltls.
- Возможности для синхронизации SSL-сокетов относительно используемых методов сжатия достаточно плохо продуманы в стандарте SSLv3. Более того, в (нём?) даже не определены стандартные методы сжатия. OpenSSL поддерживает RLE и Zlib.
"Лёгкий в использовании" мультилогин
Основная причина того, что эта фича не принимает статус официально поддерживаемой, состоит в том, что в настоящий момент в Ткаббере нет способов логичной/удачной/удобной поддержки этой концепции в интерфейсе пользователя. Особенно это касается механизма Customize.
Если у вас есть продуманный вариант решения этой проблемы, не потребующий переписывать тонны кода, обратитесь к разработчикам.
Одновременно хотелось бы заметить, что поддержка мультилогина, в сущности, противоестественна, поскольку "невозможность" ("неудобство" и т.д.) одновременной работы с несколькими копиями Ткаббера — достаточно надуманная проблема.
Voice IP
Таковая поддержка требует очень трудоёмкого прикручивания как минимум библиотеки libmediastream (которую использует gtalk'овская libjingle). В настоящий момент эта фича никому не нужна настолько, чтобы заняться её реализацией.
Если вы не можете без неё жить, посмотрите на Coccinella или Linphone.
Хистори на сервере / сжатие логов
В настоящее время Ткаббер умеет только архивировать (в настоящем значении этого слова) логи с историей чатов и групчатов/MUC. Однако, т.к. были запросы отправлять логи "на мыло" или сжимать их, не исключено, что будут приделаны специальные хуки, из которых пытливые умы смогут запускать произвольные обработчики этих логов.
Поддержка PGP под Windows
По всей видимости, это нереально. Неутешительные подробности читать тут.