[C++] Gadu-Gadu, lista kontaktów oraz ANSI -> UTF-16 -> UTF-8
Witam, mam dość dziwny problem z listą kontaktów, iż gdy wysyłam pakiet z "prośbą" o otrzymanie listy kontaktów to ją otrzymuję, lecz nie pełną.
Oczywiście mam funkcję, która odbiera wszystkie dane.
Od razu mówię, że odbieranie pakietów działa normalnie.
P.S.
Po około 10 próbach wysyłania próśb otrzymuję pełną listę.
Korzystam z protokołu 8.
Jakieś pomysły?
Ktoś mógł by pomóc również skonwertować tekst z ANSI do UTF-16, a następnie do UTF-8?
Pozdrawiam, Czepek!
Witam, mam dość dziwny problem z listą kontaktów, iż gdy wysyłam pakiet z "prośbą" o otrzymanie listy kontaktów to ją otrzymuję, lecz nie pełną.
Oczywiście mam funkcję, która odbiera wszystkie dane.
PHP:
void Protocol::receivePackets()
{
if(!isConnected())
return;
gg_header recvPacket;
if(trueCon->recvFrom((char*)&recvPacket, sizeof(gg_header)) != SOCKET_ERROR)
{
switch(recvPacket.type)
{
case GG_USERLIST_REPLY:
{
addConsoleMsg(">> Otrzymano pakiet, który wysyła listę kontaktów (%i) !", recvPacket.length);
gg_userlist_reply reply;
int size = trueCon->recvAll((char*)&reply, recvPacket.length);
addConsoleMsg(">> Size: %i", size);
std::string list;
switch(reply.type)
{
case GG_USERLIST_GET_MORE_REPLY: //begin
addConsoleMsg(">> Otrzymano początek listy konatków");
list += reply.request;
break;
case GG_USERLIST_GET_REPLY: //end
addConsoleMsg(">> Otrzymano koniec listy konatków");
list += reply.request;
break;
default:
//addConsoleMsg(">> Otrzymano coś innego! 0x%X", reply.type);
break;
}
FILE* file = fopen("Kontakty.txt", "w+");
fprintf(file, "%s", reply.request);
fclose(file);
break;
}
default:
//addConsoleMsg(">> Odebrano nieznany pakiet! (0x%X)", recvPacket.type);
break;
}
}
}
PHP:
int Connection::recvFrom(char* recvBuffer, int recvBufferLength)
{
return recv(sock, recvBuffer, recvBufferLength, 0);
}
int Connection::recvAll(char* recvBuffer, int recvBufferLength)
{
std::string tempBuffer;
int tempSize;
int fullSize = 0;
do
{
tempSize = recvFrom(recvBuffer, recvBufferLength);
fullSize += tempSize;
tempBuffer += recvBuffer;
}while(fullSize > recvBufferLength);
memcpy(recvBuffer, tempBuffer.c_str(), tempBuffer.size());
return tempBuffer.size();
}
Od razu mówię, że odbieranie pakietów działa normalnie.
P.S.
Po około 10 próbach wysyłania próśb otrzymuję pełną listę.
Kod:
>> Otrzymano pakiet, który wysyła listę kontaktów (137) !
>> Size: 129
>> Otrzymano pakiet, który wysyła listę kontaktów (137) !
>> Size: 137
>> Otrzymano koniec listy konatków
Korzystam z protokołu 8.
Jakieś pomysły?
Ktoś mógł by pomóc również skonwertować tekst z ANSI do UTF-16, a następnie do UTF-8?
Pozdrawiam, Czepek!
Ostatnia edycja: