PHP 7.4.33
Preview: node_url.h Size: 6.16 KB
//usr/include/nodejs/src/node_url.h
#ifndef SRC_NODE_URL_H_
#define SRC_NODE_URL_H_

#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

#include "node.h"

#include <string>

namespace node {
namespace url {

#define PARSESTATES(XX)                                                       \
  XX(kSchemeStart)                                                            \
  XX(kScheme)                                                                 \
  XX(kNoScheme)                                                               \
  XX(kSpecialRelativeOrAuthority)                                             \
  XX(kPathOrAuthority)                                                        \
  XX(kRelative)                                                               \
  XX(kRelativeSlash)                                                          \
  XX(kSpecialAuthoritySlashes)                                                \
  XX(kSpecialAuthorityIgnoreSlashes)                                          \
  XX(kAuthority)                                                              \
  XX(kHost)                                                                   \
  XX(kHostname)                                                               \
  XX(kPort)                                                                   \
  XX(kFile)                                                                   \
  XX(kFileSlash)                                                              \
  XX(kFileHost)                                                               \
  XX(kPathStart)                                                              \
  XX(kPath)                                                                   \
  XX(kCannotBeBase)                                                           \
  XX(kQuery)                                                                  \
  XX(kFragment)

#define FLAGS(XX)                                                             \
  XX(URL_FLAGS_NONE, 0)                                                       \
  XX(URL_FLAGS_FAILED, 0x01)                                                  \
  XX(URL_FLAGS_CANNOT_BE_BASE, 0x02)                                          \
  XX(URL_FLAGS_INVALID_PARSE_STATE, 0x04)                                     \
  XX(URL_FLAGS_TERMINATED, 0x08)                                              \
  XX(URL_FLAGS_SPECIAL, 0x10)                                                 \
  XX(URL_FLAGS_HAS_USERNAME, 0x20)                                            \
  XX(URL_FLAGS_HAS_PASSWORD, 0x40)                                            \
  XX(URL_FLAGS_HAS_HOST, 0x80)                                                \
  XX(URL_FLAGS_HAS_PATH, 0x100)                                               \
  XX(URL_FLAGS_HAS_QUERY, 0x200)                                              \
  XX(URL_FLAGS_HAS_FRAGMENT, 0x400)                                           \
  XX(URL_FLAGS_IS_DEFAULT_SCHEME_PORT, 0x800)                                 \

enum url_parse_state {
  kUnknownState = -1,
#define XX(name) name,
  PARSESTATES(XX)
#undef XX
};

enum url_flags {
#define XX(name, val) name = val,
  FLAGS(XX)
#undef XX
};

struct url_data {
  int32_t flags = URL_FLAGS_NONE;
  int port = -1;
  std::string scheme;
  std::string username;
  std::string password;
  std::string host;
  std::string query;
  std::string fragment;
  std::vector<std::string> path;
};

class URL {
 public:
  static void Parse(const char* input,
                    size_t len,
                    enum url_parse_state state_override,
                    struct url_data* url,
                    bool has_url,
                    const struct url_data* base,
                    bool has_base);

  URL(const char* input, const size_t len) {
    Parse(input, len, kUnknownState, &context_, false, nullptr, false);
  }

  URL(const char* input, const size_t len, const URL* base) {
    if (base != nullptr)
      Parse(input, len, kUnknownState,
            &context_, false,
            &(base->context_), true);
    else
      Parse(input, len, kUnknownState, &context_, false, nullptr, false);
  }

  URL(const char* input, const size_t len,
      const char* base, const size_t baselen) {
    if (base != nullptr && baselen > 0) {
      URL _base(base, baselen);
      Parse(input, len, kUnknownState,
            &context_, false,
            &(_base.context_), true);
    } else {
      Parse(input, len, kUnknownState, &context_, false, nullptr, false);
    }
  }

  explicit URL(const std::string& input) :
      URL(input.c_str(), input.length()) {}

  URL(const std::string& input, const URL* base) :
      URL(input.c_str(), input.length(), base) {}

  URL(const std::string& input, const URL& base) :
      URL(input.c_str(), input.length(), &base) {}

  URL(const std::string& input, const std::string& base) :
      URL(input.c_str(), input.length(), base.c_str(), base.length()) {}

  int32_t flags() const {
    return context_.flags;
  }

  int port() const {
    return context_.port;
  }

  const std::string& protocol() const {
    return context_.scheme;
  }

  const std::string& username() const {
    return context_.username;
  }

  const std::string& password() const {
    return context_.password;
  }

  const std::string& host() const {
    return context_.host;
  }

  const std::string& query() const {
    return context_.query;
  }

  const std::string& fragment() const {
    return context_.fragment;
  }

  std::string path() const {
    std::string ret;
    for (const std::string& element : context_.path) {
      ret += '/' + element;
    }
    return ret;
  }

  // Get the path of the file: URL in a format consumable by native file system
  // APIs. Returns an empty string if something went wrong.
  std::string ToFilePath() const;
  // Get the file URL from native file system path.
  static URL FromFilePath(const std::string& file_path);

  v8::MaybeLocal<v8::Value> ToObject(Environment* env) const;

  URL(const URL&) = default;
  URL& operator=(const URL&) = default;
  URL(URL&&) = default;
  URL& operator=(URL&&) = default;

  URL() : URL("") {}

 private:
  struct url_data context_;
};

}  // namespace url

}  // namespace node

#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

#endif  // SRC_NODE_URL_H_

Directory Contents

Dirs: 0 × Files: 108
Name Size Perms Modified Actions
7.91 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
10.07 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.57 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
10.82 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.83 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
686 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
584 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
7.36 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.44 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
768 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
40.44 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
65.90 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.98 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.83 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
609 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.19 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.53 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.53 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.63 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
28.13 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
12.23 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.28 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.35 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.23 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.10 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
43.55 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.41 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.62 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.25 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.37 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
29.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.22 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.48 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
23.04 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.31 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.89 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.89 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
9.81 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
12.20 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
49.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.58 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
28.90 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.30 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
13.34 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.05 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.28 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.46 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.07 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.31 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.33 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.78 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
14.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
15.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.21 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.99 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.77 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.35 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.45 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
212.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.61 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.56 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.15 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.20 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.19 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.69 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.13 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.17 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.78 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.40 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.22 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.55 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.87 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
9.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
15.92 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.15 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.03 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
858 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
20.92 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.65 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.05 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
7.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.18 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
8.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
16.42 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
25.51 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.09 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).