return false;
}
-void url_encode(const string& src, string& dst)
+void url_encode(const string& src, string& dst, bool encode_slash)
{
const char *p = src.c_str();
for (unsigned i = 0; i < src.size(); i++, p++) {
- if (char_needs_url_encoding(*p)) {
+ if ((!encode_slash && *p == 0x2F) || !char_needs_url_encoding(*p)) {
+ dst.append(p, 1);
+ }else {
rgw_uri_escape_char(*p, dst);
- continue;
}
-
- dst.append(p, 1);
}
}
-std::string url_encode(const std::string& src)
+std::string url_encode(const std::string& src, bool encode_slash)
{
std::string dst;
- url_encode(src, dst);
+ url_encode(src, dst, encode_slash);
return dst;
}
extern void rgw_uri_escape_char(char c, string& dst);
extern std::string url_decode(const boost::string_view& src_str,
bool in_query = false);
-extern void url_encode(const std::string& src,
- string& dst);
-extern std::string url_encode(const std::string& src);
+extern void url_encode(const std::string& src, string& dst,
+ bool encode_slash = true);
+extern std::string url_encode(const std::string& src, bool encode_slash = true);
/* destination should be CEPH_CRYPTO_HMACSHA1_DIGESTSIZE bytes long */
extern void calc_hmac_sha1(const char *key, int key_len,
const char *msg, int msg_len, char *dest);