WIP. send a large constant string twice a second, in order to test out the transport with something indicative of our required load.

Dependencies:   FXOS8700CQ NTPClient azure_umqtt_c iothub_mqtt_transport mbed-rtos mbed wolfSSL Socket lwip-eth lwip-sys lwip

Fork of FXOS8700CQ_To_Azure_IoT by Mark Radbourne

Committer:
julianhigginson
Date:
Thu Jan 05 23:40:24 2017 +0000
Revision:
7:0d1a0fe537dc
Parent:
3:c0556ff7b8e3
modified dummy message for minimal data transport

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 3:c0556ff7b8e3 1 // Copyright (c) Microsoft. All rights reserved.
markrad 3:c0556ff7b8e3 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
markrad 3:c0556ff7b8e3 3
markrad 3:c0556ff7b8e3 4 //
markrad 3:c0556ff7b8e3 5 // PUT NO INCLUDES BEFORE HERE !!!!
markrad 3:c0556ff7b8e3 6 //
markrad 3:c0556ff7b8e3 7 #include <stdlib.h>
markrad 3:c0556ff7b8e3 8 #ifdef _CRTDBG_MAP_ALLOC
markrad 3:c0556ff7b8e3 9 #include <crtdbg.h>
markrad 3:c0556ff7b8e3 10 #endif
markrad 3:c0556ff7b8e3 11 #include "azure_c_shared_utility/gballoc.h"
markrad 3:c0556ff7b8e3 12
markrad 3:c0556ff7b8e3 13 #include <stddef.h>
markrad 3:c0556ff7b8e3 14 #include <string.h>
markrad 3:c0556ff7b8e3 15 //
markrad 3:c0556ff7b8e3 16 // PUT NO CLIENT LIBRARY INCLUDES BEFORE HERE !!!!
markrad 3:c0556ff7b8e3 17 //
markrad 3:c0556ff7b8e3 18 #include "azure_c_shared_utility/urlencode.h"
markrad 3:c0556ff7b8e3 19 #include "azure_c_shared_utility/xlogging.h"
markrad 3:c0556ff7b8e3 20 #include "azure_c_shared_utility/strings.h"
markrad 3:c0556ff7b8e3 21
markrad 3:c0556ff7b8e3 22 #define NIBBLE_STR(c) (char)(c < 10 ? c + '0' : c - 10 + 'a')
markrad 3:c0556ff7b8e3 23 #define IS_PRINTABLE(c) ( \
markrad 3:c0556ff7b8e3 24 (c == 0) || \
markrad 3:c0556ff7b8e3 25 (c == '!') || \
markrad 3:c0556ff7b8e3 26 (c == '(') || (c == ')') || (c == '*') || \
markrad 3:c0556ff7b8e3 27 (c == '-') || (c == '.') || \
markrad 3:c0556ff7b8e3 28 ((c >= '0') && (c <= '9')) || \
markrad 3:c0556ff7b8e3 29 ((c >= 'A') && (c <= 'Z')) || \
markrad 3:c0556ff7b8e3 30 (c == '_') || \
markrad 3:c0556ff7b8e3 31 ((c >= 'a') && (c <= 'z')) \
markrad 3:c0556ff7b8e3 32 )
markrad 3:c0556ff7b8e3 33
markrad 3:c0556ff7b8e3 34 static size_t URL_PrintableChar(unsigned char charVal, char* buffer)
markrad 3:c0556ff7b8e3 35 {
markrad 3:c0556ff7b8e3 36 size_t size;
markrad 3:c0556ff7b8e3 37 if (IS_PRINTABLE(charVal))
markrad 3:c0556ff7b8e3 38 {
markrad 3:c0556ff7b8e3 39 buffer[0] = (char)charVal;
markrad 3:c0556ff7b8e3 40 size = 1;
markrad 3:c0556ff7b8e3 41 }
markrad 3:c0556ff7b8e3 42 else
markrad 3:c0556ff7b8e3 43 {
markrad 3:c0556ff7b8e3 44 char bigNibbleStr;
markrad 3:c0556ff7b8e3 45 char littleNibbleStr;
markrad 3:c0556ff7b8e3 46 unsigned char bigNibbleVal = charVal >> 4;
markrad 3:c0556ff7b8e3 47 unsigned char littleNibbleVal = charVal & 0x0F;
markrad 3:c0556ff7b8e3 48
markrad 3:c0556ff7b8e3 49 if (bigNibbleVal >= 0x0C)
markrad 3:c0556ff7b8e3 50 {
markrad 3:c0556ff7b8e3 51 bigNibbleVal -= 0x04;
markrad 3:c0556ff7b8e3 52 }
markrad 3:c0556ff7b8e3 53
markrad 3:c0556ff7b8e3 54 bigNibbleStr = NIBBLE_STR(bigNibbleVal);
markrad 3:c0556ff7b8e3 55 littleNibbleStr = NIBBLE_STR(littleNibbleVal);
markrad 3:c0556ff7b8e3 56
markrad 3:c0556ff7b8e3 57 buffer[0] = '%';
markrad 3:c0556ff7b8e3 58
markrad 3:c0556ff7b8e3 59 if (charVal < 0x80)
markrad 3:c0556ff7b8e3 60 {
markrad 3:c0556ff7b8e3 61 buffer[1] = bigNibbleStr;
markrad 3:c0556ff7b8e3 62 buffer[2] = littleNibbleStr;
markrad 3:c0556ff7b8e3 63 size = 3;
markrad 3:c0556ff7b8e3 64 }
markrad 3:c0556ff7b8e3 65 else
markrad 3:c0556ff7b8e3 66 {
markrad 3:c0556ff7b8e3 67 buffer[1] = 'c';
markrad 3:c0556ff7b8e3 68 buffer[3] = '%';
markrad 3:c0556ff7b8e3 69 buffer[4] = bigNibbleStr;
markrad 3:c0556ff7b8e3 70 buffer[5] = littleNibbleStr;
markrad 3:c0556ff7b8e3 71 if (charVal < 0xC0)
markrad 3:c0556ff7b8e3 72 {
markrad 3:c0556ff7b8e3 73 buffer[2] = '2';
markrad 3:c0556ff7b8e3 74 }
markrad 3:c0556ff7b8e3 75 else
markrad 3:c0556ff7b8e3 76 {
markrad 3:c0556ff7b8e3 77 buffer[2] = '3';
markrad 3:c0556ff7b8e3 78 }
markrad 3:c0556ff7b8e3 79 size = 6;
markrad 3:c0556ff7b8e3 80 }
markrad 3:c0556ff7b8e3 81 }
markrad 3:c0556ff7b8e3 82
markrad 3:c0556ff7b8e3 83 return size;
markrad 3:c0556ff7b8e3 84 }
markrad 3:c0556ff7b8e3 85
markrad 3:c0556ff7b8e3 86 static size_t URL_PrintableCharSize(unsigned char charVal)
markrad 3:c0556ff7b8e3 87 {
markrad 3:c0556ff7b8e3 88 size_t size;
markrad 3:c0556ff7b8e3 89 if (IS_PRINTABLE(charVal))
markrad 3:c0556ff7b8e3 90 {
markrad 3:c0556ff7b8e3 91 size = 1;
markrad 3:c0556ff7b8e3 92 }
markrad 3:c0556ff7b8e3 93 else
markrad 3:c0556ff7b8e3 94 {
markrad 3:c0556ff7b8e3 95 if (charVal < 0x80)
markrad 3:c0556ff7b8e3 96 {
markrad 3:c0556ff7b8e3 97 size = 3;
markrad 3:c0556ff7b8e3 98 }
markrad 3:c0556ff7b8e3 99 else
markrad 3:c0556ff7b8e3 100 {
markrad 3:c0556ff7b8e3 101 size = 6;
markrad 3:c0556ff7b8e3 102 }
markrad 3:c0556ff7b8e3 103 }
markrad 3:c0556ff7b8e3 104 return size;
markrad 3:c0556ff7b8e3 105 }
markrad 3:c0556ff7b8e3 106
markrad 3:c0556ff7b8e3 107 STRING_HANDLE URL_EncodeString(const char* textEncode)
markrad 3:c0556ff7b8e3 108 {
markrad 3:c0556ff7b8e3 109 STRING_HANDLE result;
markrad 3:c0556ff7b8e3 110 if (textEncode == NULL)
markrad 3:c0556ff7b8e3 111 {
markrad 3:c0556ff7b8e3 112 result = NULL;
markrad 3:c0556ff7b8e3 113 }
markrad 3:c0556ff7b8e3 114 else
markrad 3:c0556ff7b8e3 115 {
markrad 3:c0556ff7b8e3 116 STRING_HANDLE tempString = STRING_construct(textEncode);
markrad 3:c0556ff7b8e3 117 if (tempString == NULL)
markrad 3:c0556ff7b8e3 118 {
markrad 3:c0556ff7b8e3 119 result = NULL;
markrad 3:c0556ff7b8e3 120 }
markrad 3:c0556ff7b8e3 121 else
markrad 3:c0556ff7b8e3 122 {
markrad 3:c0556ff7b8e3 123 result = URL_Encode(tempString);
markrad 3:c0556ff7b8e3 124 STRING_delete(tempString);
markrad 3:c0556ff7b8e3 125 }
markrad 3:c0556ff7b8e3 126 }
markrad 3:c0556ff7b8e3 127 return result;
markrad 3:c0556ff7b8e3 128 }
markrad 3:c0556ff7b8e3 129
markrad 3:c0556ff7b8e3 130 STRING_HANDLE URL_Encode(STRING_HANDLE input)
markrad 3:c0556ff7b8e3 131 {
markrad 3:c0556ff7b8e3 132 STRING_HANDLE result;
markrad 3:c0556ff7b8e3 133 if (input == NULL)
markrad 3:c0556ff7b8e3 134 {
markrad 3:c0556ff7b8e3 135 /*Codes_SRS_URL_ENCODE_06_001: [If input is NULL then URL_Encode will return NULL.]*/
markrad 3:c0556ff7b8e3 136 result = NULL;
markrad 3:c0556ff7b8e3 137 LogError("URL_Encode:: NULL input");
markrad 3:c0556ff7b8e3 138 }
markrad 3:c0556ff7b8e3 139 else
markrad 3:c0556ff7b8e3 140 {
markrad 3:c0556ff7b8e3 141 size_t lengthOfResult = 0;
markrad 3:c0556ff7b8e3 142 char* encodedURL;
markrad 3:c0556ff7b8e3 143 const char* currentInput;
markrad 3:c0556ff7b8e3 144 unsigned char currentUnsignedChar;
markrad 3:c0556ff7b8e3 145 currentInput = STRING_c_str(input);
markrad 3:c0556ff7b8e3 146 /*Codes_SRS_URL_ENCODE_06_003: [If input is a zero length string then URL_Encode will return a zero length string.]*/
markrad 3:c0556ff7b8e3 147 do
markrad 3:c0556ff7b8e3 148 {
markrad 3:c0556ff7b8e3 149 currentUnsignedChar = (unsigned char)(*currentInput++);
markrad 3:c0556ff7b8e3 150 lengthOfResult += URL_PrintableCharSize(currentUnsignedChar);
markrad 3:c0556ff7b8e3 151 } while (currentUnsignedChar != 0);
markrad 3:c0556ff7b8e3 152 if ((encodedURL = malloc(lengthOfResult)) == NULL)
markrad 3:c0556ff7b8e3 153 {
markrad 3:c0556ff7b8e3 154 /*Codes_SRS_URL_ENCODE_06_002: [If an error occurs during the encoding of input then URL_Encode will return NULL.]*/
markrad 3:c0556ff7b8e3 155 result = NULL;
markrad 3:c0556ff7b8e3 156 LogError("URL_Encode:: MALLOC failure on encode.");
markrad 3:c0556ff7b8e3 157 }
markrad 3:c0556ff7b8e3 158 else
markrad 3:c0556ff7b8e3 159 {
markrad 3:c0556ff7b8e3 160 size_t currentEncodePosition = 0;
markrad 3:c0556ff7b8e3 161 currentInput = STRING_c_str(input);
markrad 3:c0556ff7b8e3 162 do
markrad 3:c0556ff7b8e3 163 {
markrad 3:c0556ff7b8e3 164 currentUnsignedChar = (unsigned char)(*currentInput++);
markrad 3:c0556ff7b8e3 165 currentEncodePosition += URL_PrintableChar(currentUnsignedChar, &encodedURL[currentEncodePosition]);
markrad 3:c0556ff7b8e3 166 } while (currentUnsignedChar != 0);
markrad 3:c0556ff7b8e3 167
markrad 3:c0556ff7b8e3 168 result = STRING_new_with_memory(encodedURL);
markrad 3:c0556ff7b8e3 169 if (result == NULL)
markrad 3:c0556ff7b8e3 170 {
markrad 3:c0556ff7b8e3 171 LogError("URL_Encode:: MALLOC failure on encode.");
markrad 3:c0556ff7b8e3 172 free(encodedURL);
markrad 3:c0556ff7b8e3 173 }
markrad 3:c0556ff7b8e3 174 }
markrad 3:c0556ff7b8e3 175 }
markrad 3:c0556ff7b8e3 176 return result;
markrad 3:c0556ff7b8e3 177 }