module Arachni::RPC::Serializer
Used for serialization of {RPC} messages.
It’s simply a delegator for ‘MessagePack` with `Zlib` compression for messages that are larger than {COMPRESS_LARGER_THAN}.
@author Tasos “Zapotek” Laskos <tasos.laskos@arachni-scanner.com>
Constants
- COMPRESS_LARGER_THAN
Compress object dumps larger than 1KB.
Public Instance Methods
@note Ignores strings smaller than #{COMPRESS_LARGER_THAN}.
@param [String] string
String to compress.
@return [String]
Compressed (or not) `string`.
# File lib/arachni/rpc/serializer.rb, line 67 def compress( string ) return string if string.size < COMPRESS_LARGER_THAN Zlib::Deflate.deflate string end
@note Will return the ‘string` as is if it was not compressed.
@param [String] string
String to decompress.
@return [String]
Decompressed string.
# File lib/arachni/rpc/serializer.rb, line 79 def decompress( string ) return '' if string.to_s.empty? # Just an ID representing a serialized, empty data structure. return string if string.size == 1 begin Zlib::Inflate.inflate string rescue Zlib::DataError string end end
@param [#to_rpc_data,.from_rpc_data] object
@return [Object]
# File lib/arachni/rpc/serializer.rb, line 56 def deep_clone( object ) object.class.from_rpc_data rpc_data( object ) end
@param [#to_rpc_data] object
@return [String]
{#compress Compressed} `object` dump.
# File lib/arachni/rpc/serializer.rb, line 29 def dump( object ) # ap object compress( serializer.dump( object.to_rpc_data_or_self ) ) end
@param [String] dump
{#dump Dumped} object.
@return [Object]
# File lib/arachni/rpc/serializer.rb, line 38 def load( dump ) serializer.load( decompress( dump ) ) end
Simulates an object’s over-the-wire transmission by {#dump dumping} and then {#load loading}.
@param [#to_rpc_data,.from_rpc_data] object
@return [Object]
Data that the peer would receive.
# File lib/arachni/rpc/serializer.rb, line 49 def rpc_data( object ) load( dump( object ) ) end
# File lib/arachni/rpc/serializer.rb, line 92 def serializer MessagePack end