запрос PG_CHAT_UIN

Больше
13 года 4 мес. назад #1 от rrrFer_
rrrFer_ создал тему: запрос PG_CHAT_UIN
согласно описанию:

if what = PG_CHAT_UIN // Get UIN of current chat tab
empty
possible replies:
1) PM_DATA
INT chat uin

в пятом байте должно быть значение PM_DATA:

#define PM_DATA 2 // posting datas (reply)

но там ноль(во всяком случае, в последней версии клиента - {а в старых версиях вроде-бы все нормально было} )
Все остальное с этим запросом нормально, если пропустить проверку пятого байта - то все верно возвращает клиент.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
13 года 4 мес. назад - 13 года 4 мес. назад #2 от rrrFer_
rrrFer_ ответил в теме RE: запрос PG_CHAT_UIN
я об вот таком коде:
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;
}
блок комментариев начинающийся с 25 строчки и был проверкой
Последнее редактирование: 13 года 4 мес. назад пользователем rrrFer_.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
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;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
13 года 4 мес. назад #4 от rrrFer_
rrrFer_ ответил в теме RE: запрос PG_CHAT_UIN
спасибо )

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: bassvazoozaDelphukdekTiMeTraSheRLaDyStRaNGed0CeNTRapid D
Время создания страницы: 0.251 секунд
Работает на Kunena форум