Witam,
czy mógłby mi ktos pomóc wypełnic strukturę logowania na gg v8.0 bo ja juz próbuje klika dni i nie wiem czemu nie działa! Wysyłam taki pakiet i nie dostaje żadnej odpowiedzi!
Struktura 7.0 działa, dostaje odpowiedz i wszystko ok, ale w niej nie moge zmienic status pewnie przez to że potem używam struktury zmiany statusy z gg 8.0 :(
class GGLogin80OutPacket : IGGPacket
{
private int uin; /* numer Gadu-Gadu */
private byte[] language; /* język: "pl" */
private byte hash_type = GGConstans.GG_LOGIN_HASH_GG32; /* rodzaj funkcji skrótu hasła */
private byte[] hash; /* skrót hasła dopełniony \0 */
private int status = GGConstans.GG_STATUS_AVAIL; /* początkowy status połączenia */
private byte unknown1 = 0x00; /* 0x00 */
private int flags = 0; /* flagi (przeznaczenie nieznane) */
private int features = 0x00000007; /* opcje protokołu (0x00000007)*/
private int local_ip = 0; /* lokalny adres połączeń bezpośrednich (nieużywany) */
private short local_port = 8074; /* lokalny port połączeń bezpośrednich (nieużywany) */
private int external_ip = 0; /* zewnętrzny adres (nieużywany) */
private short external_port = 8074; /* zewnętrzny port (nieużywany) */
private byte image_size = 0; /* maksymalny rozmiar grafiki w KB */
private byte unknown2 = 0xbe; /* 0x64 */
private int version_len = GGConstans.DEFAULT_GG_VERSION; /* długość ciągu z wersją (0x21) */
private byte[] version; /* "Gadu-Gadu Client build 8.0.0.7669" (bez \0) */
private int description_size; /* rozmiar opisu */
private byte[] description; /* opis (nie musi wystąpić, bez \0) */
private int time = 0; //dopisac obsluge time
public GGLogin80OutPacket()
{
this.version = new byte[GGConstans.GG_VERSION80.Length];
for (int i = 0; i < GGConstans.GG_VERSION80.Length ; i++ )
{
this.version[i] = Convert.ToByte(GGConstans.GG_VERSION80[i]);
}
this.Language = "pl";
}
public int Uin
{
get
{
return uin;
}
set
{
uin = value;
}
}
public string Language
{
get
{
try
{
return BitConverter.ToString(language);
}
catch (Exception)
{
return "";
}
}
set
{
language = new byte[value.Length];
for (int i = 0; i < value.Length; i++)
language[i] = Convert.ToByte(value[i]);
}
}
public byte HashType
{
set
{
hash_type = value;
}
get
{
return hash_type;
}
}
public byte[] Hash
{
get
{
return hash;
}
set
{
hash = new byte[64]; // hash o dlugosci 64 bajtow
for (int i = 0; i < value.Length; i++) // przepisujemy tylko tyle bajtow ile wyszedl nasz hash
hash[i] = value[i]; // reszta bedzie zerami
}
}
public int Status
{
get
{
return status;
}
set
{
status = value;
}
}
public int LocalIp
{
get
{
return local_ip;
}
set
{
local_ip = value;
}
}
public short LocalPort
{
get
{
return local_port;
}
set
{
local_port = value;
}
}
public int ExternalIp
{
get
{
return external_ip;
}
set
{
external_ip = value;
}
}
public short ExternalPort
{
get
{
return external_port;
}
set
{
external_port = value;
}
}
public byte ImageSize
{
get
{
return image_size;
}
set
{
image_size = value;
}
}
public string Description
{
get
{
Encoding enc = Encoding.Unicode;
if (description == null) return "";
return enc.GetString(Encoding.Convert(Encoding.GetEncoding("windows-1250"), Encoding.Unicode, description));
}
set
{
description = new byte[value.Length/*+ 1*/];
Encoding enc = Encoding.GetEncoding("windows-1250");
byte[] cp1250;
cp1250 = enc.GetBytes(value);
for (int i = 0; i < value.Length; i++)
description[i] = cp1250[i];
this.description_size = value.Length; // podstawiamy wielkosc opisu
}
}
public int Description_size
{
get
{
try
{
return description_size; // jesli nie została zaalokowana pamięc rzyc wyjatek
}
catch (Exception)
{
return 0; // i zwroc 0 jako wielkosc tablicy
}
}
/*set
{
description_size = value;
}*/
}
public int getSize()
{
return 9 * sizeof(int) + 3 * sizeof(byte) + 64 * sizeof(byte) + 2 * sizeof(short) * Language.Length + Description.Length + this.version.Length;
}
}
A wysyłanie na strumien zrealizowałem tak
BinaryWriter bout = new BinaryWriter(outs);
int i;
bout.Write(uin);
for (i = 0; i < this.language.Length; i++)
{
outs.WriteByte(this.language[i]);
}
bout.Write(hash_type);
for (i = 0; i < this.hash.Length; i++)
{
outs.WriteByte(this.hash[i]);
}
bout.Write(status);
bout.Write(unknown1);
bout.Write(flags);
bout.Write(features);
bout.Write(local_ip);
bout.Write(local_port);
bout.Write(external_ip);
bout.Write(external_port);
bout.Write(image_size);
bout.Write(unknown2);
bout.Write(version_len);
for (i = 0; i < version.Length; i++)
{
outs.WriteByte(version[i]);
}
bout.Write(description_size);
for (i = 0; i < Description.Length; i++)
{
bout.Write(Description[i]);
}
bout.Write(time);
Pozdrawiam i czekam na jakies pomsły. :)