запрос PG_CHAT_UIN
- rrrFer_
- Не в сети
- Junior Member
Меньше
Больше
- Сообщений: 38
- Спасибо получено: 0
13 года 4 мес. назад #1
от rrrFer_
rrrFer_ создал тему: запрос PG_CHAT_UIN
согласно описанию:
Все остальное с этим запросом нормально, если пропустить проверку пятого байта - то все верно возвращает клиент.
в пятом байте должно быть значение PM_DATA:if what = PG_CHAT_UIN // Get UIN of current chat tab
empty
possible replies:
1) PM_DATA
INT chat uin
но там ноль(во всяком случае, в последней версии клиента - {а в старых версиях вроде-бы все нормально было} )#define PM_DATA 2 // posting datas (reply)
Все остальное с этим запросом нормально, если пропустить проверку пятого байта - то все верно возвращает клиент.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- rrrFer_
- Не в сети
- Junior Member
Меньше
Больше
- Сообщений: 38
- Спасибо получено: 0
13 года 4 мес. назад - 13 года 4 мес. назад #2
от rrrFer_
rrrFer_ ответил в теме RE: запрос PG_CHAT_UIN
я об вот таком коде:блок комментариев начинающийся с 25 строчки и был проверкой
NT RnQ_GetUINCurrentChatTab( void ) {
DWORD iAPos, iPos,
*pCommunication;
BYTE *bComm,
bAnswer[ANSW_LEN],
bMsgType;
INT iDestUIN,
iLen;
// -- отправка запроса клиенту
iAPos = 4;
bAnswer[ iAPos ++ ] = PM_GET;
bAnswer[ iAPos ++ ] = PG_CHAT_UIN;
iAPos -= 4;
memcpy( bAnswer, &iAPos, 4 );
pCommunication = funcCallback( ( DWORD* ) bAnswer );
// -- разбор ответа
if ( ! pCommunication )
return 0;
memcpy( &iLen, pCommunication, 4 );
iPos = 4;
bMsgType = bComm[ iPos ++ ];
//if( bMsgType != PM_DATA ) {
// MessageBoxA( 0, "", "Error RnQ_GetUINCurrentChatTab: PM_DATA", 0 );
// return 0;
//}
bComm = ( BYTE* ) ( pCommunication );
RQ_GetINT( bComm, &iPos, iLen, &iDestUIN );
return iDestUIN;
}
Последнее редактирование: 13 года 4 мес. назад пользователем rrrFer_.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Mikanoshi
- Не в сети
- Platinum Member
Меньше
Больше
- Сообщений: 1112
- Спасибо получено: 158
13 года 4 мес. назад #3
от Mikanoshi
Mikanoshi ответил в теме RE: запрос PG_CHAT_UIN
А почему проверка bComm идёт до того, как она задаётся?)
У меня такая проверка нормально работает:
У меня такая проверка нормально работает:
function _byte_at(p:pointer; ofs:integer=0):byte;
begin
inc( integer(p), ofs);
result:=byte(p^)
end;
function RQ_GetChatUIN:integer;
var
data:Pointer;
begin
data:=CallStr(AnsiChar(PM_GET)+AnsiChar(PG_CHAT_UIN));
if _byte_at(data, 4) = PM_DATA then
try Result := _int_at(data,5) except Result:=0 end else Result:=0;
end;
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- rrrFer_
- Не в сети
- Junior Member
Меньше
Больше
- Сообщений: 38
- Спасибо получено: 0
13 года 4 мес. назад #4
от rrrFer_
rrrFer_ ответил в теме RE: запрос PG_CHAT_UIN
спасибо )
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Модераторы: bass, vazooza, Delphuk, dek, TiMeTraSheR, LaDyStRaNGe, d0CeNT, Rapid D
Время создания страницы: 0.251 секунд