mirror of
https://github.com/znc/znc.git
synced 2026-07-21 09:03:32 +02:00
Added Base64Decode
git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@403 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
+44
-5
@@ -92,7 +92,7 @@ CString CString::AsLower() const {
|
|||||||
return sRet;
|
return sRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
CString CString::Escape_n(EEscape eFrom, EEscape eTo) {
|
CString CString::Escape_n(EEscape eFrom, EEscape eTo) const {
|
||||||
CString sRet;
|
CString sRet;
|
||||||
const char szHex[] = "0123456789ABCDEF";
|
const char szHex[] = "0123456789ABCDEF";
|
||||||
const unsigned char *pStart = (const unsigned char*) data();
|
const unsigned char *pStart = (const unsigned char*) data();
|
||||||
@@ -103,6 +103,7 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) {
|
|||||||
|
|
||||||
for (unsigned int a = 0; a < iLength; a++, p = pStart + a) {
|
for (unsigned int a = 0; a < iLength; a++, p = pStart + a) {
|
||||||
switch (eFrom) {
|
switch (eFrom) {
|
||||||
|
case EHTML:
|
||||||
case EAscii:
|
case EAscii:
|
||||||
ch = *p;
|
ch = *p;
|
||||||
break;
|
break;
|
||||||
@@ -133,6 +134,7 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (eTo) {
|
switch (eTo) {
|
||||||
|
case EHTML:
|
||||||
case EAscii:
|
case EAscii:
|
||||||
sRet += ch;
|
sRet += ch;
|
||||||
break;
|
break;
|
||||||
@@ -155,8 +157,8 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) {
|
|||||||
return sRet;
|
return sRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
CString CString::Escape_n(EEscape eTo) {
|
CString CString::Escape_n(EEscape eTo) const {
|
||||||
return Escape(EAscii, eTo);
|
return Escape_n(EAscii, eTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
CString& CString::Escape(EEscape eFrom, EEscape eTo) {
|
CString& CString::Escape(EEscape eFrom, EEscape eTo) {
|
||||||
@@ -246,13 +248,13 @@ CString CString::Right(unsigned int uCount) const {
|
|||||||
return substr(length() - uCount, uCount);
|
return substr(length() - uCount, uCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
VCString CString::Split(const CString& sDelim, bool bAllowEmpty) {
|
VCString CString::Split(const CString& sDelim, bool bAllowEmpty) const {
|
||||||
VCString vsRet;
|
VCString vsRet;
|
||||||
Split(sDelim, vsRet, bAllowEmpty);
|
Split(sDelim, vsRet, bAllowEmpty);
|
||||||
return vsRet;
|
return vsRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int CString::Split(const CString& sDelim, VCString& vsRet, bool bAllowEmpty) {
|
unsigned int CString::Split(const CString& sDelim, VCString& vsRet, bool bAllowEmpty) const {
|
||||||
vsRet.empty();
|
vsRet.empty();
|
||||||
CString sTmp = *this;
|
CString sTmp = *this;
|
||||||
|
|
||||||
@@ -278,6 +280,43 @@ CString CString::Format(const CString& sFormatStr, ...) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long CString::Base64Decode(CString& sRet) const {
|
||||||
|
const char* in = c_str();
|
||||||
|
char c, c1, *p;
|
||||||
|
unsigned long i;
|
||||||
|
unsigned long uLen = size();
|
||||||
|
char* out = (char*) malloc(size() +1);
|
||||||
|
|
||||||
|
for (i = 0, p = out; i < uLen; i++) {
|
||||||
|
c = (char)base64_table[(unsigned char)in[i++]];
|
||||||
|
c1 = (char)base64_table[(unsigned char)in[i++]];
|
||||||
|
*p++ = (c << 2) | ((c1 >> 4) & 0x3);
|
||||||
|
|
||||||
|
if (i < uLen) {
|
||||||
|
if (in[i] == '=') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
c = (char)base64_table[(unsigned char)in[i]];
|
||||||
|
*p++ = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++i < uLen) {
|
||||||
|
if (in[i] == '=') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p++ = ((c << 6) & 0xc0) | (char)base64_table[(unsigned char)in[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*p = '\0';
|
||||||
|
unsigned long uRet = p - out;
|
||||||
|
sRet = out;
|
||||||
|
free(out);
|
||||||
|
|
||||||
|
return uRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CString CString::ToString(char c) { stringstream s; s << c; return s.str(); }
|
CString CString::ToString(char c) { stringstream s; s << c; return s.str(); }
|
||||||
CString CString::ToString(unsigned char c) { stringstream s; s << c; return s.str(); }
|
CString CString::ToString(unsigned char c) { stringstream s; s << c; return s.str(); }
|
||||||
CString CString::ToString(short i) { stringstream s; s << i; return s.str(); }
|
CString CString::ToString(short i) { stringstream s; s << i; return s.str(); }
|
||||||
|
|||||||
@@ -14,11 +14,32 @@ using std::stringstream;
|
|||||||
class CString;
|
class CString;
|
||||||
typedef vector<CString> VCString;
|
typedef vector<CString> VCString;
|
||||||
|
|
||||||
|
static const unsigned char XX = 0xff;
|
||||||
|
static const unsigned char base64_table[256] = {
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, XX,XX,XX,63,
|
||||||
|
52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
|
||||||
|
15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX,
|
||||||
|
XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
|
||||||
|
41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
|
||||||
|
};
|
||||||
|
|
||||||
class CString : public string {
|
class CString : public string {
|
||||||
public:
|
public:
|
||||||
typedef enum {
|
typedef enum {
|
||||||
EAscii,
|
EAscii,
|
||||||
EURL,
|
EURL,
|
||||||
|
EHTML,
|
||||||
} EEscape;
|
} EEscape;
|
||||||
|
|
||||||
CString() : string() {}
|
CString() : string() {}
|
||||||
@@ -36,20 +57,23 @@ public:
|
|||||||
CString AsUpper() const;
|
CString AsUpper() const;
|
||||||
CString AsLower() const;
|
CString AsLower() const;
|
||||||
|
|
||||||
CString Escape_n(EEscape eFrom, EEscape eTo);
|
CString Escape_n(EEscape eFrom, EEscape eTo) const;
|
||||||
CString Escape_n(EEscape eTo);
|
CString Escape_n(EEscape eTo) const;
|
||||||
CString& Escape(EEscape eFrom, EEscape eTo);
|
CString& Escape(EEscape eFrom, EEscape eTo);
|
||||||
CString& Escape(EEscape eTo);
|
CString& Escape(EEscape eTo);
|
||||||
|
|
||||||
static unsigned int Replace(CString& sStr, const CString& sReplace, const CString& sWith);
|
static unsigned int Replace(CString& sStr, const CString& sReplace, const CString& sWith);
|
||||||
unsigned int Replace(const CString& sReplace, const CString& sWith);
|
unsigned int Replace(const CString& sReplace, const CString& sWith);
|
||||||
CString Token(unsigned int uPos, bool bRest = false, const CString& sSep = " ") const;
|
|
||||||
CString Ellipsize(unsigned int uLen) const;
|
CString Ellipsize(unsigned int uLen) const;
|
||||||
CString Left(unsigned int uCount) const;
|
CString Left(unsigned int uCount) const;
|
||||||
CString Right(unsigned int uCount) const;
|
CString Right(unsigned int uCount) const;
|
||||||
VCString Split(const CString& sDelim, bool bKeepEmpty = true);
|
|
||||||
unsigned int Split(const CString& sDelim, VCString& vsRet, bool bAllowEmpty = true);
|
CString Token(unsigned int uPos, bool bRest = false, const CString& sSep = " ") const;
|
||||||
|
VCString Split(const CString& sDelim, bool bKeepEmpty = true) const;
|
||||||
|
unsigned int Split(const CString& sDelim, VCString& vsRet, bool bAllowEmpty = true) const;
|
||||||
|
|
||||||
static CString Format(const CString& sFormatStr, ...);
|
static CString Format(const CString& sFormatStr, ...);
|
||||||
|
unsigned long Base64Decode(CString& sRet) const;
|
||||||
|
|
||||||
static CString ToString(char c);
|
static CString ToString(char c);
|
||||||
static CString ToString(unsigned char c);
|
static CString ToString(unsigned char c);
|
||||||
|
|||||||
Reference in New Issue
Block a user