⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 request.h

📁 PTypes是一个扩充了多线程和网络功能的STL库
💻 H
字号:
/* * *  C++ Portable Types Library (PTypes) *  Version 2.0.2  Released 17-May-2004 * *  Copyright (C) 2001-2004 Hovik Melikyan * *  http://www.melikyan.com/ptypes/ * */#ifndef W_REQUEST_H#define W_REQUEST_H#include <ptypes.h>#include <pstreams.h>#include <pinet.h>#include "sysutils.h"#include "urlutils.h"USING_PTYPESenum http_version_t {    HTTP_VER_09,     HTTP_VER_10,     HTTP_VER_11,     HTTP_VER_UNKNOWN,        HTTP_VER_MAX};enum http_method_t {    HTTP_GET,    HTTP_HEAD,    HTTP_OTHER,        HTTP_METHOD_MAX};enum req_stat_t{    STAT_READ,    STAT_WRITE,    STAT_WAIT,        STAT_MAX};struct ehttp{    int code;    ehttp(int icode): code(icode) {}};class request_rec{public:    datetime        started;    int             rsp_code;       // rsp: response code, set through begin_response(), used for logging    req_stat_t      stat;           // for status requests: READ, WRITE or WAIT (if keep-alive)    instm*          sockin;         // client input stream    outstm*         sockout;        // client output stream    ipaddress       client_ip;      // req: client's IP    http_version_t  version;        // req/rsp: HTTP version, 0.9, 1.0, 1.1 or 1.*    http_method_t   method;         // req: HTTP method, currently GET or HEAD    string          method_str;     // method string, for other method handlers    bool            keep_alive;     // req/rsp: whether to close the connection; determined                                    // based on the HTTP version and the "Connection:" header;                                    // can be forced to false for some response types, e.g. 400 Bad Request    datetime        if_modified;    // req: "If-modified-since:" if present, invdatetime otherwise    string          req_line;       // req: the whole request line, e.g. "GET / HTTP/1.1"    string          uri;            // req: request-URI, as is    string          host;           // req: "Host:" header, if present    string          referer;        // req: "Referer:"; may be converted to relative URI    bool            partial;        // req: partial content requested (see rsp_file())    int             range_min;      // req: partial content    int             range_max;      // req: partial content    textmap         headers;        // other headers    // requested object info    urlrec          url;            // req: the request-URI parsed and split into components    strlist         path_parts;     // request-URI path split into components    unknown*        user;           // user data for custom handlers, freed automatically by ~request_rec()    // helpers for method handlers    string get_token(const cset& chars);    string get_uri();    void parse_request_line();      // ... excluding the method string    void parse_hdr(string& fname, string& fvalue);    void parse_uri();               // sets url and path_parts fields    void analyze_uri();             // sets all fields starting from file_type    // response utilities; headers are not sent if the HTTP version is 0.9    void begin_response(int code, const char* msg);    void put_header(const char* name, const char* value);    void put_header(const char* name, const string& value);    void put_content_type(const char* mime);    void put_content_length(int length);    void end_headers();    void std_response(bool conn_close, int code, const char* msg, const char* descr);    void std_response(bool conn_close, int code, const char* msg, const char* descr, const string& dparam);    // standard responses; all functions of this group raise ehttp exceptions    void rsp_not_found();    void rsp_bad_request();    void rsp_bad_method(const char* ok_methods);    void rsp_uri_too_long();    void rsp_forbidden();    void rsp_dir_index_forbidden();    void rsp_overloaded();    void abort_request();    void rsp_redirect(const string& newurl);    void rsp_not_modified();    void end_response();protected:    string location;       // rsp: add "Location:" header to the response; set through                            // rsp_redirect()    int    hdr_size;       // byte size of response headers; used for logging, to determine                           // the actual response content length (see respond())    // request parsers    void parse_method();    void parse_headers();    // the boss    void respond();    // reset the state between requests when keep-alive    void reset_state();    request_rec(instm& isockin, outstm& isockout, ipaddress iclient_ip);    ~request_rec();};// this structure is created and handled in mod_file, however, we// declare it here since this information can be passed to the// file extension handlers.class file_request_rec{public:    file_type_t     file_type;      // file, directory or other (device or pipe)    bool            sym_link;       // the object is a symbolic link (Unix only)    bool            executable;     // the object is executable (binary on Unix, .exe on Windows)    string          abs_path;       // absolute file path to the requested object    string          rel_path;       // file path to the requested object relative to document root,                                    // may not be the same as url.path    string          file_name;      // file name    string          file_ext;       // file extension, including the leading dot    file_request_rec(): file_type(FT_ERROR), sym_link(false), executable(false),        abs_path(), rel_path(), file_name(), file_ext()  {}    ~file_request_rec()  {}};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -