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);
184 ref->
config(
"with_authority",
"n");
185 ref->
config(
"require_pathname",
"m");
186 addUrlByScheme(
"hd", ref);
187 addUrlByScheme(
"cd", ref);
188 addUrlByScheme(
"dvd", ref);
189 addUrlByScheme(
"dir", ref);
190 addUrlByScheme(
"iso", ref);
195 addUrlByScheme(
"mailto", ref);
196 addUrlByScheme(
"urn", ref);
197 addUrlByScheme(
"plugin", ref);
200 ref->
config(
"with_authority",
"y");
201 ref->
config(
"with_port",
"n");
202 ref->
config(
"rx_username",
"");
203 ref->
config(
"rx_password",
"");
204 addUrlByScheme(
"file", ref);
208 ref->
config(
"require_host",
"m");
209 addUrlByScheme(
"nfs", ref);
210 addUrlByScheme(
"nfs4", ref);
211 addUrlByScheme(
"smb", ref);
212 addUrlByScheme(
"cifs", ref);
213 addUrlByScheme(
"http", ref);
214 addUrlByScheme(
"https", ref);
215 ref->
config(
"path_encode_slash2",
"y");
216 addUrlByScheme(
"ftp", ref);
217 addUrlByScheme(
"sftp", ref);
218 addUrlByScheme(
"tftp", ref);
222 addUrlByScheme(
const std::string &scheme,
236 getUrlByScheme(
const std::string &scheme)
const
247 isRegisteredScheme(
const std::string &scheme)
const
253 getRegisteredSchemes()
const
255 UrlBySchemeMap::const_iterator i(
urlByScheme.begin());
261 schemes.push_back(i->first);
269 UrlByScheme & g_urlSchemeRepository()
271 static UrlByScheme _v;
295 : m_impl( url.m_impl)
300 _(
"Unable to clone Url object")
313 _(
"Invalid empty Url object reference")
321 : m_impl( parseUrl(encodedUrl))
326 _(
"Unable to parse Url components")
340 _(
"Unable to parse Url components")
363 return g_urlSchemeRepository().addUrlByScheme(scheme, urlImpl);
384 if(ret && out.
size() == 6)
386 std::string scheme = out[1];
387 if (scheme.size() > 1)
388 scheme = scheme.substr(0, scheme.size()-1);
389 std::string authority = out[2];
390 if (authority.size() >= 2)
391 authority = authority.substr(2);
392 std::string query = out[4];
393 if (query.size() > 1)
394 query = query.substr(1);
395 std::string fragment = out[5];
396 if (fragment.size() > 1)
397 fragment = fragment.substr(1);
399 url = g_urlSchemeRepository().getUrlByScheme(scheme);
404 url->
init(scheme, authority, out[3],
416 return g_urlSchemeRepository().getRegisteredSchemes();
425 return g_urlSchemeRepository().isRegisteredScheme(scheme);
448 inline bool isInList(
const char ** begin_r,
const char ** end_r,
const std::string & scheme_r )
450 for ( ; begin_r != end_r; ++begin_r )
451 if ( scheme_r == *begin_r )
458 static const char * val[] = {
"cd",
"dvd",
"dir",
"hd",
"iso",
"file" };
464 static const char * val[] = {
"http",
"https",
"nfs",
"nfs4",
"smb",
"cifs",
"ftp",
"sftp",
"tftp" };
470 static const char * val[] = {
"cd",
"dvd" };
476 static const char * val[] = {
"http",
"https",
"ftp",
"sftp",
"tftp" };
674 UrlRef url = g_urlSchemeRepository().getUrlByScheme(scheme);