@startuml app_diagram

class CaptivePortal {
    void __inti__()
    void start_access_point()
    void connect_to_wifi()
    void check_valid_wifi()
    void captive_portal()
    void handle_dns()
    void handle_http()
    void cleanup()
    void try_connect_from_file()
    void start()
    void list_available_networks()
}
class CaptiveServer {
    HttpServer http_server
    void __init__()
    void routes()
    void start()
    void controller_login()
    void controller_index()
    void controller_file_test()
    void connected()
}
class HTTPServer {
    void __init__()
    void set_ip()
    void handle()
    void accept()
    void parse_request()
    void login()
    void index()
    void file_test()
    void connected()
    void get_response()
    void is_valid_req()
    void read()
    void prepare_write()
    void write_to()
    void buff_advance()
    void close()
    void redirectResponse()
    void sendResponse()
    void set_list_available_networks_function()
    void set_routes()
    void get_template_path()
}
class DNSServer {
    void __init__()
    void handle()
}
class DNSQuery {
    void __init__()
    void answer()
}
class Server {
    void __init__()
    void stop()
}

CaptivePortal <-- CaptiveServer

CaptiveServer <-- HTTPServer
CaptiveServer <-- DNSServer


Server <|-- HTTPServer
Server <|-- DNSServer
DNSServer *-- DNSQuery

@enduml