ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование

Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal

 
 
Опции темы Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.48.
Старый 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.
Sax-mmS вне форума  
Плюсанули Sax-mmS — 3 :
Старый 03.02.2008, 22:21   #151
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Spide®, есть такая процедурка.
Код:
procedure TICQCLient.SendAuthResponse(UIN: LongWord; Authorize: Boolean; Reason:string);
yxu вне форума  
Плюсанул yxu :
Старый 04.02.2008, 12:28   #152
Участник
 
Регистрация: 04.02.2008
Сообщений: 11

Репутация: 1
По умолчанию

Доброго времени суток.
У меня возникла проблема: после перехода с оригинального компонента на последнюю версию перестала работать команда SendMessageAdvanced. Сообщение отправляется, но абоненту приходит пустое сообщение.
Llirik81 вне форума  
Старый 11.02.2008, 08:11   #153
Участник
 
Регистрация: 11.02.2008
Сообщений: 1

Репутация: 1
По умолчанию Поддержка хСтатусов

В ICQClient вставляете это
Цитата:
procedure TICQClient.SetXStatus(xstat: byte);
var
pkt: TRawPkt;
begin
if not LoggedIn then exit;
CreateCLI_SETXSTATUS(@pkt, xstat, Fseq);
FSock.SendData(pkt, pkt.Len);
end;
где xstat - номер по порядку в списке статусов

В ICQWorks вставляете это
Цитата:
procedure adddata(Pkt: PRawPkt; L: Word; V: array of byte);
var i: byte;
begin
for I := 0 to l - 1 do
PktInt(Pkt, V[i], 1);
end;

procedure CreateCLI_SETXSTATUS(Pkt: PRawPkt; const XStatus: byte; var Seq: Word);
var i: byte;
begin
PktInit(Pkt, 2, Seq); //Channel 2
PktSnac(Pkt, $02, $04, 0, 0); //Snac: Type x02/x04, ID x0000, Flags 0

PktInt(Pkt, 5, 2); //Add type
if XStatus>0 then PktInt(Pkt, length(caps)+16, 2) //Add length
else PktInt(Pkt, length(caps), 2);

adddata(Pkt, length(caps), caps); //User capabilities
if XStatus>0 then adddata(Pkt, 16, x_Status[XStatus].Value); //xStatus если указан

PktFinal(Pkt); //Finalize packet
end;
Лучше вынести список capabilities перед procedure CreateCLI_SETUSERINFO(Pkt: PRawPkt; var Seq: Word);

Список статусов
Цитата:
type
Tx_Status = record
ident: string;
value: array [0..$F] of byte;
end;

