28.05.2007, 06:59 | #1 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
TICQClient - исправления, дополнения и прочее
В этой теме будут выкладываться исправления и дополнения к компоненту TICQClient от Кобана для Delphi.
Компонент, актуально работающий на 13.08.2010 скачать: TICQClient Пример работы с компонентом: скачать: СheatICQ Официальный хелп от coban2k скачать: TICQClientHelp.rar ============================== Оригинальный компонент (с демо): скачать Компонент с работающими прокси и кодировками скачать тут Компонент от Romen'a (с демо): - движок на ICQ - к архиве есть все необходимые модули (для WSocket'a от ICS 1.4, плюс из RxLib несколько модулей) - из компонента убрано все "лишнее" скачать Демки делались в Turbo Delphi 2006, поэтому если вы будете собирать их под Delphi 7 и ниже не забудте в насткойках проекта указать пути, иначе среда не найдет эти модули и будет ругаться на их отсутствие. 1) Project -> Options 2) Закладка Directories/Conditionals 3) -> Units output directory: Units -> Search path: ICQClient Последний раз редактировалось DjFly; 04.02.2012 в 20:23. |
01.05.2008, 22:59 | #202 |
Участник
Регистрация: 31.10.2003
Сообщений: 568
Репутация: 1627
|
TICQClient прекрасно работает в Borland C++ Builder
|
Плюсанул metal : |
14.05.2008, 08:44 | #203 |
Участник
Регистрация: 22.10.2007
Сообщений: 20
Репутация: 2
|
В этой теме иногда возникают вопросы про то, что такое SNAC FLAP TLV - подробнее про это можно прочитать на http://icq2000cc.hobi.ru/page1.html, так же описан более или менее структура протокола ICQ
|
14.05.2008, 18:09 | #204 |
Участник
|
.....
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR. Последний раз редактировалось .fry; 10.11.2008 в 00:24. |
Плюсанул .fry : |
20.05.2008, 18:31 | #205 |
Участник
Регистрация: 14.04.2008
Сообщений: 1
Репутация: 1
|
Не давно началсь проблема. Если написать команду
ICQClient.SSLActivate; То статусы других пользователей видны прекрасно, но ты не виден другим, типо в Оффе. Если же не писать, то всё наоборот... Раньше такого не было. Может кто помочь? |
27.05.2008, 17:19 | #208 |
Участник
Регистрация: 27.05.2008
Сообщений: 2
Репутация: 1
|
Спасибище за Х-Статусы! Сегодня вечерком попробую!
Кстати. Как насчёт дополнительных обыкновенных статусов, существующих в qip, таких как "Дома", "На работе", "Невидимый для всех" и т.д.? Последний раз редактировалось bibimij; 27.05.2008 в 17:21. Причина: Дополнить захотел |
15.06.2008, 21:30 | #212 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Посмотрел компонент от Romen'a. Мне понравился. Жаль, что раньше о таком не знал и работал на обычном.
Тем не менее, могу предложить свою доработку, с использованием советов yxu и других. TICQClient v.1.24 поддерживает XStatus (увы, пока что без надписи), получает от сервера OnStatusChange. Так же везде где я смотрел, почему-то код XStatus'а BUSINESS указан неверно. Пришлось отsniffать. Ну вот и ссылка: http://progs.volkov.spb.su/ticqclient/ Сейчас усердно работаю над тем, чтобы ставить надпись в XStatus. Подозрительные SNAC'и по этому поводу: SNAC(04,0B), SNAC(01,21), SNAC(01,13), SNAC(01,1E). Если кто подскажет, буду очень благодарен. |
Плюсанул Tsar_Ioann_XIII : |
15.06.2008, 21:52 | #213 | |
Регистрация: 27.06.2007
Сообщений: 311
ICQ: 888944 |
Цитата:
Код:
ICQClient.SetNewXStatus(X_BEER, 'Именно тут текст');
__________________
|
|
Плюсанул bART : |
15.06.2008, 22:28 | #214 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Что-то я запутался. Приведи пожалуйста исходник SetNewXStatus.
|
Плюсанул Tsar_Ioann_XIII : |
15.06.2008, 23:17 | #215 |
Регистрация: 27.06.2007
Сообщений: 311
ICQ: 888944 |
Код:
procedure TICQClient.SetNewXStatus(NewStat: TXStatus; NewStr: string); var pkt: TRawPkt; begin if not LoggedIn then exit; CreateCLI_SETNEWXSTATUS(@pkt, NewStat, NewStr, Fseq); FSock.SendData(pkt, pkt.Len); end; Его пост есть в это теме, там он всё подробно расписал.
__________________
|
Плюсанул bART : |
16.06.2008, 19:04 | #216 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Большое спасибо! Извиняюсь перед всеми, что меня пришлось тыкать носом.
Отдельная благодарность yxu (он просто гений анализа протокола). Добавлено через 21 час 17 минут Вчера у меня не получилось выпустить версию компонента 1.25, так как не заработала установка надписи к XStatus'у. Вот какой пакет шлётся: Код:
4500 005A 0C15 4000 8006 5591 C0A8 0121 CDBC 0972 0516 1446 7677 A9E6 5A05 C1FF 5018 FC8F 5708 0000 2A02 88EB 002C 0001 001E 0000 0000 0000 001D 001E 0002 0406 0004 5069 766F 000E 0010 8C50 DBAE 81ED 4786 ACCA 16CC 3213 C7B7 Код:
ICQClient.SetNewXStatus(X_BEER, 'Pivo'); Код:
(dopstr: x_beer; dopxstr: #$8C#$50#$DB#$AE#$81#$ED#$47#$86#$AC#$CA#$16#$CC#$32#$13#$C7#$B7), И ещё такой вопрос, ведь в Миранде и в QIP две надписи к XStatus'у - одна Title, а другая Message. А здесь мы ставим только одну надпись. А также пакет, который передавал QIP весит 236 байт Последний раз редактировалось Tsar_Ioann_XIII; 17.06.2008 в 16:21. Причина: Добавлено сообщение |
Плюсанул Tsar_Ioann_XIII : |
18.06.2008, 14:51 | #217 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Следует предположить, что если Iglpluvs писал код также, как я, то и пакет у него такой же.
Я проверил Мирандой - тоже не понимает. Вот если я просто ставлю (Capatibilities + DopXStr), используя SNAC(02,04), то всё работает, только надпись тут не поставишь... Добавлено через 2 часа 48 минут Так. С помощью ICQMenace я выяснил, что на надо менять слово icqmood на что-то другое. Последний раз редактировалось Tsar_Ioann_XIII; 18.06.2008 в 17:39. Причина: Добавлено сообщение |
Плюсанул Tsar_Ioann_XIII : |
18.06.2008, 22:27 | #218 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
Что то вы все перепутали. Итак: на данный момент существует два вида Хстатусов: старые и новые. Новые Хстатусы используются в icq 6 (ну и многих других клиентах уже), как выставлять их и подпись к ним написано выше. Старые Хстатусы, как ты сам написал выставляются подпись же к ним выставляется в SNAC(04,07), при запросе сервером вашего хстатуса вы посылаете спец сформированное xml сообщение с текстом хстатуса. Как видите осуществить подпись к старому хстатусу немного сложнее ;) и попросту может не понадобиться, т.к. многие клиенты начинают отказываться от него.
__________________
Лучший ICQ софт и не только - http://ухич.рф Онлайн чекеры - http://ухич.рф/checkers (Снова в строю :) |
Плюсанул yxu : |
19.06.2008, 11:17 | #219 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Огромное спасибо, yxu! Если бы я знал, как тут выставить тебе благодарность, я бы так и сделал.
Несмотря на всё, я попробую реализвать и старые и новые XStatus'ы в своей версии компонента. Новые, можно сказать, уже сделаны здесь на форуме; тыкаю носом в них, таких, как я: http://forum.asechka.ru/showpost.php...&postcount=210 - это на странице http://forum.asechka.ru/showthread.php?t=97186&page=9 . На всякий случай, для тех, кто будет возиться со старыми XStatus'ами, вот правильный BUSINESS: (Ident: 'BUSINESS'; Value: ($48, $8E, $14, $89, $8A, $CA, $4A, $08, $82, $AA, $77, $CE, $7A, $16, $52, $08)) Последний раз редактировалось Tsar_Ioann_XIII; 19.06.2008 в 13:01. Причина: Добавил инфу про старый XStatus BUSINESS |
Плюсанул Tsar_Ioann_XIII : |
19.06.2008, 11:47 | #220 |
Участник
Регистрация: 04.02.2008
Сообщений: 11
Репутация: 1
|
Уважаемые знатоки ICQ.
Юзаю патченый компонент совместно с сервером IServerD, протокол v.7, при получении offline сообщений периодически выскакивает сообщение об ошибке "Длина пакета превышает максимально-допустимую для протокола", можно ли обойти эту проблему в компоненте, так как сообщения, которые приходят в оффлайне очень важны. И если можно, то как это сделать? |
19.06.2008, 11:59 | #221 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
Открывай ICQClient.pas, ищи процедуру
Код:
procedure TICQNet.HandleFlapData(Buffer: Pointer; BufLen: LongWord); Код:
if FNewFlap.DataLen > 8192 then begin if Assigned(OnError) then OnError(Self, ERR_PROTOCOL, ICQLanguages[FErrLang].Translate(IMSG_EPROTO_LEN), IMSG_EPROTO_LEN); FSocket.Disconnect; Exit; end; З.Ы. Кто то уже меня об этом спрашивал, так что должно работать..
__________________
Лучший ICQ софт и не только - http://ухич.рф Онлайн чекеры - http://ухич.рф/checkers (Снова в строю :) |
Плюсанул yxu : |
19.06.2008, 13:33 | #222 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
По поводу заменить 8192, предложение не совсем верное. Ограничения есть не только в этой функции. Рациональнее было бы ввести глобальную константу типа Max_pkt_len = 8192 (другое число) и править остальные прописанные ограничения через нее.
__________________
Мой блог - Mac, Qt и немного Delphi. |
Плюсанул Sax-mmS : |
19.06.2008, 14:18 | #223 | |
Участник
Регистрация: 04.02.2008
Сообщений: 11
Репутация: 1
|
В указанном месте исправил, теперь выскакивает ошибка на следующем условии, текст сообщения "Recived malformed packet", после чего добросовестно отключается от сервера.
При пошаговой прогонке выяснил, что ошибка выскакивает на этом месте: Цитата:
Последний раз редактировалось Llirik81; 20.06.2008 в 08:31. Причина: добавлено |
|
19.06.2008, 22:07 | #224 |
Участник
Регистрация: 15.06.2008
Сообщений: 17
ICQ: 117868 Репутация: 34
|
Llirik81, извини, что перебиваю, я думаю тебе всё равно ответят.
Я выяснил, что ICQ6 использует только новые Хстатусы, qip8000 только старые, а qip8060 - и те, и другие. Тем не менее новые Хстатусы у меня не заработали. Тогда я переписал код вот так, чтоб пакеты были равны: Код:
procedure CreateCLI_SETNEWXSTATUS(Pkt: PRawPkt; XStat: T_NewXStatus; XStatStr: String; var Seq: Word); var lpkt: TRawPkt; s: String; begin PktInit(Pkt, 2, Seq); //Channel 2 PktSnac(Pkt, $01, $1E, $1E, 0); //Snac: Type x01/x1E, ID x000000$1E, Flags 0 PktInitRaw(@lpkt); PktInt(@lpkt, $0002, 2); //Type PktInt(@lpkt, $04, 1); //Flag S := StrToUTF8(XStatStr); PktInt(@lpkt, Length(S) + 4, 1); PktWStr(@lpkt, S); //Data PktInt(@lpkt, $0000, 2); //Type PktInt(@lpkt, $000E, 2); //Type PktInt(@lpkt, $00, 1); //Flag PktLStr(@lpkt, GetNewXStatus(XStat)); //Data PktTLV(Pkt, $1D, lpkt.len, @lpkt.Data); //TLV(1D) PktFinal(Pkt); //Finalize packet end; Я ставил такой статус - X_FUNNY, надпись - Превед медвед! Вот что слала ICQ6: Код:
Packet dump: 2a 02 0f 25 00 3d 00 01-00 1e 00 00 00 00 00 1e *..%.=.......... 00 1d 00 2f 00 02 04 1e-00 1a d0 9f d1 80 d0 b5 .../............ d0 b2 d0 b5 d0 b4 20 d0-bc d0 b5 d0 b4 d0 b2 d0 ...... ......... b5 d0 b4 21 00 00 00 0e-00 09 69 63 71 6d 6f 6f ...!......icqmoo 64 31 33 d13 Contents: 2A 02 0F 25 00 3D 00 01 00 1E 00 00 00 00 00 1E 00 1D 00 2F 00 02 04 1E 00 1A D0 9F D1 80 D0 B5 D0 B2 D0 B5 D0 B4 20 D0 BC D0 B5 D0 B4 D0 B2 D0 B5 D0 B4 21 00 00 00 0E 00 09 69 63 71 6D 6F 6F 64 31 33 00 (CLI_SETSTATUS): FLAP This is the FLAP header itself. This is not an individual packet, but a complete description of the fields in the FLAP header of every packet sent by both the server and the client. [ 2A (ID): This identifies this data as a FLAP. 02 (Channel): The channel to which this packet belongs. 0F 25 (Sequence): The FLAP sequence number. It is chosen at random before every connection and increased with every packet. This number is positive; wrap to zero when it becomes negative. 00 3D (Length): This is the length of the following data, the actual content of the FLAP. ] SNAС (01,1E) The data sent with a channel 2 FLAP. [ 00 01 (Family): The family this command belongs to. 00 1E (Command): The command to perform. 00 00 (Flags): Flags accompanying this command. Usually zero. 00 00 00 1E (Reference): This field is used to associate data from different packets. ] Data The data this SNAC contains. [ TLV(0x001D) The type of this TLV is 29; [ 00 1D (Type): 00 2F (Length): The length of the following data. 00 02 04 1E 00 1A D0 9F D1 80 D0 B5 D0 B2 D0 B5 D0 B4 20 D0 BC D0 B5 D0 B4 D0 B2 D0 B5 D0 B4 21 00 00 00 0E 00 09 69 63 71 6D 6F 6F 64 31 33 (Data): ] ] --- (C) coban2k (coban2k@mail.ru) Built using ICQMenace v0.9 beta (Sax-mmS) (http://www.ifud.ru) & TXT Exporter v1.1 Код:
Packet dump: 2a 02 5e 9a 00 3d 00 01-00 1e 00 00 00 00 00 1e *.^..=.......... 00 1d 00 2f 00 02 04 1e-00 1a d0 9f d1 80 d0 b5 .../............ d0 b2 d0 b5 d0 b4 20 d0-bc d0 b5 d0 b4 d0 b2 d0 ...... ......... b5 d0 b4 21 00 00 00 0e-00 09 69 63 71 6d 6f 6f ...!......icqmoo 64 31 33 d13 Contents: 2A 02 5E 9A 00 3D 00 01 00 1E 00 00 00 00 00 1E 00 1D 00 2F 00 02 04 1E 00 1A D0 9F D1 80 D0 B5 D0 B2 D0 B5 D0 B4 20 D0 BC D0 B5 D0 B4 D0 B2 D0 B5 D0 B4 21 00 00 00 0E 00 09 69 63 71 6D 6F 6F 64 31 33 6B (CLI_SETSTATUS): FLAP This is the FLAP header itself. This is not an individual packet, but a complete description of the fields in the FLAP header of every packet sent by both the server and the client. [ 2A (ID): This identifies this data as a FLAP. 02 (Channel): The channel to which this packet belongs. 5E 9A (Sequence): The FLAP sequence number. It is chosen at random before every connection and increased with every packet. This number is positive; wrap to zero when it becomes negative. 00 3D (Length): This is the length of the following data, the actual content of the FLAP. ] SNAС (01,1E) The data sent with a channel 2 FLAP. [ 00 01 (Family): The family this command belongs to. 00 1E (Command): The command to perform. 00 00 (Flags): Flags accompanying this command. Usually zero. 00 00 00 1E (Reference): This field is used to associate data from different packets. ] Data The data this SNAC contains. [ TLV(0x001D) The type of this TLV is 29; [ 00 1D (Type): 00 2F (Length): The length of the following data. 00 02 04 1E 00 1A D0 9F D1 80 D0 B5 D0 B2 D0 B5 D0 B4 20 D0 BC D0 B5 D0 B4 D0 B2 D0 B5 D0 B4 21 00 00 00 0E 00 09 69 63 71 6D 6F 6F 64 31 33 (Data): ] ] --- (C) coban2k (coban2k@mail.ru) Built using ICQMenace v0.9 beta (Sax-mmS) (http://www.ifud.ru) & TXT Exporter v1.1 Что же делать? Может надо какую-нибудь хитрую капабилити вписать?.. Последний раз редактировалось Tsar_Ioann_XIII; 20.06.2008 в 13:45. Причина: Описка в тескте |
Плюсанул Tsar_Ioann_XIII : |
20.06.2008, 13:33 | #225 |
Участник
Регистрация: 12.12.2007
Сообщений: 6
Репутация: 2
|
здравствуйте! Такая проблема: Пишу icqClient. Дошел до регистрации нового uin. Отправляю snac($170C) с запросом на картинку. Получаю snac($170D) c картинкой. Там читаем TLV($0001) он нам не нужен. Потом идет TLV($0002) вот в нем как раз то и картинка с паролем.
Я не могу превратить эти 3000 байт в картинку. Помогите, кто встречался с такой проблемой. |