mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2026-02-05 13:53:23 +02:00
* common : clarify HTTPS build options in error message This commit updates the https error message to provide clearer instructions for users who encounter the "HTTPS is not supported" error. The motivation for this is that it might not be clear to users that only one of these options are needed to enable HTTPS support. The LLAMA_OPENSSL option is also added to the message to cover all possible build configurations. * clarify that OpenSSL is the default for HTTPS support
85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
#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;
|
|
}
|