mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 17:38:59 +00:00
FS-2746 --resolve large xmlrpc update thanks garmt
This commit is contained in:
49
libs/xmlrpc-c/lib/libutil/base64.c
Normal file
49
libs/xmlrpc-c/lib/libutil/base64.c
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "int.h"
|
||||
#include "xmlrpc-c/base64_int.h"
|
||||
|
||||
|
||||
|
||||
void
|
||||
xmlrpc_base64Encode(const char * const chars,
|
||||
char * const base64) {
|
||||
|
||||
/* Conversion table. */
|
||||
static char tbl[64] = {
|
||||
'A','B','C','D','E','F','G','H',
|
||||
'I','J','K','L','M','N','O','P',
|
||||
'Q','R','S','T','U','V','W','X',
|
||||
'Y','Z','a','b','c','d','e','f',
|
||||
'g','h','i','j','k','l','m','n',
|
||||
'o','p','q','r','s','t','u','v',
|
||||
'w','x','y','z','0','1','2','3',
|
||||
'4','5','6','7','8','9','+','/'
|
||||
};
|
||||
|
||||
unsigned int i;
|
||||
uint32_t length;
|
||||
char * p;
|
||||
const char * s;
|
||||
|
||||
length = strlen(chars); /* initial value */
|
||||
s = &chars[0]; /* initial value */
|
||||
p = &base64[0]; /* initial value */
|
||||
/* Transform the 3x8 bits to 4x6 bits, as required by base64. */
|
||||
for (i = 0; i < length; i += 3) {
|
||||
*p++ = tbl[s[0] >> 2];
|
||||
*p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
|
||||
*p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)];
|
||||
*p++ = tbl[s[2] & 0x3f];
|
||||
s += 3;
|
||||
}
|
||||
|
||||
/* Pad the result if necessary... */
|
||||
if (i == length + 1)
|
||||
*(p - 1) = '=';
|
||||
else if (i == length + 2)
|
||||
*(p - 1) = *(p - 2) = '=';
|
||||
|
||||
/* ...and zero-terminate it. */
|
||||
*p = '\0';
|
||||
}
|
Reference in New Issue
Block a user