module WEBrick

module HTTPServlet
  class DefaultFileHandler < AbstractServlet
    @local_path: String

    def initialize: (HTTPServer server, String local_path) -> void

    def do_GET: (HTTPRequest req, HTTPResponse res) -> void

    def not_modified?: (HTTPRequest req, HTTPResponse res, Time mtime, String etag) -> bool

    # returns a lambda for webrick/httpresponse.rb send_body_proc
    def multipart_body: (File body, Array[[Numeric, Numeric]] parts, String boundary, String mtype, Integer filesize) -> HTTPResponse::_CallableBody

    def make_partial_content: (HTTPRequest req, HTTPResponse res, String filename, Integer filesize) -> void

    def prepare_range: (Range[Integer] range, Integer filesize) -> [Numeric, Numeric]
  end

  class FileHandler < AbstractServlet
    @config: AbstractServlet::_Config

    @logger: Log

    @root: String

    @options: Hash[Symbol, untyped]

    HandlerTable: Hash[String, singleton(AbstractServlet)]

    def self.add_handler: (String suffix, singleton(AbstractServlet) handler) -> singleton(AbstractServlet)

    def self.remove_handler: (String suffix) -> singleton(AbstractServlet)

    def initialize: (HTTPServer server, String root, ?Hash[Symbol, untyped] options, ?Hash[Symbol, untyped] default) -> void

    def set_filesystem_encoding: (String str) -> String

    def service: (HTTPRequest req, HTTPResponse res) -> void

    def do_GET: (HTTPRequest req, HTTPResponse res) -> void

    def do_POST: (HTTPRequest req, HTTPResponse res) -> void

    def do_OPTIONS: (HTTPRequest req, HTTPResponse res) -> void

    private

    def trailing_pathsep?: (String path) -> bool

    def prevent_directory_traversal: (HTTPRequest req, HTTPResponse res) -> void

    def exec_handler: (HTTPRequest req, HTTPResponse res) -> bool

    def get_handler: (HTTPRequest req, HTTPResponse res) -> singleton(AbstractServlet)

    def set_filename: (HTTPRequest req, HTTPResponse res) -> bool

    def check_filename: (HTTPRequest req, HTTPResponse res, String name) -> void

    def shift_path_info: (HTTPRequest req, HTTPResponse res, String path_info, ?String? base) -> void

    def search_index_file: (HTTPRequest req, HTTPResponse res) -> String?

    def search_file: (HTTPRequest req, HTTPResponse res, String basename) -> String?

    def call_callback: (Symbol callback_name, HTTPRequest req, HTTPResponse res) -> void

    def windows_ambiguous_name?: (String name) -> bool

    def nondisclosure_name?: (String name) -> bool

    def set_dir_list: (HTTPRequest req, HTTPResponse res) -> void
  end
end

end