diff -Naur vicq.orig/Net/vICQ/vICQ.pm vicq/Net/vICQ/vICQ.pm --- vicq.orig/Net/vICQ/vICQ.pm Fri Aug 23 18:29:05 2002 +++ vicq/Net/vICQ/vICQ.pm Mon Feb 20 18:05:11 2006 @@ -579,7 +579,7 @@ push(@{$Responce->{Data_Load}}, _int_to_bytes(2, 32)); foreach (0x09461349,0x4c7f11d1,0x82224445,0x53540000, - 0x09461344,0x4c7f11d1,0x82224445,0x53540000) + 0x09461344, 0x4c7f11d1,0x82224445,0x53540000) # 0x97B12751, 0x243C4334, 0xAD22D6AB, 0xF73F1492, # 0x2E7A6475, 0xFADF4DC8, 0x886FEA35, 0x95FDB6DF) { @@ -1614,10 +1614,17 @@ $Refined->{Sender} = _bytes_to_str($event->{Data_Load}, $i, $DataLength);$i += $DataLength + 4; $Refined->{MessageType} = "unknown:" . $Refined->{SenderType}; - ($Refined, $i) = _Read_TLV($event->{Data_Load}, 2, $i, $Refined, _bytes_to_int($event->{Data_Load}, $i-4, 4)); - if($Refined->{SenderType} == 1) + # ($Refined, $i) = _Read_TLV($event->{Data_Load}, 2, $i, $Refined, _bytes_to_int($event->{Data_Load}, $i-4, 4)); + ($Refined, $i) = _Read_TLV($event->{Data_Load}, 2, $i, $Refined, 10000); + print "==> SenderType = '$Refined->{SenderType}'\n" if $Me->{_Debug}; + if(($Refined->{SenderType} == 1)) { - if ($Refined->{Encoded_Message}) { + $Refined->{Message_Encoding} = _bytes_to_int($event->{Data_Load}, 18, 2); # $i+=2; + print "==> Message_Encoding = $Refined->{Message_Encoding}\n" if $Me->{_Debug}; + if ($Refined->{Encoded_Message} && $Refined->{Message_Encoding} == 2){ + print "Encoded_Message: " . $Refined->{Encoded_Message} . "\n" if $Me->{_Debug}; + + #this is a weird ass message, so decode it.. my @Encoded_Message = split(/ /, $Refined->{Encoded_Message}); undef $Refined->{Encoded_Message}; @@ -1639,10 +1646,32 @@ _Decode_Tagged_Text($Refined->{TaggedDataString}, $Refined); } return ($Refined); + } elsif ($Refined->{Encoded_MessageOld} && $Refined->{Message_Encoding} == 1) { +# print "Encoded_MessageOld = " . $Refined->{Encoded_MessageOld} . "\n"; + + my @Encoded_Message = split(/ /, $Refined->{Encoded_MessageOld}); + my $DataLength = $#Encoded_Message + 1 - 12; +# print "DataLength = $DataLength \n"; + + $Refined->{MessageType} = "text_message"; + $Refined->{text} = _bytes_to_str(\@Encoded_Message, 13, $DataLength); + +# $Refined->{text} = _bytes_to_str($event->{Data_Load}, 86, $DataLength); + + return ($Refined); + } elsif ($Refined->{Encoded_Message} && $Refined->{Message_Encoding} == 4) { + my @Encoded_Message = split(/ /, $Refined->{Encoded_Message}); + my $DataLength = _endian_bytes_to_int(\@Encoded_Message,6,2); +# my $data = _bytes_to_str(\@Encoded_Message,8,$DataLength); + + $Refined->{MessageType} = "text_message"; + $Refined->{text} = _bytes_to_str(\@Encoded_Message, 8, $DataLength); + return ($Refined); } - $Refined->{Message_Encoding} = _bytes_to_int($event->{Data_Load}, $i, 2); $i+=2; - - if ($Refined->{Message_Encoding} == 2) { + +# ========= + if ($Refined->{Message_Encoding} == 2){ + #normal text message.. $Refined->{MessageType} = "text_message"; @@ -3743,16 +3772,18 @@ #The first digit (2 or 4) denotes the FLAP's Chan %_TLV_IN = ( 2 => { User_Class => 0x01,#!????? - Signup_Date => 0x02,#! doesn't really work for ICQ, set to date of login, 1 sec before normal login date.. +# Signup_Date => 0x02,#! doesn't really work for ICQ, set to date of login, 1 sec before normal login date.. SignOn_Date => 0x03,#! Unknown00 => 0x04,#! ?? Encoded_Message => 0x05,#! + Encoded_MessageOld => 0x02,#! Status => 0x06,#! Ip_Address => 0x0a,#! in 4 byte format.. Web_Address => 0x0b,#! LANInfo => 0x0c,#! (long like 25 bytes..) CapabilityInfo => 0x0d,#! ??? - Time_Online => 0x0f #! + Time_Online => 0x0f, #! + SomeNewTLV => 0x13, }, 4 => { UIN => 0x01,#! HTML_Address => 0x04,#! @@ -3811,7 +3842,7 @@ %_TLV_Length_I = ( 2 => { 1 => 1, - 2 => 1, + 2 => 2, 3 => 1, 4 => 1, 5 => 2, @@ -3819,6 +3850,7 @@ 10 => 3, 12 => 0x25, 15 => 1, + 19 => 2, }, 4 => { 8 => 1, 6 => 2,