class RFlow # @!parse # # Fake classes in this tree to document the actual message types. # class Message # # Fake classes in this tree to document the actual message types. # class Data # # HTTP messages. # module HTTP # # RFlow message representing an HTTP request. # class Request # # @!attribute client_ip # # The IP the request originated from. # # @return [String] # # # @!attribute client_port # # The port the request originated from. # # @return [Integer] # # # @!attribute server_ip # # The IP the request went to. # # @return [String] # # # @!attribute server_port # # The port the request went to. # # @return [Integer] # # # @!attribute method # # The HTTP method (POST, GET, etc.). # # @return [String] # # # @!attribute uri # # The URI the request was for. # # @return [String] # # # @!attribute query_string # # The query string attached to the URI. # # @return [String] # # # @!attribute protocol # # The HTTP protocol being used for the request. # # @return [String] # # # @!attribute headers # # The HTTP request headers. # # @return [Hash] # # # @!attribute content # # The HTTP body content. # # @return [String] # # # Just here to force Yard to create documentation. # # @!visibility private # def initialize; end # end # # # RFlow message representing an HTTP response. # class Response # # @!attribute client_ip # # The IP the response is going to. # # @return [String] # # # @!attribute client_port # # The port the response is going to. # # @return [Integer] # # # @!attribute server_ip # # The IP the response is coming from. # # @return [String] # # # @!attribute server_port # # The port the response is coming from. # # @return [Integer] # # # @!attribute protocol # # The HTTP protocol being used for the response. # # @return [String] # # # @!attribute status_code # # The HTTP response code. # # @return [Integer] # # # @!attribute status_reason_phrase # # The server-supplied reason phrase (+OK+, +Moved Temporarily+, etc.) for the {status_code}. # # @return [String] # # # @!attribute headers # # The HTTP response headers. # # @return [Hash] # # # @!attribute content # # The HTTP response body content. # # @return [String] # # # Just here to force Yard to create documentation. # # @!visibility private # def initialize; end # end # end # end # end # Code for RFlow components. module Components module HTTP # @!visibility private module Extensions # @!visibility private module IPConnectionExtension # Default accessors # TODO: validate the stuffs ['client_ip', 'client_port', 'server_ip', 'server_port'].each do |name| define_method name do |*args| data_object[name] end define_method :"#{name}=" do |*args| data_object[name] = args.first end end end # Need to be careful when extending to not clobber data already in data_object # @!visibility private module HTTPRequestExtension # @!visibility private def self.extended(base_data) base_data.data_object ||= {'uri' => '/', 'method' => 'GET', 'protocol' => 'HTTP/1.0', 'headers' => {}, 'content' => ''} end # Default accessors ['method', 'uri', 'query_string', 'protocol', 'headers', 'content'].each do |name| define_method name do |*args| data_object[name] end define_method :"#{name}=" do |*args| data_object[name] = args.first end end end # Need to be careful when extending to not clobber data already in data_object # @!visibility private module HTTPResponseExtension # @!visibility private def self.extended(base_data) base_data.data_object ||= {'protocol' => 'HTTP/1.0', 'status_code' => 200, 'status_reason_phrase' => 'OK', 'headers' => {}, 'content' => ''} end # Default accessors ['protocol', 'status_reason_phrase', 'headers', 'content'].each do |name| define_method name do |*args| data_object[name] end define_method :"#{name}=" do |*args| data_object[name] = args.first end end ['status_code'].each do |name| define_method name do |*args| data_object[name] end define_method :"#{name}=" do |*args| data_object[name] = args.first.to_i end end end end end end end