ICQ

Новости

1:59 19.02.2009

Введена процедура генерации начального номера пакета. Поскольку пока ещё всё и без неё работает отлично (особенно если не передавать данные о русском языке клиента), то вызов процедуры закоментирован. См. одну из строк в начале процедуры Login().

2:00 08.02.2008

Оригинальный текст

Нехорошо конечно, что опять какой-то отдельный текcт выложил. Да ещё и в разделе помойка. Но с другой стороны и терять уже толком нечего. Сайт сам по себе получился - сумбурный и бепорядочный. Когда будет время, обязательно его перекрою от хвохста и до ушей. А пока что про ICQ.

Так вот ICQ. Я выложил на эту страницу так называемый IM модуль. Эта мелкая и занятная программуська занимает тем, что входит на ICQ сервер и начинает принимать (отправять) сообщения, и подчиняться внешним командам через ICQ. Если у программы, нет пароля для входа на сервер; или есть пароль, но через него слишком долго не получается войти на сервер - то программа самостоятельно выдумывает себе пароль и регистрирует новый UIN. Среди разных мелких достопримечательностей, в программе есть ещё одна замечатеьная функция. Она умеет погружать на компьютер файлы по HTTP протоколу - используя изумительную функцию стабильной загрузки файлов (проще выражаясь, при случайном разрыве соеденения - процедура соеденеяется с сервером заново и продолжает загрузку с прерванного места.. ещё проще это называется - дозакачкой). Ладно. Я тут отвлёкся на установку Фотошопа. Из головы вылетело что я ещё хотел сказать....

Команды модуля

