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 )