libzypp: zypp-curl/proxyinfo/proxyinfoimpl.h Source File

libzypp 17.36.6

proxyinfoimpl.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_CURL_PROXYINFO_PROXYINFOIMPL_H_INCLUDED
13#define ZYPP_CURL_PROXYINFO_PROXYINFOIMPL_H_INCLUDED
14
15#include <string>
16#include <list>
17
18#include <zypp-core/Url.h>
19#include <zypp-core/base/String.h>
20#include <zypp-curl/ProxyInfo>
21
22namespace zypp {
23 namespace media {
24
25 struct ProxyInfo::Impl
26 {
28 Impl()
29 {}
30
32 virtual ~Impl()
33 {}
34
35 public:
37 virtual bool enabled() const = 0;
39 virtual std::string proxy(const Url & url_r) const = 0;
41 virtual ProxyInfo::NoProxyList noProxy() const = 0;
43 virtual ProxyInfo::NoProxyIterator noProxyBegin() const = 0;
45 virtual ProxyInfo::NoProxyIterator noProxyEnd() const = 0;
46
48 bool useProxyFor( const Url & url_r ) const
49 {
50 if ( ! enabled() || proxy( url_r ).empty() )
51 return false;
52
53 ProxyInfo::NoProxyList noproxy( noProxy() );
54 if ( noproxy.size() == 1 && noproxy.front() == "*" )
55 return false; // just an asterisk disables all.
56
57 // No proxy: Either an exact match, or the previous character
58 // is a '.', so host is within the same domain.
59 // A leading '.' in the pattern is ignored. Some implementations
60 // need '.foo.ba' to prevent 'foo.ba' from matching 'xfoo.ba'.
61 std::string host( str::toLower( url_r.getHost() ) );
62 for ( const std::string & np : noproxy )
63 {
64 std::string pattern( str::toLower( np[0] == '.' ? np.c_str() + 1 : np.c_str() ) );
65 if ( str::hasSuffix( host, pattern )
66 && ( host.size() == pattern.size()
67 || host[host.size()-pattern.size()-1] == '.' ) )
68 return false;
69 }
70 return true;
71 }
72
73 public:
75 static shared_ptr<Impl> _nullimpl;
76 };
77
78
80
81 } // namespace media
82} // namespace zypp
83
84#endif // ZYPP_MEDIA_PROXYINFO_PROXYINFOIMPL_H
shared_ptr
zypp::Url
Url manipulation class.
Definition Url.h:93
zypp::Url::getHost
std::string getHost(EEncoding eflag=zypp::url::E_DECODED) const
Returns the hostname or IP from the URL authority.
Definition Url.cc:606
zypp::media::ProxyInfo::NoProxyList
std::list< std::string > NoProxyList
Definition proxyinfo.h:34
zypp::media::ProxyInfo::NoProxyIterator
std::list< std::string >::const_iterator NoProxyIterator
Definition proxyinfo.h:35
zypp::media
Definition MediaCD.cc:47
zypp::str::hasSuffix
bool hasSuffix(const C_Str &str_r, const C_Str &suffix_r)
Return whether str_r has suffix suffix_r.
Definition String.h:1040
zypp::str::toLower
std::string toLower(const std::string &s)
Return lowercase version of s.
Definition String.cc:178
zypp
Easy-to use interface to the ZYPP dependency resolver.
Definition Application.cc:20
zypp::media::ProxyInfo::Impl
Definition proxyinfoimpl.h:26
zypp::media::ProxyInfo::Impl::~Impl
virtual ~Impl()
Dtor.
Definition proxyinfoimpl.h:32
zypp::media::ProxyInfo::Impl::useProxyFor
bool useProxyFor(const Url &url_r) const
Return true if enabled and url_r does not match noProxy.
Definition proxyinfoimpl.h:48
zypp::media::ProxyInfo::Impl::noProxyEnd
virtual ProxyInfo::NoProxyIterator noProxyEnd() const =0
zypp::media::ProxyInfo::Impl::proxy
virtual std::string proxy(const Url &url_r) const =0
zypp::media::ProxyInfo::Impl::_nullimpl
static shared_ptr< Impl > _nullimpl
Default Impl: empty sets.
Definition proxyinfoimpl.h:75
zypp::media::ProxyInfo::Impl::enabled
virtual bool enabled() const =0
zypp::media::ProxyInfo::Impl::noProxy
virtual ProxyInfo::NoProxyList noProxy() const =0
zypp::media::ProxyInfo::Impl::noProxyBegin
virtual ProxyInfo::NoProxyIterator noProxyBegin() const =0
zypp::media::ProxyInfo::Impl::Impl
Impl()
Ctor.
Definition proxyinfoimpl.h:28
Url.h
String.h