DCL 3.7.4
Loading...
Searching...
No Matches
Base64Encoder Class Reference

#include <TransferEncoding.h>

Static Public Member Functions

static ByteString encode (const ByteString &_str)

Detailed Description

Definition at line 39 of file TransferEncoding.h.

Member Function Documentation

◆ encode()

ByteString Base64Encoder::encode ( const ByteString & _str)
static

Definition at line 182 of file TransferEncoding.cpp.

183{
184 __DCL_ASSERT(_str.length() > 0);
185
186 size_t nAllocLength = ((_str.length() + 2) / 3) * 4;
187 nAllocLength += 2 * ((nAllocLength / MAX_LINE_LENGTH) + 1); // + 1;
188
189 ByteBuffer* buf = ByteBuffer::create(nAllocLength);
190 byte_t* dest = (byte_t*) buf->data();
191
192 const byte_t* src = (byte_t*)_str.data();
193 size_t len = _str.length();
194 for(size_t i = 1; len >= 3; len -= 3, src += 3) {
195 *dest++ = __base64Table__[src[0] >> 2];
196 *dest++ = __base64Table__[((src[0] & 0x03) << 4) + (src[1] >> 4)];
197 *dest++ = __base64Table__[((src[1] & 0x0f) << 2) + (src[2] >> 6)];
198 *dest++ = __base64Table__[src[2] & 0x3f];
199 if ((i++) == 19) {
200 // reached MAX_LINE_LENGTH == (i * 4) == 76
201 *dest++ = CR;
202 *dest++ = LF;
203 i = 1;
204 }
205 }
206
207 if (len) {
208 *dest++ = __base64Table__[src[0] >> 2];
209 if (len > 1) {
210 *dest++ = __base64Table__[((src[0] & 0x03) << 4) + (src[1] >> 4)];
211 *dest++ = __base64Table__[((src[1] & 0x0f) << 2)];
212 *dest++ = BASE64_PADDING_CHAR;
213 }
214 else {
215 *dest++ = __base64Table__[((src[0] & 0x03) << 4)];
216 *dest++ = BASE64_PADDING_CHAR;
217 *dest++ = BASE64_PADDING_CHAR;
218 }
219 }
220
221 *dest++ = CR;
222 *dest++ = LF;
223
224 *dest = __T('\0');
225 __DCL_ASSERT(buf->data() <= (char*) dest);
226 buf->__dataLength = (char*) dest - buf->data();
227 __DCL_ASSERT(buf->__dataLength <= buf->__allocLength);
228
229 ByteString r = buf;
230 buf->release();
231 return r;
232}
unsigned char byte_t
Definition Config.h:246
#define LF
#define CR
IOException *size_t r
Definition MediaInfo.cpp:82
#define __DCL_ASSERT(expr)
Definition Object.h:394
#define __T(str)
Definition Object.h:60
#define BASE64_PADDING_CHAR
#define MAX_LINE_LENGTH

The documentation for this class was generated from the following files: