summaryrefslogtreecommitdiff
path: root/llama.cpp/common/http.h
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/common/http.h
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/common/http.h')
-rw-r--r--llama.cpp/common/http.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/llama.cpp/common/http.h b/llama.cpp/common/http.h
new file mode 100644
index 0000000..e8ed56f
--- /dev/null
+++ b/llama.cpp/common/http.h
@@ -0,0 +1,84 @@
+#pragma once
+
+#include <cpp-httplib/httplib.h>
+
+struct common_http_url {
+ std::string scheme;
+ std::string user;
+ std::string password;
+ std::string host;
+ std::string path;
+};
+
+static common_http_url common_http_parse_url(const std::string & url) {
+ common_http_url parts;
+ auto scheme_end = url.find("://");
+
+ if (scheme_end == std::string::npos) {
+ throw std::runtime_error("invalid URL: no scheme");
+ }
+ parts.scheme = url.substr(0, scheme_end);
+
+ if (parts.scheme != "http" && parts.scheme != "https") {
+ throw std::runtime_error("unsupported URL scheme: " + parts.scheme);
+ }
+
+ auto rest = url.substr(scheme_end + 3);
+ auto at_pos = rest.find('@');
+
+ if (at_pos != std::string::npos) {
+ auto auth = rest.substr(0, at_pos);
+ auto colon_pos = auth.find(':');
+ if (colon_pos != std::string::npos) {
+ parts.user = auth.substr(0, colon_pos);
+ parts.password = auth.substr(colon_pos + 1);
+ } else {
+ parts.user = auth;
+ }
+ rest = rest.substr(at_pos + 1);
+ }
+
+ auto slash_pos = rest.find('/');
+
+ if (slash_pos != std::string::npos) {
+ parts.host = rest.substr(0, slash_pos);
+ parts.path = rest.substr(slash_pos);
+ } else {
+ parts.host = rest;
+ parts.path = "/";
+ }
+ return parts;
+}
+
+static std::pair<httplib::Client, common_http_url> common_http_client(const std::string & url) {
+ common_http_url parts = common_http_parse_url(url);
+
+ if (parts.host.empty()) {
+ throw std::runtime_error("error: invalid URL format");
+ }
+
+#ifndef CPPHTTPLIB_OPENSSL_SUPPORT
+ if (parts.scheme == "https") {
+ throw std::runtime_error(
+ "HTTPS is not supported. Please rebuild with one of:\n"
+ " -DLLAMA_BUILD_BORINGSSL=ON\n"
+ " -DLLAMA_BUILD_LIBRESSL=ON\n"
+ " -DLLAMA_OPENSSL=ON (default, requires OpenSSL dev files installed)"
+ );
+ }
+#endif
+
+ httplib::Client cli(parts.scheme + "://" + parts.host);
+
+ if (!parts.user.empty()) {
+ cli.set_basic_auth(parts.user, parts.password);
+ }
+
+ cli.set_follow_location(true);
+
+ return { std::move(cli), std::move(parts) };
+}
+
+static std::string common_http_show_masked_url(const common_http_url & parts) {
+ return parts.scheme + "://" + (parts.user.empty() ? "" : "****:****@") + parts.host + parts.path;
+}