summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2013-06-04 14:17:54 +0000
committerGeorge Hazan <george.hazan@gmail.com>2013-06-04 14:17:54 +0000
commit5054e65a8e37c122ee249765f01ee0ece223ec5d (patch)
tree07e443a33447ef372b879f27e2cdad1a8ecf5549 /src
parentdcf04c9a2c3351896897ac22b797e0d6d3e1145f (diff)
base64 functions moved to the proper module
git-svn-id: http://svn.miranda-ng.org/main/trunk@4883 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'src')
-rw-r--r--src/mir_core/http.cpp101
-rw-r--r--src/mir_core/utils.cpp100
2 files changed, 101 insertions, 100 deletions
diff --git a/src/mir_core/http.cpp b/src/mir_core/http.cpp
index da01fe11d8..03c6f9b91f 100644
--- a/src/mir_core/http.cpp
+++ b/src/mir_core/http.cpp
@@ -56,3 +56,104 @@ MIR_CORE_DLL(char*) mir_urlEncode(const char *szUrl)
*d = '\0';
return szOutput;
}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen)
+{
+ if (input == NULL)
+ return NULL;
+
+ BYTE chr[3];
+
+ size_t length = inputLen;
+ size_t nLength = 4 * ((length + 2) / 3) + 1;
+
+ char *output = (char *)mir_alloc(nLength);
+ char *p = output;
+
+ for (size_t i=0; i < length; )
+ {
+ chr[0] = input[i++];
+ chr[1] = input[i++];
+ chr[2] = input[i++];
+
+ *p++ = cb64[ chr[0] >> 2 ];
+ *p++ = cb64[ ((chr[0] & 0x03) << 4) | (chr[1] >> 4) ];
+ BYTE b2 = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6),
+ b3 = chr[2] & 0x3F;
+
+ if (i - 2 >= length) { *p++ = '='; *p++ = '='; }
+ else if (i - 1 >= length) { *p++ = cb64[b2]; *p++ = '='; }
+ else { *p++ = cb64[b2]; *p++ = cb64[b3]; }
+ }
+
+ *p = 0;
+
+ return output;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static int Base64DecodeTable[] =
+{
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+ 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
+ -1, 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,-1, -1,-1,-1,-1,
+ -1,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,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
+};
+
+MIR_CORE_DLL(void*) mir_base64_decode(const char *input, unsigned *outputLen)
+{
+ if (input == NULL)
+ return NULL;
+
+ size_t i = 0;
+ BYTE chr[3], enc[4];
+
+ size_t length = strlen(input);
+ size_t nLength = (length / 4) * 3;
+
+ char *output = (char *)mir_alloc(nLength+1);
+ char *p = output;
+
+ while (i < length)
+ {
+ enc[0] = Base64DecodeTable[input[i++]];
+ enc[1] = Base64DecodeTable[input[i++]];
+ enc[2] = Base64DecodeTable[input[i++]];
+ enc[3] = Base64DecodeTable[input[i++]];
+
+ if (enc[0] == -1 || enc[1] == -1) break;
+
+ chr[0] = (enc[0] << 2) | (enc[1] >> 4);
+ chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2);
+ chr[2] = ((enc[2] & 3) << 6) | enc[3];
+
+ *p++ = chr[0];
+
+ if (enc[2] != -1) *p++ = chr[1];
+ if (enc[3] != -1) *p++ = chr[2];
+ }
+
+ *p = 0;
+
+ if (outputLen != NULL)
+ *outputLen = (unsigned)nLength;
+
+ return output;
+}
diff --git a/src/mir_core/utils.cpp b/src/mir_core/utils.cpp
index be9022188f..21c9e8dfd5 100644
--- a/src/mir_core/utils.cpp
+++ b/src/mir_core/utils.cpp
@@ -212,103 +212,3 @@ MIR_CORE_DLL(int) wildcmpiw(const WCHAR *name, const WCHAR *mask)
if (*mask != '?' && _qtoupper(*mask) != _qtoupper(*name)) name -= (size_t)(mask - last) - 1, mask = last;
}
}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen)
-{
- if (input == NULL)
- return NULL;
-
- BYTE chr[3];
- static char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- size_t length = inputLen;
- size_t nLength = 4 * ((length + 2) / 3) + 1;
-
- char *output = (char *)mir_alloc(nLength);
- char *p = output;
-
- for (size_t i=0; i < length; )
- {
- chr[0] = input[i++];
- chr[1] = input[i++];
- chr[2] = input[i++];
-
- *p++ = cb64[ chr[0] >> 2 ];
- *p++ = cb64[ ((chr[0] & 0x03) << 4) | (chr[1] >> 4) ];
- BYTE b2 = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6),
- b3 = chr[2] & 0x3F;
-
- if (i - 2 >= length) { *p++ = '='; *p++ = '='; }
- else if (i - 1 >= length) { *p++ = cb64[b2]; *p++ = '='; }
- else { *p++ = cb64[b2]; *p++ = cb64[b3]; }
- }
-
- *p = 0;
-
- return output;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static int Base64DecodeTable[] =
-{
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
- 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
- -1, 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,-1, -1,-1,-1,-1,
- -1,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,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
-};
-
-MIR_CORE_DLL(void*) mir_base64_decode(const char *input, unsigned *outputLen)
-{
- if (input == NULL)
- return NULL;
-
- size_t i = 0;
- BYTE chr[3], enc[4];
-
- size_t length = strlen(input);
- size_t nLength = (length / 4) * 3;
-
- char *output = (char *)mir_alloc(nLength+1);
- char *p = output;
-
- while (i < length)
- {
- enc[0] = Base64DecodeTable[input[i++]];
- enc[1] = Base64DecodeTable[input[i++]];
- enc[2] = Base64DecodeTable[input[i++]];
- enc[3] = Base64DecodeTable[input[i++]];
-
- if (enc[0] == -1 || enc[1] == -1) break;
-
- chr[0] = (enc[0] << 2) | (enc[1] >> 4);
- chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2);
- chr[2] = ((enc[2] & 3) << 6) | enc[3];
-
- *p++ = chr[0];
-
- if (enc[2] != -1) *p++ = chr[1];
- if (enc[3] != -1) *p++ = chr[2];
- }
-
- *p = 0;
-
- if (outputLen != NULL)
- *outputLen = (unsigned)nLength;
-
- return output;
-}