![]() |
|||
![]() |
![]() |
![]() |
|
![]() |
|
Таблица users_ssi_dataНазначение таблицы:С Версии ICQ2001 клиенты стали ипользовать протокол SSI для хранения на сервере
различных данных (например контакт-лист, ignore записи, email адреса, SMS номера,
настройки безопасности и т.п.). Для хранения этих SSI (Server Stored Information)
и предназначена эта таблица. Клиент поддерживающий SSI имеет возможность
добавлять/удалять/изменять записи в этой таблице, если у тех поле readonly не
равно 1.
Создание таблицы: Таблица создается сервером или утилитой при помощи запроса SQL. Прототип
запроса находится в модуле database\init_db.h CREATE TABLE users_ssi_data (ouin float8, uin float8, gid int4, iid int4, type int2, itype int2, auth int2, udate float8, revnum int2, iname text, nick text, blob text, iperm float8, privacy int2, vclass float8, perms float8, readonly int2 DEFAULT 0); Таблица содержит групповой индекс на поля ouin, gid, iid, type и
индекс на поле uin для ускорения запросов выборки и сохранения целостности
данных. Индексы создаются следующим образом: CREATE UNIQUE INDEX ssi_data_idx ON users_ssi_data (ouin, gid, iid, type); CREATE INDEX ssi_data_uin ON users_ssi_data (uin);" Примечание Каждый пользователь имеет 2 обязательных записи, которые создаются при первом обращении к SSI: Import Time и Last update time. Поле Blob содержит кодированную в ascii цепочку TLV с дополнительными данными. Эти данные не содержат TLV(131)/TLV(066) так как для их хранения предназначены поля nick и auth. Цепочка дополнительных данных кодируется методом BINHEX. Т.е. каждый байт кодируется двумя байтами шестнадцатиричного кода. Например "F" -> "46". Перед кодированием цепочка TLV сбрасывается в плоскую форму. После декодирования дополнительные данные парсятся в цепочку TLV: считываются два байта (тип TLV), затем еще два байта - длина значения и само значение, уже известного размера. Затем опять два байта типа, два байта размера и n байт значения и так до конца декодированных данных. Авторизация.Процесс авторизации в SSI выглядит немного иначе чем в обычных клиентах. Здесь авторизация дается только один раз. Клиент сначала пытается добавить пользователя без всяких проверок авторизации и если авторизация требуется - сервер выдается ошибку. После чего SSI запись добавляется с TLV(66) в качестве признака того, что данная запись ожидает авторизации и после этого отправляется авторизационный запрос. Авторизация дается клиентом, который посылает специальный SSI пакет через сервер. Сервер при получении этого пакета добавляет запись в таблицу Users_Perms и отправляет сообщение об авторизации адресату, который при получении уведомления просто перекидывает пользователя из группы "Awaiting authorization" в группу обычных пользователей (сервер сам удаляет TLV(66) и активирует запись). Данная схема дает возможность для так называемоей фьючерной авторизации. В официальных клиентах например при добавлении пользователя можно поставить галочку и дать авторизацию клиенту до того как он ее попросит (просить ее он конечно после этого не будет). |
|
|
|
||||||||||||||||||||||||||||||||||||||
|
|
Webmaster А.В.Шутко |
![]() |
![]() |