Набор команд предусмотренный в этой программе - всего лишь формальность. Всегда можно добавить новые команды и уничтожить ненужные. В программе есть основной парсер команд - процеруда которая разделяет пришёдшую строку на команду и список аргументов, а так же смотрит какую команду нужно выполнить. После чего вызывает нужную процедуру. Всё что нужно сделать - это добавить команду в список :
  const char *list[]={
     "activate",
     "discontrol",
  ...

И добавить нужную процедуру :

   count--; stack1=stack+1; switch(n) {
   case  0: res=Cmd_Activate(stack1,count); break;
   case  1: res=Cmd_Discontrol(stack1,count); break;
   ...
   case  9: res=Output_Message("pong"); break;
   case 10: res=Cmd_SendTo(stack1,count,body); break;
   ...

В тело каждой отдельной функции можно передавать: набор параметров (stack1), число параметров (count), и текст принятой команды целиком (body). Где stack1 - это массив аргументов функции.

   struct arg_st {char*text;unsigned int n;}; 

Каждый аргумент выделен в отдельную символьную строчку, для для каждой такой символьной строчки записано её числовое значение. Сама процедура возвращает зачение bool. Если этот bool будет равен истине (например в время выполнения разорвался соккет), то программа закроет соеденение с ICQ сервером и попытается войти заново.

(activate)

Активация модуля. В тот момент когда модуль первый раз запустился и вошёл в сеть, то он стучится в аську и напоминает о своём присутствии. Для того чтобы модуль мог принимать какие либо команды, нужно ввести команду activate. Пароль я к ней пока-что не прикручивал.

p.s. в данный момент по умолчанию активация не нужна. Она запрашивает только когда вы даёте команду сменить хозяйский UIN.

discontrol <uin> <password>

Завершает работу IM модуля, а так же блокирует возможность его дальнейшого запуска. Команда эта приделана на крайний (очень крайний) случай. Для её выполнения необходимо знать UIN и пароль, который использует IM модуль в текущий момент.

get-account

Показывает текущий UIN и пароль, испоьзуемый IM модуем.

get-cliboard [size]

Показывает содержимое буфера обмена. В вариантах компилируемых под X-windows, и Photon(qnx) это пока что не работает. Буфер обмена под x-win вообще вещь очень замороченная, но я его обязательно сделаю. А вот под Photon мне так кажется функции буфера обмена вообще не функционируют. По краней мере к программисту эти функции относятся очень враждебно. Я ещё долго пытался ихний блокнот дизасемблировать вдоль и поперёк. Но похоже что ничего не получается. Подробности я опущу...

size максимальный размер выдаваемого куска в буфере обмена. Если у вас там например 100 кило текста сидит, то лучше в аську его не кидать. По умолчанию лимит 100 байт. Кроме того размер ограничен размером буфера отправки. Сейчас это где-то 1950 байт.

get-host-name

Показывает имя компьютера на котором установлен IM модуль.

get-tasks

Показывает список процессов запущеных в системе. В windows это делается просто перечислением окон открытых приложений. В BeOS просто выводом списка процессов (исключая системные сервера). В UNIX простая распечатка PS. Для x-win руки пока не доходили.

(new-account [:noret] [:unreg] <uin> <password>)

команда удалена из программы
Смена используемого UIN-а. Т.е. IM модуль просто регистрирует на сервере новый UIN и пользуется им в последствии. В качетве необязательных параметров можно указать свой пароль для регистрации. А так же заставить модуль уничтожить старый UIN, после перехода на новый.

new-password [<password>]

Смена пароля. Можно указать свой пароль, или модуль придумает его сам.

ping [<user_word>]

Проверка связи с IM модулем. Модуль отвечает словом 'pong' (как в IRC протоколе). Можно также указать слово, которые модуль напишет после 'pong'.

send-to

Позволяет переслать сообщение на другой UIN или список UIN-нов перечисленных через запятую. Само сообщение нужно написать во второй строке, после самой команды.

set-account [:unreg] [:noret] <uin> <password>

Даёт указывает модулю новый UIN и пароль для использования. Допускается использование флагов :

unreg - уничтожать старый UIN.

noret - не возвращаться на старый UIN в случае неудачного входа.

set-email <email>

Устанавливает почтовый адрес в инфе у используемого модулем UIN-а.

set-contact-list <uin> [ <uin> ...]

Временно устанавивает контакт лист IM модуля. Бредовая команда. IM модуль просто извещает хозяина о приходе или выходе из сети, людей занесённых в этот список. А также изменении online статуса пользователей. (подозреваю что команда эта глючит, но поймать эту ситуацию лично не могу).

set-limit

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

Работа функции загрузки с HTTP сервера, в траффике не учитывается.

set-status online|free|away|n/a|occupied|dnd|invisible

Устанавивает online статус модуля.

set-subcontrol-uin <uin>

Устанавливает хозяйский UIN для IM модуля. При смене хозяина, последний должен подтвердить свои права командой activate. Иначе при следующем запуске модуля (перезагрузке компьютера) - модуль вернётся к старому UIN-у.

statistic

Информация о истраченном трафике. А также о лимите на траффик.

start http:<url> | <filename>

Запускает указанную команду на компьютере, на котором установлен IM модуль. Можно указать аргументы командной строки. Если перед именем файла указать префикс http: или http:// то программа будет запускаться не с локального компьютера, а подгружаться с удалённого HTTP сервера.

unreg <uin> <password>

Убивает указанный UIN, если пароль к нему правильно указан.

version

Показывает версию модуля. Хотя не знаю зачем. Я эту версию всё равно не нумерую.

О погоде

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

Для тех кто хочет просто протокол изучить

Объясню открытым текстом. Официальной документации к протоколу никогда не существовало и не будет. Проще говоря он секретный. Всё на что вы можете разчитывать это на мелкие доки, написанные разными интузиастами. Хотя полной информации вы не найдёте нигде. Мало кто знает его до конца. А из тех кто знает о нём что-то, как правило некоторые вещи он представляет себе неправильно. Поэтому единственная вещь на которую вам надо опираться больше всего - это ваши собственные мозги. Лично мне в качестве краткого справочника больше всего нравится вот этот документ - ICQv7proto.zip. Хотя в нём не изложенны сами азы протокола (при желании их можно любым поисковиком найти).

icq.ini

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

Обрезанная версия

Более короткая версия для облегчения жизни. Поскольку поддерживать сразу две версии программы мне очень лень, при сильных изменениях она скорее всего будет просто стёрта. Основные отличия этой ветки:

Файлы

Стучать и писать сюда

lawnmower-man@mail.ru - моё мыло

133575351 - моя ICQ

Hosted by uCoz