From 0dfe3c7d35ebec410a4735054545cfe75eaec0b4 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 19 Jan 2026 19:50:51 -0500 Subject: [PATCH] replace const char * by string_view --- libi2pd_client/HTTPProxy.cpp | 61 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 4c2771b5..ea93f951 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2013-2025, The PurpleI2P Project +* Copyright (c) 2013-2026, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * @@ -32,9 +32,12 @@ #include "I18N.h" #include "Socks5.h" -namespace i2p { -namespace proxy { - static const std::vector jumporder = { +namespace i2p +{ +namespace proxy +{ + static constexpr std::array jumporder = + { "reg.i2p", "stats.i2p", "identiguy.i2p", @@ -48,7 +51,7 @@ namespace proxy { { "notbob.i2p", "http://nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a.b32.i2p/cgi-bin/jump.cgi?q=" } }; - static const char *pageHead = + static constexpr std::string_view pageHead = "\r\n" " \r\n" " I2Pd HTTP proxy\r\n" @@ -60,12 +63,12 @@ namespace proxy { "\r\n" ; - static bool str_rmatch(std::string_view str, const char *suffix) + static bool str_rmatch(std::string_view str, std::string_view suffix) { auto pos = str.rfind (suffix); - if (pos == std::string::npos) + if (pos == std::string_view::npos) return false; /* not found */ - if (str.length() == (pos + std::strlen(suffix))) + if (str.length() == pos + suffix.length ()) return true; /* match */ return false; } @@ -162,7 +165,7 @@ namespace proxy { Done(shared_from_this()); } - void HTTPReqHandler::GenericProxyError(std::string_view title, std::string_view description) + void HTTPReqHandler::GenericProxyError(std::string_view title, std::string_view description) { std::stringstream ss; ss << "

" << tr("Proxy error") << ": " << title << "

\r\n"; @@ -170,7 +173,7 @@ namespace proxy { SendProxyError(ss.str ()); } - void HTTPReqHandler::GenericProxyInfo(std::string_view title, std::string_view description) + void HTTPReqHandler::GenericProxyInfo(std::string_view title, std::string_view description) { std::stringstream ss; ss << "

" << tr("Proxy info") << ": " << title << "

\r\n"; @@ -178,7 +181,7 @@ namespace proxy { SendProxyError(ss.str ()); } - void HTTPReqHandler::HostNotFound(std::string_view host) + void HTTPReqHandler::HostNotFound(std::string_view host) { std::stringstream ss; ss << "

" << tr("Proxy error: Host not found") << "

\r\n" @@ -243,8 +246,8 @@ namespace proxy { { LogPrint (eLogError, "HTTPProxy: Malformed jump link ", jump); return false; - } - + } + // if we need update exists, request formed with update param if (params["update"] == "true") { @@ -296,13 +299,13 @@ namespace proxy { { if (padding) return false; // other chars after padding if (!i2p::data::IsBase64(ch)) return false; - } - } + } + } return true; - } + } return false; - } - + } + void HTTPReqHandler::SanitizeHTTPRequest(i2p::http::HTTPReq& req) { /* drop common headers */ @@ -583,8 +586,8 @@ namespace proxy { } else { - m_proxy_resolver.async_resolve(m_ProxyURL.host, std::to_string(m_ProxyURL.port), std::bind(&HTTPReqHandler::HandleUpstreamProxyResolved, this, - std::placeholders::_1, std::placeholders::_2, [&](boost::asio::ip::tcp::endpoint ep) + m_proxy_resolver.async_resolve(m_ProxyURL.host, std::to_string(m_ProxyURL.port), std::bind(&HTTPReqHandler::HandleUpstreamProxyResolved, this, + std::placeholders::_1, std::placeholders::_2, [&](boost::asio::ip::tcp::endpoint ep) { m_proxysock->async_connect(ep, std::bind(&HTTPReqHandler::HandleUpstreamHTTPProxyConnect, this, std::placeholders::_1)); })); @@ -594,8 +597,8 @@ namespace proxy { { /* handle upstream socks proxy */ if (!m_ProxyURL.port) m_ProxyURL.port = 9050; // default to tor default if not specified - m_proxy_resolver.async_resolve(m_ProxyURL.host, std::to_string(m_ProxyURL.port), std::bind(&HTTPReqHandler::HandleUpstreamProxyResolved, this, - std::placeholders::_1, std::placeholders::_2, [&](boost::asio::ip::tcp::endpoint ep) + m_proxy_resolver.async_resolve(m_ProxyURL.host, std::to_string(m_ProxyURL.port), std::bind(&HTTPReqHandler::HandleUpstreamProxyResolved, this, + std::placeholders::_1, std::placeholders::_2, [&](boost::asio::ip::tcp::endpoint ep) { m_proxysock->async_connect(ep, std::bind(&HTTPReqHandler::HandleUpstreamSocksProxyConnect, this, std::placeholders::_1)); })); @@ -615,9 +618,9 @@ namespace proxy { void HTTPReqHandler::HandleUpstreamSocksProxyConnect(const boost::system::error_code & ec) { - if(!ec) + if(!ec) { - if(m_RequestURL.host.size() > 255) + if(m_RequestURL.host.size() > 255) { GenericProxyError(tr("Hostname is too long"), m_RequestURL.host); return; @@ -633,11 +636,11 @@ namespace proxy { if (!ec) s->SocksProxySuccess(); else - s->GenericProxyError(tr("SOCKS proxy error"), ec.message ()); + s->GenericProxyError(tr("SOCKS proxy error"), ec.message ()); }); - - } - else + + } + else GenericProxyError(tr("Cannot connect to upstream SOCKS proxy"), ec.message()); } @@ -753,7 +756,7 @@ namespace proxy { Done (shared_from_this()); } - HTTPProxy::HTTPProxy(const std::string& name, const std::string& address, uint16_t port, + HTTPProxy::HTTPProxy(const std::string& name, const std::string& address, uint16_t port, const std::string & outproxy, bool addresshelper, bool senduseragent, std::shared_ptr localDestination): TCPIPAcceptor (address, port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()), m_Name (name), m_OutproxyUrl (outproxy), m_Addresshelper (addresshelper), m_SendUserAgent (senduseragent)