const
x_Status: array [1..35] of Tx_Status =
(
(Ident: 'ANGRY'; Value: ($01, $D8, $D7, $EE, $AC, $3B, $49, $2A, $A5, $8D, $D3, $D8, $77, $E6, $6B, $92)),
(Ident: 'DUCK'; Value: ($5A, $58, $1E, $A1, $E5, $80, $43, $0C, $A0, $6F, $61, $22, $98, $B7, $E4, $C7)),
(Ident: 'TIRED'; Value: ($83, $C9, $B7, $8E, $77, $E7, $43, $78, $B2, $C5, $FB, $6C, $FC, $C3, $5B, $EC)),
(Ident: 'PARTY'; Value: ($E6, $01, $E4, $1C, $33, $73, $4B, $D1, $BC, $06, $81, $1D, $6C, $32, $3D, $81)),
(Ident: 'BEER'; Value: ($8C, $50, $DB, $AE, $81, $ED, $47, $86, $AC, $CA, $16, $CC, $32, $13, $C7, $B7)),
(Ident: 'THINK'; Value: ($3F, $B0, $BD, $36, $AF, $3B, $4A, $60, $9E, $EF, $CF, $19, $0F, $6A, $5A, $7F)),
(Ident: 'EAT'; Value: ($F8, $E8, $D7, $B2, $82, $C4, $41, $42, $90, $F8, $10, $C6, $CE, $0A, $89, $A6)),
(Ident: 'TV'; Value: ($80, $53, $7D, $E2, $A4, $67, $4A, $76, $B3, $54, $6D, $FD, $07, $5F, $5E, $C6)),
(Ident: 'FRIENDS'; Value: ($F1, $8A, $B5, $2E, $DC, $57, $49, $1D, $99, $DC, $64, $44, $50, $24, $57, $AF)),
(Ident: 'COFFEE'; Value: ($1B, $78, $AE, $31, $FA, $0B, $4D, $38, $93, $D1, $99, $7E, $EE, $AF, $B2, $18)),
(Ident: 'MUSIC'; Value: ($61, $BE, $E0, $DD, $8B, $DD, $47, $5D, $8D, $EE, $5F, $4B, $AA, $CF, $19, $A7)),
(Ident: 'BUSINESS'; Value: ($48, $8E, $14, $89, $5C, $63, $38, $61, $CA, $4A, $08, $82, $AA, $77, $CE, $7A)),
(Ident: 'CINEMA'; Value: ($10, $7A, $9A, $18, $12, $32, $4D, $A4, $B6, $CD, $08, $79, $DB, $78, $0F, $09)),
(Ident: 'FUNNY'; Value: ($6F, $49, $30, $98, $4F, $7C, $4A, $FF, $A2, $76, $34, $A0, $3B, $CE, $AE, $A7)),
(Ident: 'PHONE'; Value: ($12, $92, $E5, $50, $1B, $64, $4F, $66, $B2, $06, $B2, $9A, $F3, $78, $E4, $8D)),
(Ident: 'GAMES'; Value: ($D4, $A6, $11, $D0, $8F, $01, $4E, $C0, $92, $23, $C5, $B6, $BE, $C6, $CC, $F0)),
(Ident: 'COLLEGE'; Value: ($60, $9D, $52, $F8, $A2, $9A, $49, $A6, $B2, $A0, $25, $24, $C5, $E9, $D2, $60)),
(Ident: 'SHOP'; Value: ($63, $62, $73, $37, $A0, $3F, $49, $FF, $80, $E5, $F7, $09, $CD, $E0, $A4, $EE)),
(Ident: 'SICK'; Value: ($1F, $7A, $40, $71, $BF, $3B, $4E, $60, $BC, $32, $4C, $57, $87, $B0, $4C, $F1)),
(Ident: 'SLEEP'; Value: ($78, $5E, $8C, $48, $40, $D3, $4C, $65, $88, $6F, $04, $CF, $3F, $3F, $43, $DF)),
(Ident: 'SURF'; Value: ($A6, $ED, $55, $7E, $6B, $F7, $44, $D4, $A5, $D4, $D2, $E7, $D9, $5C, $E8, $1F)),
(Ident: 'INTERNET'; Value: ($12, $D0, $7E, $3E, $F8, $85, $48, $9E, $8E, $97, $A7, $2A, $65, $51, $E5, $8D)),
(Ident: 'WORK'; Value: ($BA, $74, $DB, $3E, $9E, $24, $43, $4B, $87, $B6, $2F, $6B, $8D, $FE, $E5, $0F)),
(Ident: 'TYPING'; Value: ($63, $4F, $6B, $D8, $AD, $D2, $4A, $A1, $AA, $B9, $11, $5B, $C2, $6D, $05, $A1)),
(Ident: 'UNK'; Value: ($2C, $E0, $E4, $E5, $7C, $64, $43, $70, $9C, $3A, $7A, $1C, $E8, $78, $A7, $DC)),
(Ident: 'PPC'; Value: ($10, $11, $17, $C9, $A3, $B0, $40, $f9, $81, $AC, $49, $E1, $59, $FB, $D5, $D4)),
(Ident: 'MOBILE'; Value: ($16, $0C, $60, $BB, $DD, $44, $43, $f3, $91, $40, $05, $0F, $00, $E6, $C0, $09)),
(Ident: 'MAN'; Value: ($64, $43, $C6, $AF, $22, $60, $45, $17, $B5, $8C, $D7, $DF, $8E, $29, $03, $52)),
(Ident: 'WC'; Value: ($16, $F5, $B7, $6F, $A9, $D2, $40, $35, $8C, $C5, $C0, $84, $70, $3C, $98, $FA)),
(Ident: 'POISK'; Value: ($63, $14, $36, $FF, $3F, $8A, $40, $D0, $A5, $CB, $7B, $66, $E0, $51, $B3, $64)),
(Ident: 'GEOMETR'; Value: ($B7, $08, $67, $F5, $38, $25, $43, $27, $A1, $FF, $CF, $4C, $C1, $93, $97, $97)),
(Ident: 'LOVE'; Value: ($DD, $CF, $0E, $A9, $71, $95, $40, $48, $A9, $C6, $41, $32, $06, $D6, $F2, $80)),
(Ident: 'RuSeacrh'; Value: ($D4, $E2, $B0, $BA, $33, $4E, $4F, $A5, $98, $D0, $11, $7D, $BF, $4D, $3C, $C8)),
(Ident: 'RuLove'; Value: ($CD, $56, $43, $A2, $C9, $4C, $47, $24, $B5, $2C, $DC, $01, $24, $A1, $D0, $CD)),
(Ident: 'RuJournal'; Value: ($00, $72, $D9, $08, $4A, $D1, $43, $DD, $91, $99, $6F, $02, $69, $66, $02, $6F))
);
Добавлено через 6 минут
Только я не могу понять почему Snac030B приходит другого формата нежели в другие клиенты (например в QIP)
Т.е. там есть capabilities клиента, но нет xСтатусов :(

Последний раз редактировалось derilla; 11.02.2008 в 08:18. Причина: Добавлено сообщение
derilla вне форума  
Старый 11.02.2008, 10:00   #154
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Потому что нужно засылать при коннекте определенный набор capabilities, если это не делать сервак будет обрезать пакет Snac03,0B. Попробуй засылать теже что и у квипа и все будет норм.
yxu вне форума  
Плюсанул yxu :
Старый 12.02.2008, 11:41   #155
Участник
 
Регистрация: 25.01.2008
Сообщений: 7

Репутация: 1
По умолчанию

Когда происходит смена статуса у UIN из КЛ из разных клиентов почему-то приходит различная переменная status для одного и тогоже статуса в клиентах (например away в двух клиентах приходит по разному)... еще почему то не меняется статус если уходит в оффлайн или в невид((((
nkarataev вне форума  
Старый 12.02.2008, 14:09   #156
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Может для начала начнете выкладывать какие кусочки дампа снифера или кода? Ибо по вашим словам причин может быть уйма от непонимания каких то кусков протокола до корявого исполнения кода. Опять же с каким КЛ вы работаете - серверным или локальным? Кароче без кусков кода, если ты чего то там правил или без сниферного дампа интересующего места в пакете безперспективно задавать такие вопросы.
yxu вне форума  
Плюсанул yxu :
Старый 13.02.2008, 03:29   #157
Участник
 
Аватар для SnakeV1.0
 
Регистрация: 24.08.2007
Сообщений: 32

Репутация: 3
По умолчанию

Цитата:
Сообщение от nkarataev Посмотреть сообщение
Когда происходит смена статуса у UIN из КЛ из разных клиентов почему-то приходит различная переменная status для одного и тогоже статуса в клиентах (например away в двух клиентах приходит по разному)... еще почему то не меняется статус если уходит в оффлайн или в невид((((
Статус будет менятся при смене статуса, если юзер уходит уходит в оффлайн используй OnUserOffline
SnakeV1.0 вне форума  
Старый 18.02.2008, 19:01   #158
Участник
 
Регистрация: 18.02.2008
Сообщений: 1

Репутация: 1
По умолчанию Отправить файл

Помогите разобратся с отправкой файла. Пример из хелпа не работает.
Идеально было б - получит кусок рабочего кода.
Yaroslav555 вне форума  
Старый 19.02.2008, 22:40   #159
Участник
 
Регистрация: 10.02.2008
Сообщений: 9

Репутация: 4
По умолчанию

Вопрос к знатокам: не могу разобраться какой пакет нужно слать для того чтобы можно было узнать дату последнего изменения инфы. И снифер запускал и пакет видел, только в оригинальном компоненте не нашел процедуры.
yxu знаю ты делал что-то подобное. Отзовитесь плиз.
__wda вне форума  
Старый 20.02.2008, 08:50   #160
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Поковыряй исходники AIMICQ VanityInfo от AURа. Там он хитрый snac 01,0e посылает и парсит ответный snac 01,0f, где в TLV($0026) и находится Profile update time, если конешно я тебя правильно понял и тебе эта дата нужна ;)
yxu вне форума  
Плюсанул yxu :
Старый 20.02.2008, 10:45   #161
Участник
 
Регистрация: 10.02.2008
Сообщений: 9

Репутация: 4
По умолчанию

Цитата:
Сообщение от yxu Посмотреть сообщение
эта дата нужна
Да именно это мне и нужно, СПАСИБО.
__wda вне форума  
Старый 20.02.2008, 13:29   #162
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

.....
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.

Последний раз редактировалось .fry; 09.11.2008 в 23:49.
.fry вне форума  
Плюсанул .fry :
Старый 20.02.2008, 22:20   #163
Участник
 
Регистрация: 10.02.2008
Сообщений: 9

Репутация: 4
По умолчанию

Цитата:
Сообщение от .fry Посмотреть сообщение
гы, а я поиском её ищу, Snac 15x02 4010 вроде, там много интересного можно найти..
я запустил icqmenacev0.9beta и тоже увидел что шлется снак 15,02 (я не 01,0e), а в ответ 15,03 (а не 01,0f). Ничего не пойму.
__wda вне форума  
Старый 13.03.2008, 19:46   #164
Участник
 
Регистрация: 13.03.2008
Сообщений: 2

Репутация: 1
По умолчанию

Уважаемые, кто-нибудь использовал это совместно с KOL (http://kolmck.net) ?
Splash вне форума  
Старый 14.03.2008, 07:45   #165
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

Splash, нет. Но компонент можно собрать без подвязки на VCL с директивой NO_FORMS, вроде. Не исключено, что будет работать.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Плюсанул Sax-mmS :
Старый 14.03.2008, 11:53   #166
Участник
 
Регистрация: 13.03.2008
Сообщений: 2

Репутация: 1
По умолчанию

Sax-mmS

Запустить-то можно и без форм. В полезности той директивы, кстати, сомневаюсь.
Вопрос в другом - как события обрабатывать.
Splash вне форума  
Старый 23.03.2008, 22:29   #167
Участник
 
Регистрация: 12.12.2007
Сообщений: 6

Репутация: 2
По умолчанию

Народ! А не подскажете, в какой Snac надо послать, чтобы поменять пункт в своих настройках защиты про авторизацию? Ну и за одно, как смотреть, какой сейчас стоит. Сам думаю, что все должно быть в Snac13 06, но инфы нету.
Alex14 вне форума  
Старый 24.03.2008, 00:47   #168
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

.....
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.

Последний раз редактировалось .fry; 09.11.2008 в 23:59.
.fry вне форума  
Плюсанул .fry :
Старый 24.03.2008, 09:34   #169
Участник
 
Регистрация: 06.01.2008
Сообщений: 144

Репутация: 84
По умолчанию

При разрыве коннекта, странно но невозникает никакого события, как сделать реконнект?
pupk1n вне форума  
Старый 24.03.2008, 10:46   #170
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

.....
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.

Последний раз редактировалось .fry; 09.11.2008 в 23:59. Причина: Добавлено сообщение
.fry вне форума  
Плюсанул .fry :
Старый 24.03.2008, 12:04   #171
Участник
 
Аватар для q1p
 
Регистрация: 23.04.2007
Сообщений: 121

ICQ: 151516

Репутация: 209
По умолчанию

если на таймере держать SendKeepAlive то при разрыве соединения сработает FSock.OnDisconnect
q1p вне форума  
Старый 24.03.2008, 18:22   #172
Участник
 
Регистрация: 12.12.2007
Сообщений: 6

Репутация: 2
По умолчанию

.fry чего то изменение настроек с авторизацией SetAutorization не происходит. Кажется, сервер не хочет изменять, потому что вместо ответа с Type 07DA приходит ответ с Type 07DO, ну и последний байт 14, вместо 0A
Запрос: 00 15 00 02 00 01 00 54 00 02 00 01 00 10 0E 00 2E FB 4C 1C D0 07 02 00 24 04 00 00 01 00
Ответ: 00 15 00 03 00 00 00 54 00 02 00 01 00 0D 0B 00 2E FB 4C 1C D0 07 02 00 24 04 14
подскажи, чего делать?
Alex14 вне форума  
Старый 25.03.2008, 09:57   #173
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Alex14, т.к. компанент старый довольно таки, то и функции там многие устарели, в том числе и данная. Как вариант берешь в руки снифер icqmenace и вперед, снифаешь, сравниваешь.
А решение твоей проблемы такое, открываешь ICQWorks.pas, ищешь procedure CreateCLI_METASETPERMISSIONS и заменяешь на следущее(не тестил, ибо пока некогда и негде:)
Код:
{Set permissions.}
procedure CreateCLI_METASETPERMISSIONS(Pkt: PRawPkt; UIN: LongWord; AuthorizationRequired, WebAware: Boolean; var Seq, Seq2: Word);
var
  lpkt: TRawPkt;
begin
  PktInitRaw(@lpkt);
  PktInt(@lpkt, $3a0c, 2);                      
  PktInt(@lpkt,$030c, 2);
  PktInt(@lpkt, Ord(not AuthorizationRequired), 1); //Authorization required?
  PktInt(@lpkt,$02f8, 2);
  PktInt(@lpkt, Ord(WebAware), 1);              //Webaware?
  CreateCLI_TOICQSRV(Pkt, UIN, $07D0, @lpkt, lpkt.Len, Seq, Seq2); //Incapsulate in CLI_TOICQSRV
end;
Если не будет работать, поснифай, хотя по идее все должно..
yxu вне форума  
Плюсанул yxu :
Старый 25.03.2008, 22:46   #174
Участник
 
Регистрация: 12.12.2007
Сообщений: 6

Репутация: 2
По умолчанию

Цитата:
Сообщение от yxu Посмотреть сообщение
Alex14, т.к. компанент старый довольно таки, то и функции там многие устарели, в том числе и данная. Как вариант берешь в руки снифер icqmenace и вперед, снифаешь, сравниваешь.
А решение твоей проблемы такое, открываешь ICQWorks.pas, ищешь procedure CreateCLI_METASETPERMISSIONS и заменяешь на следущее(не тестил, ибо пока некогда и негде:)
Код:
{Set permissions.}
procedure CreateCLI_METASETPERMISSIONS(Pkt: PRawPkt; UIN: LongWord; AuthorizationRequired, WebAware: Boolean; var Seq, Seq2: Word);
var
  lpkt: TRawPkt;
begin
  PktInitRaw(@lpkt);
  PktInt(@lpkt, $3a0c, 2);                      
  PktInt(@lpkt,$030c, 2);
  PktInt(@lpkt, Ord(not AuthorizationRequired), 1); //Authorization required?
  PktInt(@lpkt,$02f8, 2);
  PktInt(@lpkt, Ord(WebAware), 1);              //Webaware?
  CreateCLI_TOICQSRV(Pkt, UIN, $07D0, @lpkt, lpkt.Len, Seq, Seq2); //Incapsulate in CLI_TOICQSRV
end;
Если не будет работать, поснифай, хотя по идее все должно..
Спасибо, очень помоu снифер. Вообще, там вместо PktInt(@lpkt, $3a0c, 2); надо было писать LE TLV(030С), и вместо PktInt(@lpkt,$02f8, 2); LE TLV(02F8)
Alex14 вне форума  
Старый 26.03.2008, 20:41   #175
Участник
 
Регистрация: 26.03.2008
Сообщений: 6

Репутация: 1
По умолчанию

Нужно зарегистрировать нового пользователя- функция
procedure SSLAddUser(GroupID, UserID: Word; UIN, Name, SMSNumber: String; Authorize, UpdateUser: Boolean)
Можно ли как-то найти свободный UserID? Или как загрузить серверный КЛ чтобы был ЮИН и идентификатор в списке, чтобы потом можно было найти свободный?
Mikel вне форума  
 

Метки
delphi, ticqclient

Опции темы
Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 15:41.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи