Demo using MBED TLS

Dependencies:   EthernetInterface NTPClient iothub_amqp_transport iothub_client mbed-rtos mbed

Fork of iothub_client_sample_amqp by Azure IoT

Committer:
markrad
Date:
Thu Jan 05 00:20:03 2017 +0000
Revision:
58:f50b97b08851
Sample using MBED TLS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 58:f50b97b08851 1 // Copyright (c) Microsoft. All rights reserved.
markrad 58:f50b97b08851 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
markrad 58:f50b97b08851 3
markrad 58:f50b97b08851 4 #include <stdlib.h>
markrad 58:f50b97b08851 5 #ifdef _CRTDBG_MAP_ALLOC
markrad 58:f50b97b08851 6 #include <crtdbg.h>
markrad 58:f50b97b08851 7 #endif
markrad 58:f50b97b08851 8
markrad 58:f50b97b08851 9 #include "azure_c_shared_utility/gballoc.h"
markrad 58:f50b97b08851 10 #include "azure_c_shared_utility/vector.h"
markrad 58:f50b97b08851 11
markrad 58:f50b97b08851 12
markrad 58:f50b97b08851 13 typedef struct VECTOR_TAG
markrad 58:f50b97b08851 14 {
markrad 58:f50b97b08851 15 void* storage;
markrad 58:f50b97b08851 16 size_t count;
markrad 58:f50b97b08851 17 size_t elementSize;
markrad 58:f50b97b08851 18 } VECTOR;
markrad 58:f50b97b08851 19
markrad 58:f50b97b08851 20 VECTOR_HANDLE VECTOR_create(size_t elementSize)
markrad 58:f50b97b08851 21 {
markrad 58:f50b97b08851 22 VECTOR_HANDLE result;
markrad 58:f50b97b08851 23
markrad 58:f50b97b08851 24 VECTOR* vec = (VECTOR*)malloc(sizeof(VECTOR));
markrad 58:f50b97b08851 25 if (vec == NULL)
markrad 58:f50b97b08851 26 {
markrad 58:f50b97b08851 27 result = NULL;
markrad 58:f50b97b08851 28 }
markrad 58:f50b97b08851 29 else
markrad 58:f50b97b08851 30 {
markrad 58:f50b97b08851 31 vec->storage = NULL;
markrad 58:f50b97b08851 32 vec->count = 0;
markrad 58:f50b97b08851 33 vec->elementSize = elementSize;
markrad 58:f50b97b08851 34 result = (VECTOR_HANDLE)vec;
markrad 58:f50b97b08851 35 }
markrad 58:f50b97b08851 36 return result;
markrad 58:f50b97b08851 37 }
markrad 58:f50b97b08851 38
markrad 58:f50b97b08851 39 static void internal_VECTOR_clear(VECTOR* vec)
markrad 58:f50b97b08851 40 {
markrad 58:f50b97b08851 41 if (vec->storage != NULL)
markrad 58:f50b97b08851 42 {
markrad 58:f50b97b08851 43 free(vec->storage);
markrad 58:f50b97b08851 44 vec->storage = NULL;
markrad 58:f50b97b08851 45 }
markrad 58:f50b97b08851 46 vec->count = 0;
markrad 58:f50b97b08851 47 }
markrad 58:f50b97b08851 48
markrad 58:f50b97b08851 49 void VECTOR_destroy(VECTOR_HANDLE handle)
markrad 58:f50b97b08851 50 {
markrad 58:f50b97b08851 51 if (handle != NULL)
markrad 58:f50b97b08851 52 {
markrad 58:f50b97b08851 53 VECTOR* vec = (VECTOR*)handle;
markrad 58:f50b97b08851 54 internal_VECTOR_clear(vec);
markrad 58:f50b97b08851 55 free(vec);
markrad 58:f50b97b08851 56 }
markrad 58:f50b97b08851 57 }
markrad 58:f50b97b08851 58
markrad 58:f50b97b08851 59 /* insertion */
markrad 58:f50b97b08851 60 int VECTOR_push_back(VECTOR_HANDLE handle, const void* elements, size_t numElements)
markrad 58:f50b97b08851 61 {
markrad 58:f50b97b08851 62 int result;
markrad 58:f50b97b08851 63 if (handle == NULL || elements == NULL || numElements == 0)
markrad 58:f50b97b08851 64 {
markrad 58:f50b97b08851 65 result = __LINE__;
markrad 58:f50b97b08851 66 }
markrad 58:f50b97b08851 67 else
markrad 58:f50b97b08851 68 {
markrad 58:f50b97b08851 69 VECTOR* vec = (VECTOR*)handle;
markrad 58:f50b97b08851 70 const size_t curSize = vec->elementSize * vec->count;
markrad 58:f50b97b08851 71 const size_t appendSize = vec->elementSize * numElements;
markrad 58:f50b97b08851 72
markrad 58:f50b97b08851 73 void* temp = realloc(vec->storage, curSize + appendSize);
markrad 58:f50b97b08851 74 if (temp == NULL)
markrad 58:f50b97b08851 75 {
markrad 58:f50b97b08851 76 result = __LINE__;
markrad 58:f50b97b08851 77 }
markrad 58:f50b97b08851 78 else
markrad 58:f50b97b08851 79 {
markrad 58:f50b97b08851 80 memcpy((unsigned char*)temp + curSize, elements, appendSize);
markrad 58:f50b97b08851 81 vec->storage = temp;
markrad 58:f50b97b08851 82 vec->count += numElements;
markrad 58:f50b97b08851 83 result = 0;
markrad 58:f50b97b08851 84 }
markrad 58:f50b97b08851 85 }
markrad 58:f50b97b08851 86 return result;
markrad 58:f50b97b08851 87 }
markrad 58:f50b97b08851 88
markrad 58:f50b97b08851 89 /* removal */
markrad 58:f50b97b08851 90 void VECTOR_erase(VECTOR_HANDLE handle, void* elements, size_t numElements)
markrad 58:f50b97b08851 91 {
markrad 58:f50b97b08851 92 if (handle != NULL && elements != NULL && numElements > 0)
markrad 58:f50b97b08851 93 {
markrad 58:f50b97b08851 94 VECTOR* vec = (VECTOR*)handle;
markrad 58:f50b97b08851 95 unsigned char* src = (unsigned char*)elements + (vec->elementSize * numElements);
markrad 58:f50b97b08851 96 unsigned char* srcEnd = (unsigned char*)vec->storage + (vec->elementSize * vec->count);
markrad 58:f50b97b08851 97 (void)memmove(elements, src, srcEnd - src);
markrad 58:f50b97b08851 98 vec->count -= numElements;
markrad 58:f50b97b08851 99 if (vec->count == 0)
markrad 58:f50b97b08851 100 {
markrad 58:f50b97b08851 101 free(vec->storage);
markrad 58:f50b97b08851 102 vec->storage = NULL;
markrad 58:f50b97b08851 103 }
markrad 58:f50b97b08851 104 else
markrad 58:f50b97b08851 105 {
markrad 58:f50b97b08851 106 vec->storage = realloc(vec->storage, (vec->elementSize * vec->count));
markrad 58:f50b97b08851 107 }
markrad 58:f50b97b08851 108 }
markrad 58:f50b97b08851 109 }
markrad 58:f50b97b08851 110
markrad 58:f50b97b08851 111 void VECTOR_clear(VECTOR_HANDLE handle)
markrad 58:f50b97b08851 112 {
markrad 58:f50b97b08851 113 if (handle != NULL)
markrad 58:f50b97b08851 114 {
markrad 58:f50b97b08851 115 VECTOR* vec = (VECTOR*)handle;
markrad 58:f50b97b08851 116 internal_VECTOR_clear(vec);
markrad 58:f50b97b08851 117 }
markrad 58:f50b97b08851 118 }
markrad 58:f50b97b08851 119
markrad 58:f50b97b08851 120 /* access */
markrad 58:f50b97b08851 121
markrad 58:f50b97b08851 122 void* VECTOR_element(const VECTOR_HANDLE handle, size_t index)
markrad 58:f50b97b08851 123 {
markrad 58:f50b97b08851 124 void* result = NULL;
markrad 58:f50b97b08851 125 if (handle != NULL)
markrad 58:f50b97b08851 126 {
markrad 58:f50b97b08851 127 const VECTOR* vec = (const VECTOR*)handle;
markrad 58:f50b97b08851 128 if (index < vec->count)
markrad 58:f50b97b08851 129 {
markrad 58:f50b97b08851 130 result = (unsigned char*)vec->storage + (vec->elementSize * index);
markrad 58:f50b97b08851 131 }
markrad 58:f50b97b08851 132 }
markrad 58:f50b97b08851 133 return result;
markrad 58:f50b97b08851 134 }
markrad 58:f50b97b08851 135
markrad 58:f50b97b08851 136 void* VECTOR_front(const VECTOR_HANDLE handle)
markrad 58:f50b97b08851 137 {
markrad 58:f50b97b08851 138 void* result = NULL;
markrad 58:f50b97b08851 139 if (handle != NULL)
markrad 58:f50b97b08851 140 {
markrad 58:f50b97b08851 141 const VECTOR* vec = (const VECTOR*)handle;
markrad 58:f50b97b08851 142 result = vec->storage;
markrad 58:f50b97b08851 143 }
markrad 58:f50b97b08851 144 return result;
markrad 58:f50b97b08851 145 }
markrad 58:f50b97b08851 146
markrad 58:f50b97b08851 147 void* VECTOR_back(const VECTOR_HANDLE handle)
markrad 58:f50b97b08851 148 {
markrad 58:f50b97b08851 149 void* result = NULL;
markrad 58:f50b97b08851 150 if (handle != NULL)
markrad 58:f50b97b08851 151 {
markrad 58:f50b97b08851 152 const VECTOR* vec = (const VECTOR*)handle;
markrad 58:f50b97b08851 153 result = (unsigned char*)vec->storage + (vec->elementSize * (vec->count - 1));
markrad 58:f50b97b08851 154 }
markrad 58:f50b97b08851 155 return result;
markrad 58:f50b97b08851 156 }
markrad 58:f50b97b08851 157
markrad 58:f50b97b08851 158 void* VECTOR_find_if(const VECTOR_HANDLE handle, PREDICATE_FUNCTION pred, const void* value)
markrad 58:f50b97b08851 159 {
markrad 58:f50b97b08851 160 void* result = NULL;
markrad 58:f50b97b08851 161 size_t i;
markrad 58:f50b97b08851 162 VECTOR* handleData = (VECTOR*)handle;
markrad 58:f50b97b08851 163 if (handle != NULL && pred != NULL && value != NULL)
markrad 58:f50b97b08851 164 {
markrad 58:f50b97b08851 165 for (i = 0; i < handleData->count; ++i)
markrad 58:f50b97b08851 166 {
markrad 58:f50b97b08851 167 void* elem = (unsigned char*)handleData->storage + (handleData->elementSize * i);
markrad 58:f50b97b08851 168 if (!!pred(elem, value))
markrad 58:f50b97b08851 169 {
markrad 58:f50b97b08851 170 result = elem;
markrad 58:f50b97b08851 171 break;
markrad 58:f50b97b08851 172 }
markrad 58:f50b97b08851 173 }
markrad 58:f50b97b08851 174 }
markrad 58:f50b97b08851 175 return result;
markrad 58:f50b97b08851 176 }
markrad 58:f50b97b08851 177
markrad 58:f50b97b08851 178 /* capacity */
markrad 58:f50b97b08851 179
markrad 58:f50b97b08851 180 size_t VECTOR_size(const VECTOR_HANDLE handle)
markrad 58:f50b97b08851 181 {
markrad 58:f50b97b08851 182 size_t result = 0;
markrad 58:f50b97b08851 183 if (handle != NULL)
markrad 58:f50b97b08851 184 {
markrad 58:f50b97b08851 185 const VECTOR* vec = (const VECTOR*)handle;
markrad 58:f50b97b08851 186 result = vec->count;
markrad 58:f50b97b08851 187 }
markrad 58:f50b97b08851 188 return result;
markrad 58:f50b97b08851 189 }