summaryrefslogtreecommitdiffstats
path: root/src/uscxml/util
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-12-20 00:56:45 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-12-20 00:56:45 (GMT)
commit0388c7ac478187ff8d264b6e0275a4c4a43796b9 (patch)
tree7e62439ebf72b6369ee7b1daa370e6251c06b7e0 /src/uscxml/util
parent22e22bfd0965e01fea041e053873d352387805f6 (diff)
downloaduscxml-0388c7ac478187ff8d264b6e0275a4c4a43796b9.zip
uscxml-0388c7ac478187ff8d264b6e0275a4c4a43796b9.tar.gz
uscxml-0388c7ac478187ff8d264b6e0275a4c4a43796b9.tar.bz2
Performance and bugfix for WebSockets
Diffstat (limited to 'src/uscxml/util')
-rw-r--r--src/uscxml/util/Base64.h5
-rw-r--r--src/uscxml/util/Base64.hpp14
-rw-r--r--src/uscxml/util/MD5.c1
3 files changed, 12 insertions, 8 deletions
diff --git a/src/uscxml/util/Base64.h b/src/uscxml/util/Base64.h
index 7dfc83c..a07d24e 100644
--- a/src/uscxml/util/Base64.h
+++ b/src/uscxml/util/Base64.h
@@ -36,9 +36,7 @@ extern "C" {
} base64_decodestate;
USCXML_API void base64_init_decodestate(base64_decodestate* state_in);
-
USCXML_API int base64_decode_value(char value_in);
-
USCXML_API int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in);
/// ENDCODE
@@ -54,11 +52,8 @@ extern "C" {
} base64_encodestate;
USCXML_API void base64_init_encodestate(base64_encodestate* state_in);
-
USCXML_API char base64_encode_value(char value_in);
-
USCXML_API int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in);
-
USCXML_API int base64_encode_blockend(char* code_out, base64_encodestate* state_in);
#ifdef __cplusplus
diff --git a/src/uscxml/util/Base64.hpp b/src/uscxml/util/Base64.hpp
index a106a12..e3cbe03 100644
--- a/src/uscxml/util/Base64.hpp
+++ b/src/uscxml/util/Base64.hpp
@@ -12,7 +12,7 @@ extern "C" {
namespace uscxml {
-USCXML_API inline std::string base64Encode(const char* data, unsigned int len) {
+USCXML_API inline std::string base64Encode(const char* data, unsigned int len, bool withBlockEnd = true) {
base64_encodestate* ctx = (base64_encodestate*)malloc(sizeof(base64_encodestate));
base64_init_encodestate(ctx);
@@ -22,10 +22,15 @@ USCXML_API inline std::string base64Encode(const char* data, unsigned int len) {
* be approximated with this formula:
*/
+ int written = 0;
char* out = (char*)malloc(len * 1.4 + 814);
- base64_encode_block(data, len, out, ctx);
+ written += base64_encode_block(data, len, out, ctx);
+ if (withBlockEnd) {
+ written += base64_encode_blockend(out + written, ctx);
+ written--; // drop the newline
+ }
+ std::string result(out, written);
free(ctx);
- std::string result(out);
free(out);
return result;
}
@@ -42,5 +47,8 @@ USCXML_API inline std::string base64Decode(const std::string& data) {
return result;
}
+// USCXML_API std::string base64Decode(const std::string& data);
+// USCXML_API std::string base64Encode(const char* data, unsigned int len);
+
}
#endif /* end of include guard: BASE64_H_5FKG12HF */
diff --git a/src/uscxml/util/MD5.c b/src/uscxml/util/MD5.c
index 1bf05e4..f553c9c 100644
--- a/src/uscxml/util/MD5.c
+++ b/src/uscxml/util/MD5.c
@@ -52,6 +52,7 @@
*/
#include "MD5.h"
+#include <string.h>
#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
#ifdef ARCH_IS_BIG_ENDIAN