A simple web server that can be bound to either the EthernetInterface or the WiflyInterface.
Dependents: Smart-WiFly-WebServer WattEye X10Svr SSDP_Server
Diff: Base64.cpp
- Revision:
- 13:8975d7928678
- Parent:
- 12:109bf1558300
- Child:
- 14:19c5f6151319
--- a/Base64.cpp Sun Aug 11 15:49:51 2013 +0000 +++ b/Base64.cpp Mon Aug 12 11:26:59 2013 +0000 @@ -1,5 +1,9 @@ - +#ifndef WIN32 #include "mbed.h" +#else +#include "windows.h" +typedef unsigned int uint32_t; +#endif #include "Base64.h" static const char encoding_table[] = { @@ -27,14 +31,14 @@ } -char * Base64::base64_encode(const unsigned char *data,size_t input_length,size_t *output_length) +char * Base64::Encode(const char *data, size_t input_length, size_t *output_length) { *output_length = 4 * ((input_length + 2) / 3); - char *encoded_data = (char *)malloc(*output_length); + char *encoded_data = (char *)malloc(*output_length+1); // often used for text, so add room for NULL if (encoded_data == NULL) return NULL; - for (int i = 0, j = 0; i < input_length;) { + for (unsigned int i = 0, j = 0; i < input_length;) { uint32_t octet_a = i < input_length ? data[i++] : 0; uint32_t octet_b = i < input_length ? data[i++] : 0; @@ -51,11 +55,12 @@ for (int i = 0; i < mod_table[input_length % 3]; i++) encoded_data[*output_length - 1 - i] = '='; + encoded_data[*output_length] = '\0'; // as a courtesy to text users return encoded_data; } -unsigned char * Base64::base64_decode(const char *data,size_t input_length,size_t *output_length) +char * Base64::Decode(const char *data, size_t input_length, size_t *output_length) { if (decoding_table == NULL) build_decoding_table(); @@ -67,11 +72,11 @@ if (data[input_length - 1] == '=') (*output_length)--; if (data[input_length - 2] == '=') (*output_length)--; - unsigned char *decoded_data = (unsigned char *)malloc(*output_length); + char *decoded_data = (char *)malloc(*output_length+1); // often used for text, so add room for NULL if (decoded_data == NULL) return NULL; - for (int i = 0, j = 0; i < input_length;) { + for (unsigned int i = 0, j = 0; i < input_length;) { uint32_t sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]]; uint32_t sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]]; @@ -90,6 +95,7 @@ if (j < *output_length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF; } + decoded_data[*output_length] = '\0'; // as a courtesy to text users return decoded_data; } @@ -101,4 +107,3 @@ for (int i = 0; i < 64; i++) decoding_table[(unsigned char) encoding_table[i]] = i; } -