mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Implement urlencode and urldecode
This commit is contained in:
parent
0404bbf671
commit
0a903e69fb
4 changed files with 57 additions and 6 deletions
|
@ -21,8 +21,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "pointer.h"
|
||||
#include "numeric.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
#include "../sha1.h"
|
||||
#include "../base64.h"
|
||||
#include "../hex.h"
|
||||
#include "../porting.h"
|
||||
|
||||
std::wstring narrow_to_wide(const std::string& mbs)
|
||||
|
@ -68,11 +72,40 @@ std::string translatePassword(std::string playername, std::wstring password)
|
|||
return pwd;
|
||||
}
|
||||
|
||||
size_t curl_write_data(char *ptr, size_t size, size_t nmemb, void *userdata) {
|
||||
std::ostringstream *stream = (std::ostringstream*)userdata;
|
||||
size_t count = size * nmemb;
|
||||
stream->write(ptr, count);
|
||||
return count;
|
||||
std::string urlencode(std::string str)
|
||||
{
|
||||
// Encodes non-unreserved URI characters by a percent sign
|
||||
// followed by two hex digits. See RFC 3986, section 2.3.
|
||||
static const char url_hex_chars[] = "0123456789ABCDEF";
|
||||
std::ostringstream oss(std::ios::binary);
|
||||
for (u32 i = 0; i < str.size(); i++) {
|
||||
unsigned char c = str[i];
|
||||
if (isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~')
|
||||
oss << c;
|
||||
else
|
||||
oss << "%"
|
||||
<< url_hex_chars[(c & 0xf0) >> 4]
|
||||
<< url_hex_chars[c & 0x0f];
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
std::string urldecode(std::string str)
|
||||
{
|
||||
// Inverse of urlencode
|
||||
std::ostringstream oss(std::ios::binary);
|
||||
for (u32 i = 0; i < str.size(); i++) {
|
||||
unsigned char highvalue, lowvalue;
|
||||
if (str[i] == '%' &&
|
||||
hex_digit_decode(str[i+1], highvalue) &&
|
||||
hex_digit_decode(str[i+2], lowvalue)) {
|
||||
oss << (char) ((highvalue << 4) | lowvalue);
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
oss << str[i];
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
u32 readFlagString(std::string str, FlagDesc *flagdesc) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue