AMF-Connection
view release on metacpan or search on metacpan
lib/AMF/Connection.pm view on Meta::CPAN
eval {
my $ug = new Data::UUID;
$uniqueid = $ug->to_string( $ug->create() );
};
} elsif ($HASMD5) {
eval {
$uniqueid = substr(Digest::MD5::md5_hex(Digest::MD5::md5_hex(time(). {}. rand(). $$)), 0, 32);
};
} else {
$uniqueid ="";
my $length=16;
my $j;
for(my $i=0 ; $i< $length ;) {
$j = chr(int(rand(127)));
if($j =~ /[a-zA-Z0-9]/) {
$uniqueid .=$j;
$i++;
};
};
};
return $uniqueid;
lib/AMF/Connection/InputStream.pm view on Meta::CPAN
{
croak "Storable::AMF 0.84 or newer needed to set stream options\n";
}
$self->{'options'} = Storable::AMF::parse_option ($storable_amf_options);
}
return bless($self, $class);
};
sub readBuffer {
my ($class, $length) = @_;
croak "Buffer underrun at position: ". $class->{'cursor'} . ". Trying to fetch ". $length . " bytes from buffer total length ".length($class->{'stream'})
if($length + $class->{'cursor'} > length($class->{'stream'}));
my $data = substr($class->{'stream'},$class->{'cursor'},$length);
$class->{'cursor'}+=$length;
return $data;
};
sub readByte {
my ($class) = @_;
return ord($class->readBuffer(1));
};
lib/AMF/Connection/InputStream.pm view on Meta::CPAN
{
($obj, $len) = Storable::AMF0::deparse_amf( substr($class->{'stream'},$class->{'cursor'}), $class->{'options'});
}
};
croak "Can not read AMF".$encoding." data starting from position ".$class->{'cursor'}." of input - reason: ".$@ ."\n"
if($@);
if(defined $obj) {
$class->{'cursor'}+=$len
unless( $len + $class->{'cursor'} > length($class->{'stream'}) );
};
return $obj;
};
1;
__END__
=head1 NAME
lib/AMF/Connection/Message.pm view on Meta::CPAN
croak "Stream $stream is not a valid output stream"
unless(ref($stream) and $stream->isa("AMF::Connection::OutputStream"));
# we default to AMF0 encoding
$stream->writeByte(0x00);
$stream->writeByte($class->getEncoding());
$stream->writeInt(scalar(@{$class->{'headers'}}));
foreach my $header (@{$class->{'headers'}}) {
my $name =$header->getName();
$stream->writeInt(length($name));
$stream->writeBuffer($name);
$stream->writeByte($header->isRequired());
$stream->writeLong(-1);
# TODO - make sure Storable::AMF does not store string "true" as boolean - or make sure value is right typed
$stream->writeAMFData( $class->getEncoding(), $header->getValue() );
};
$stream->writeInt(scalar(@{$class->{'bodies'}}));
foreach my $body (@{$class->{'bodies'}}) {
my $target = $body->getTarget();
$stream->writeInt(length($target));
$stream->writeBuffer($target);
my $response = $body->getResponse();
$stream->writeInt(length($response));
$stream->writeBuffer($response);
$stream->writeLong(-1);
$stream->writeAMFData( $class->getEncoding(), $body->getData() );
};
};
sub deserialize {
my ($class, $stream) = @_;
( run in 0.621 second using v1.01-cache-2.11-cpan-65fba6d93b7 )