$63 GRAYBYTE WORDPRESS FILE MANAGER $87

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 172.67.217.254 | ADMIN IP 216.73.216.157
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : mail

/opt/alt/php84/usr/include/php/ext/swoole/include/

HOME
Current File : /opt/alt/php84/usr/include/php/ext/swoole/include//swoole_static_handler.h
/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | [email protected] so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <[email protected]>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_server.h"
#include "swoole_http.h"
#include "swoole_mime_type.h"

#include <string>
#include <set>

namespace swoole {
namespace http_server {
class StaticHandler {
  private:
    Server *serv;
    std::string request_url;
    std::string dir_path;
    std::set<std::string> dir_files;
    std::string index_file;
    typedef struct {
        off_t offset;
        size_t length;
        char part_header[SW_HTTP_SERVER_PART_HEADER];
    } task_t;
    std::vector<task_t> tasks;

    size_t l_filename = 0;
    char filename[PATH_MAX];
    struct stat file_stat;
    bool last = false;
    std::string content_type;
    std::string boundary;
    std::string end_part;
    size_t content_length = 0;

  public:
    int status_code = SW_HTTP_OK;
    StaticHandler(Server *_server, const char *url, size_t url_length) : request_url(url, url_length) {
        serv = _server;
    }

    /**
     * @return true: continue to execute backwards
     * @return false: break static handler
     */
    bool hit();
    bool hit_index_file();

    bool is_modified(const std::string &date_if_modified_since);
    bool is_modified_range(const std::string &date_range);
    size_t make_index_page(String *buffer);
    bool get_dir_files();
    bool set_filename(const std::string &filename);

    bool catch_error() {
        if (last) {
            status_code = SW_HTTP_NOT_FOUND;
            return true;
        } else {
            return false;
        }
    }

    bool has_index_file() {
        return !index_file.empty();
    }

    bool is_enabled_auto_index() {
        return serv->http_autoindex;
    }

    std::string get_date();

    time_t get_file_mtime() {
#ifdef __MACH__
        return file_stat.st_mtimespec.tv_sec;
#else
        return file_stat.st_mtim.tv_sec;
#endif
    }

    std::string get_date_last_modified();

    const char *get_filename() {
        return filename;
    }

    const char *get_boundary() {
        if (boundary.empty()) {
            boundary = std::string(SW_HTTP_SERVER_BOUNDARY_PREKEY);
            swoole_random_string(boundary, SW_HTTP_SERVER_BOUNDARY_TOTAL_SIZE - sizeof(SW_HTTP_SERVER_BOUNDARY_PREKEY));
        }
        return boundary.c_str();
    }

    const char *get_content_type() {
        if (tasks.size() > 1) {
            content_type = std::string("multipart/byteranges; boundary=") + get_boundary();
            return content_type.c_str();
        } else {
            return get_mimetype();
        }
    }

    const char *get_mimetype() {
        return swoole::mime_type::get(get_filename()).c_str();
    }

    std::string get_filename_std_string() {
        return std::string(filename, l_filename);
    }

    bool get_absolute_path();

    size_t get_filesize() {
        return file_stat.st_size;
    }

    const std::vector<task_t> &get_tasks() {
        return tasks;
    }

    bool is_dir() {
        return S_ISDIR(file_stat.st_mode);
    }

    bool is_link() {
        return S_ISLNK(file_stat.st_mode);
    }

    bool is_file() {
        return S_ISREG(file_stat.st_mode);
    }

    bool is_absolute_path() {
        return swoole_strnpos(filename, l_filename, SW_STRL("..")) == -1;
    }

    bool is_located_in_document_root() {
        const std::string &document_root = serv->get_document_root();
        const size_t l_document_root = document_root.length();

        return l_filename > l_document_root && filename[l_document_root] == '/' &&
               swoole_str_starts_with(filename, l_filename, document_root.c_str(), l_document_root);
    }

    size_t get_content_length() {
        return content_length;
    }

    const char *get_end_part() {
        return end_part.c_str();
    }

    void parse_range(const char *range, const char *if_range);
};

};  // namespace http_server
};  // namespace swoole


Current_dir [ NOT WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
1 Jan 1970 12.00 AM
root / root
0
swoole.h
24.834 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_api.h
3.429 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_asm_context.h
2.281 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_async.h
3.611 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_atomic.h
3.717 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_base64.h
1.294 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_buffer.h
2.233 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_c_api.h
2.076 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_channel.h
2.337 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_client.h
8.646 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_config.h
8.877 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine.h
9.975 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine_c_api.h
5.825 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine_channel.h
4.184 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine_context.h
2.747 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine_socket.h
18.781 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_coroutine_system.h
3.867 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_dtls.h
2.405 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_error.h
6.108 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_file.h
4.43 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_file_hook.h
3.837 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_hash.h
9.69 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_heap.h
1.785 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_http.h
6.989 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_http2.h
8.383 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_iouring.h
3.098 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_lock.h
3.39 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_log.h
15.337 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_lru_cache.h
3.169 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_memory.h
2.747 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_message_bus.h
6.024 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_mime_type.h
1.441 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_mqtt.h
2.176 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_msg_queue.h
1.924 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_pipe.h
2.637 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_process_pool.h
9.938 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_protocol.h
5.167 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_proxy.h
2.873 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_reactor.h
11.249 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_redis.h
2.092 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_server.h
43.944 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_signal.h
1.721 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_socket.h
19.039 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_socket_hook.h
2.23 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_ssl.h
4.943 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_static_handler.h
4.702 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_string.h
8.869 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_table.h
7.346 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_thread.h
2.227 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_timer.h
4.127 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_util.h
6.606 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_version.h
2.211 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_websocket.h
4.529 KB
12 Mar 2025 2.32 PM
root / linksafe
0644
swoole_wheel_timer.h
2.479 KB
12 Mar 2025 2.32 PM
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF