A simple web server that can be bound to either the EthernetInterface or the WiflyInterface.

Dependents:   Smart-WiFly-WebServer WattEye X10Svr SSDP_Server

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;
 }
-