34 #define RX_SPLIT_URL "^([^:/?#]+:|)" \
61 return new LDAPUrl(*
this);
65 getKnownSchemes()
const
76 config(
"sep_pathparams",
"");
78 config(
"psep_querystr",
"?");
79 config(
"vsep_querystr",
"");
84 config(
"require_host",
"y");
87 config(
"rx_username",
"");
88 config(
"rx_password",
"");
89 config(
"rx_fragment",
"");
90 config(
"rx_pathparams",
"");
96 static const char *
const keys[] = {
97 "attrs",
"scope",
"filter",
"exts", NULL
101 if( pvec.size() <= 4)
103 for(
size_t i=0; i<pvec.size(); i++)
106 pmap[keys[i]] = pvec[i];
114 _(
"Invalid LDAP URL query string")
123 static const char *
const keys[] = {
124 "attrs",
"scope",
"filter",
"exts", NULL
128 std::string join_safe;
129 std::string safe(config(
"safe_querystr"));
130 std::string psep(config(
"psep_querystr"));
133 if( psep.find(safe[i]) == std::string::npos)
134 join_safe.append(1, safe[i]);
138 zypp::url::ParamMap::const_iterator p;
139 for(p=pmap.begin(); p!=pmap.end(); ++p)
142 for(
size_t i=0; i<4; i++)
144 if(p->first == keys[i])
153 str::form(
_(
"Invalid LDAP URL query parameter '%s'"),
158 setQueryStringVec(pvec);
168 typedef std::map<std::string,UrlRef> UrlBySchemeMap;
177 ref.
reset(
new LDAPUrl());
178 addUrlByScheme(
"ldap", ref);
179 addUrlByScheme(
"ldaps", ref);
188 ref->
config(
"with_authority",
"n");
189 ref->
config(
"require_pathname",
"m");
190 addUrlByScheme(
"hd", ref);
191 addUrlByScheme(
"cd", ref);
192 addUrlByScheme(
"dvd", ref);
193 addUrlByScheme(
"dir", ref);
194 addUrlByScheme(
"iso", ref);
196 addUrlByScheme(
"mailto", ref);
197 addUrlByScheme(
"urn", ref);
198 addUrlByScheme(
"plugin", ref);
201 ref->
config(
"with_authority",
"y");
202 ref->
config(
"with_port",
"n");
203 ref->
config(
"rx_username",
"");
204 ref->
config(
"rx_password",
"");
205 addUrlByScheme(
"file", ref);
209 ref->
config(
"require_host",
"m");
210 addUrlByScheme(
"nfs", ref);
211 addUrlByScheme(
"nfs4", ref);
212 addUrlByScheme(
"smb", ref);
213 addUrlByScheme(
"cifs", ref);
214 addUrlByScheme(
"http", ref);
215 addUrlByScheme(
"https", ref);
216 ref->
config(
"path_encode_slash2",
"y");
217 addUrlByScheme(
"ftp", ref);
218 addUrlByScheme(
"sftp", ref);
219 addUrlByScheme(
"tftp", ref);
223 addUrlByScheme(
const std::string &scheme,
237 getUrlByScheme(
const std::string &scheme)
const
248 isRegisteredScheme(
const std::string &scheme)
const
254 getRegisteredSchemes()
const
256 UrlBySchemeMap::const_iterator i(
urlByScheme.begin());
262 schemes.push_back(i->first);
270 UrlByScheme & g_urlSchemeRepository()
272 static UrlByScheme _v;
296 : m_impl( url.m_impl)
301 _(
"Unable to clone Url object")
314 _(
"Invalid empty Url object reference")
322 : m_impl( parseUrl(encodedUrl))
327 _(
"Unable to parse Url components")
341 _(
"Unable to parse Url components")
364 return g_urlSchemeRepository().addUrlByScheme(scheme, urlImpl);
385 if(ret && out.
size() == 6)
387 std::string scheme = out[1];
388 if (scheme.size() > 1)
389 scheme = scheme.substr(0, scheme.size()-1);
390 std::string authority = out[2];
391 if (authority.size() >= 2)
392 authority = authority.substr(2);
393 std::string query = out[4];
394 if (query.size() > 1)
395 query = query.substr(1);
396 std::string fragment = out[5];
397 if (fragment.size() > 1)
398 fragment = fragment.substr(1);
400 url = g_urlSchemeRepository().getUrlByScheme(scheme);
405 url->
init(scheme, authority, out[3],
417 return g_urlSchemeRepository().getRegisteredSchemes();
426 return g_urlSchemeRepository().isRegisteredScheme(scheme);
449 inline bool isInList(
const char ** begin_r,
const char ** end_r,
const std::string & scheme_r )
451 for ( ; begin_r != end_r; ++begin_r )
452 if ( scheme_r == *begin_r )
459 static const char * val[] = {
"cd",
"dvd",
"dir",
"hd",
"iso",
"file" };
465 static const char * val[] = {
"http",
"https",
"nfs",
"nfs4",
"smb",
"cifs",
"ftp",
"sftp",
"tftp" };
471 static const char * val[] = {
"cd",
"dvd" };
477 static const char * val[] = {
"http",
"https",
"ftp",
"sftp",
"tftp" };
675 UrlRef url = g_urlSchemeRepository().getUrlByScheme(scheme);