File: //usr/local/share/perl5/Net/OSCAR/Callbacks/1/rate_info_response.pm
package Net::OSCAR::Callbacks;
BEGIN {
$Net::OSCAR::Callbacks::VERSION = '1.928';
}
use strict;
use warnings;
use vars qw($connection $snac $conntype $family $subtype $data $reqid $reqdata $session $protobit %data);
use Net::OSCAR::Utility qw(millitime);
sub {
$connection->unpause();
if($session->{rate_manage_mode} != OSCAR_RATE_MANAGE_NONE) {
$connection->{rate_limits} ||= {classmap => {}};
my $rinfo = $connection->{rate_limits};
my $time = millitime();
foreach my $class (@{$data{classes}}) {
$class->{time_offset} = $time - $class->{last_time};
$rinfo->{$class->{class_id}} = $class;
}
my $map = $rinfo->{classmap};
foreach my $class (@{$data{classmembers}}) {
my $id = $class->{class_id};
foreach my $snacfam (@{$class->{snacs}}) {
my $key = pack("nn", $snacfam->{family}, $snacfam->{subtype});
$map->{$key} = $id;
}
}
}
$connection->proto_send(protobit => "rate_acknowledgement",
classes => [map {$_->{class_id}} @{$data{classes}}]);
$connection->log_print(OSCAR_DBG_NOTICE, "BOS handshake complete!");
if($conntype == CONNTYPE_BOS) {
$connection->log_print(OSCAR_DBG_SIGNON, "Signon BOS handshake complete!");
$connection->proto_send(protobit => "personal_info_request");
$session->set_stealth(1) if $session->{stealth};
$connection->proto_send(protobit => "buddylist_rights_request");
$connection->proto_send(protobit => "buddylist_request");
$connection->proto_send(protobit => "locate_rights_request");
$connection->proto_send(protobit => "buddy_rights_request");
$connection->proto_send(protobit => "IM_parameter_request");
$connection->proto_send(protobit => "BOS_rights_request");
} elsif($conntype == CONNTYPE_CHAT) {
$connection->ready();
$session->callback_chat_joined($connection->name, $connection) unless $connection->{sent_joined}++;
} else {
if($conntype == CONNTYPE_CHATNAV) {
$connection->proto_send(protobit => "chat_navigator_rights_request");
}
$session->{services}->{$conntype} = $connection;
$connection->ready();
if($session->{svcqueues}->{$conntype}) {
foreach my $proto_item(@{$session->{svcqueues}->{$conntype}}) {
$connection->proto_send(%$proto_item);
}
}
delete $session->{svcqueues}->{$conntype};
}
};