Skip to content

Commit 157698b

Browse files
psychogonyigrr
authored andcommitted
Base64: add option to disable any newlines in output. (esp8266#3208)
Closes esp8266#3194
1 parent ca3a172 commit 157698b

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

cores/esp8266/base64.cpp

100644100755
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,20 @@ extern "C" {
3535
* @param length size_t
3636
* @return String
3737
*/
38-
String base64::encode(uint8_t * data, size_t length) {
38+
String base64::encode(uint8_t * data, size_t length, bool doNewLines) {
3939
// base64 needs more size then the source data
4040
size_t size = ((length * 1.6f) + 1);
4141
char * buffer = (char *) malloc(size);
4242
if(buffer) {
4343
base64_encodestate _state;
44-
base64_init_encodestate(&_state);
44+
if(doNewLines)
45+
{
46+
base64_init_encodestate(&_state);
47+
}
48+
else
49+
{
50+
base64_init_encodestate_nonewlines(&_state);
51+
}
4552
int len = base64_encode_block((const char *) &data[0], length, &buffer[0], &_state);
4653
len = base64_encode_blockend((buffer + len), &_state);
4754

@@ -57,7 +64,7 @@ String base64::encode(uint8_t * data, size_t length) {
5764
* @param text String
5865
* @return String
5966
*/
60-
String base64::encode(String text) {
61-
return base64::encode((uint8_t *) text.c_str(), text.length());
67+
String base64::encode(String text, bool doNewLines) {
68+
return base64::encode((uint8_t *) text.c_str(), text.length(), doNewLines);
6269
}
6370

cores/esp8266/base64.h

100644100755
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@
2727

2828
class base64 {
2929
public:
30-
static String encode(uint8_t * data, size_t length);
31-
static String encode(String text);
30+
// NOTE: The default behaviour of backend (lib64)
31+
// is to add a newline every 72 (encoded) characters output.
32+
// This may 'break' longer uris and json variables
33+
static String encode(uint8_t * data, size_t length, bool doNewLines = true);
34+
static String encode(String text, bool doNewLines = true);
3235
private:
3336
};
3437

cores/esp8266/libb64/cencode.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ void base64_init_encodestate(base64_encodestate* state_in){
1313
state_in->step = step_A;
1414
state_in->result = 0;
1515
state_in->stepcount = 0;
16+
state_in->stepsnewline = CHARS_PER_LINE;
17+
}
18+
19+
20+
void base64_init_encodestate_nonewlines(base64_encodestate* state_in){
21+
base64_init_encodestate(state_in);
22+
state_in->stepsnewline = -1;
1623
}
1724

1825
char base64_encode_value(char value_in){
@@ -65,7 +72,7 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
6572
*codechar++ = base64_encode_value(result);
6673

6774
++(state_in->stepcount);
68-
if (state_in->stepcount == CHARS_PER_LINE/4){
75+
if ((state_in->stepcount == CHARS_PER_LINE/4) && (state_in->stepsnewline > 0)){
6976
*codechar++ = '\n';
7077
state_in->stepcount = 0;
7178
}

cores/esp8266/libb64/cencode.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ typedef struct {
2222
base64_encodestep step;
2323
char result;
2424
int stepcount;
25+
int stepsnewline;
2526
} base64_encodestate;
2627

2728
void base64_init_encodestate(base64_encodestate* state_in);
29+
void base64_init_encodestate_nonewlines(base64_encodestate* state_in);
2830

2931
char base64_encode_value(char value_in);
3032

0 commit comments

Comments
 (0)