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

compress( string ) click to toggle source

@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
decompress( string ) click to toggle source

@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
deep_clone( object ) click to toggle source

@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
dump( object ) click to toggle source

@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
load( dump ) click to toggle source

@param [String] dump

{#dump Dumped} object.

@return [Object]

# File lib/arachni/rpc/serializer.rb, line 38
def load( dump )
    serializer.load( decompress( dump ) )
end
rpc_data( object ) click to toggle source

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
serializer() click to toggle source
# File lib/arachni/rpc/serializer.rb, line 92
def serializer
    MessagePack
end