change some parameters in the library to meet the needs of the website httpbin.org

Fork of MiniTLS-GPL by Donatien Garnier

Committer:
shiyilei
Date:
Fri Feb 06 06:17:33 2015 +0000
Revision:
5:95f70ebfe61f
Parent:
3:eb324ffffd2b
change some parameters in the library to meet the needs of httpbin.org

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 3:eb324ffffd2b 1 /*
MiniTLS 3:eb324ffffd2b 2 MiniTLS - A super trimmed down TLS/SSL Library for embedded devices
MiniTLS 3:eb324ffffd2b 3 Author: Donatien Garnier
MiniTLS 3:eb324ffffd2b 4 Copyright (C) 2013-2014 AppNearMe Ltd
MiniTLS 3:eb324ffffd2b 5
MiniTLS 3:eb324ffffd2b 6 This program is free software; you can redistribute it and/or
MiniTLS 3:eb324ffffd2b 7 modify it under the terms of the GNU General Public License
MiniTLS 3:eb324ffffd2b 8 as published by the Free Software Foundation; either version 2
MiniTLS 3:eb324ffffd2b 9 of the License, or (at your option) any later version.
MiniTLS 3:eb324ffffd2b 10
MiniTLS 3:eb324ffffd2b 11 This program is distributed in the hope that it will be useful,
MiniTLS 3:eb324ffffd2b 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
MiniTLS 3:eb324ffffd2b 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MiniTLS 3:eb324ffffd2b 14 GNU General Public License for more details.
MiniTLS 3:eb324ffffd2b 15
MiniTLS 3:eb324ffffd2b 16 You should have received a copy of the GNU General Public License
MiniTLS 3:eb324ffffd2b 17 along with this program; if not, write to the Free Software
MiniTLS 3:eb324ffffd2b 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
MiniTLS 3:eb324ffffd2b 19 *//**
MiniTLS 3:eb324ffffd2b 20 * \file buffer.c
MiniTLS 3:eb324ffffd2b 21 * \copyright Copyright (c) AppNearMe Ltd 2013
MiniTLS 3:eb324ffffd2b 22 * \author Donatien Garnier
MiniTLS 3:eb324ffffd2b 23 * \desc Module to ease buffers' management
MiniTLS 3:eb324ffffd2b 24 */
MiniTLS 3:eb324ffffd2b 25
MiniTLS 3:eb324ffffd2b 26 /** \addtogroup Core
MiniTLS 3:eb324ffffd2b 27 * @{
MiniTLS 3:eb324ffffd2b 28 * \name Buffers
MiniTLS 3:eb324ffffd2b 29 * @{
MiniTLS 3:eb324ffffd2b 30 */
MiniTLS 3:eb324ffffd2b 31
MiniTLS 3:eb324ffffd2b 32 #include "core/fwk.h"
MiniTLS 3:eb324ffffd2b 33 #include "buffer.h"
MiniTLS 3:eb324ffffd2b 34
MiniTLS 3:eb324ffffd2b 35 /** Initialize buffer using underlying byte array, set buffer's length to 0 (empty)
MiniTLS 3:eb324ffffd2b 36 * \param pBuf pointer to buffer_t structure to initialize
MiniTLS 3:eb324ffffd2b 37 * \param bufdata byte array to use
MiniTLS 3:eb324ffffd2b 38 * \param size size of byte array
MiniTLS 3:eb324ffffd2b 39 */
MiniTLS 3:eb324ffffd2b 40 void buffer_init(buffer_t* pBuf, uint8_t* bufdata, size_t size)
MiniTLS 3:eb324ffffd2b 41 {
MiniTLS 3:eb324ffffd2b 42 pBuf->bufdata = (uint8_t*) bufdata;
MiniTLS 3:eb324ffffd2b 43 pBuf->size = size;
MiniTLS 3:eb324ffffd2b 44
MiniTLS 3:eb324ffffd2b 45 pBuf->start = pBuf->bufdata;
MiniTLS 3:eb324ffffd2b 46 pBuf->first_byte_length = 0;
MiniTLS 3:eb324ffffd2b 47
MiniTLS 3:eb324ffffd2b 48 pBuf->end = pBuf->start;
MiniTLS 3:eb324ffffd2b 49 pBuf->last_byte_length = 8; //In bits
MiniTLS 3:eb324ffffd2b 50
MiniTLS 3:eb324ffffd2b 51 pBuf->next = NULL;
MiniTLS 3:eb324ffffd2b 52 }
MiniTLS 3:eb324ffffd2b 53
MiniTLS 3:eb324ffffd2b 54 /** Initialize buffer using underlying byte array, set buffer's length to array's size (full)
MiniTLS 3:eb324ffffd2b 55 * \param pBuf pointer to buffer_t structure to initialize
MiniTLS 3:eb324ffffd2b 56 * \param bufdata byte array to use
MiniTLS 3:eb324ffffd2b 57 * \param size size of byte array
MiniTLS 3:eb324ffffd2b 58 */
MiniTLS 3:eb324ffffd2b 59 void buffer_byref(buffer_t* pBuf, uint8_t* bufdata, size_t length) //New buffer_t by ref on a size_t array, no malloc (useful on PIC for instance)
MiniTLS 3:eb324ffffd2b 60 {
MiniTLS 3:eb324ffffd2b 61 buffer_init(pBuf, bufdata, length);
MiniTLS 3:eb324ffffd2b 62 buffer_set_length(pBuf, length);
MiniTLS 3:eb324ffffd2b 63 }
MiniTLS 3:eb324ffffd2b 64
MiniTLS 3:eb324ffffd2b 65 #ifdef USE_MALLOC
MiniTLS 3:eb324ffffd2b 66 buffer_t* buffer_new(size_t size) //malloc
MiniTLS 3:eb324ffffd2b 67 {
MiniTLS 3:eb324ffffd2b 68 buffer_t* pBuf = (buffer_t*) malloc(sizeof(buffer_t));
MiniTLS 3:eb324ffffd2b 69 buffer_init(pBuf, (uint8_t*) malloc(size), size);
MiniTLS 3:eb324ffffd2b 70 return pBuf;
MiniTLS 3:eb324ffffd2b 71 }
MiniTLS 3:eb324ffffd2b 72 #endif
MiniTLS 3:eb324ffffd2b 73
MiniTLS 3:eb324ffffd2b 74 /** Get buffer's underlying byte array
MiniTLS 3:eb324ffffd2b 75 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 76 * \return underlying array
MiniTLS 3:eb324ffffd2b 77 */
MiniTLS 3:eb324ffffd2b 78 uint8_t* buffer_data(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 79 {
MiniTLS 3:eb324ffffd2b 80 return pBuf->bufdata;
MiniTLS 3:eb324ffffd2b 81 }
MiniTLS 3:eb324ffffd2b 82
MiniTLS 3:eb324ffffd2b 83 /** Reset buffer (empty)
MiniTLS 3:eb324ffffd2b 84 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 85 */
MiniTLS 3:eb324ffffd2b 86 void buffer_reset(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 87 {
MiniTLS 3:eb324ffffd2b 88 buffer_init(pBuf, pBuf->bufdata, pBuf->size);
MiniTLS 3:eb324ffffd2b 89 }
MiniTLS 3:eb324ffffd2b 90
MiniTLS 3:eb324ffffd2b 91 /** Get buffer's size
MiniTLS 3:eb324ffffd2b 92 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 93 * \return buffer's size
MiniTLS 3:eb324ffffd2b 94 */
MiniTLS 3:eb324ffffd2b 95 size_t buffer_size(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 96 {
MiniTLS 3:eb324ffffd2b 97 return pBuf->size;
MiniTLS 3:eb324ffffd2b 98 }
MiniTLS 3:eb324ffffd2b 99
MiniTLS 3:eb324ffffd2b 100 /** Get buffer's length
MiniTLS 3:eb324ffffd2b 101 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 102 * \return number of valid bytes in buffer
MiniTLS 3:eb324ffffd2b 103 */
MiniTLS 3:eb324ffffd2b 104 size_t buffer_length(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 105 {
MiniTLS 3:eb324ffffd2b 106 return (pBuf->end - pBuf->start);
MiniTLS 3:eb324ffffd2b 107 }
MiniTLS 3:eb324ffffd2b 108
MiniTLS 3:eb324ffffd2b 109 /** Get space in buffer
MiniTLS 3:eb324ffffd2b 110 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 111 * \return number of free bytes in buffer
MiniTLS 3:eb324ffffd2b 112 */
MiniTLS 3:eb324ffffd2b 113 size_t buffer_space(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 114 {
MiniTLS 3:eb324ffffd2b 115 return pBuf->bufdata + pBuf->size - pBuf->end;
MiniTLS 3:eb324ffffd2b 116 }
MiniTLS 3:eb324ffffd2b 117
MiniTLS 3:eb324ffffd2b 118 /** Is buffer empty
MiniTLS 3:eb324ffffd2b 119 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 120 * \return true if buffer is empty
MiniTLS 3:eb324ffffd2b 121 */
MiniTLS 3:eb324ffffd2b 122 bool buffer_empty(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 123 {
MiniTLS 3:eb324ffffd2b 124 return !buffer_length(pBuf);
MiniTLS 3:eb324ffffd2b 125 }
MiniTLS 3:eb324ffffd2b 126
MiniTLS 3:eb324ffffd2b 127 /** Set buffer's length
MiniTLS 3:eb324ffffd2b 128 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 129 * \param length number of valid bytes in buffer
MiniTLS 3:eb324ffffd2b 130 */
MiniTLS 3:eb324ffffd2b 131 void buffer_set_length(buffer_t* pBuf, size_t length)
MiniTLS 3:eb324ffffd2b 132 {
MiniTLS 3:eb324ffffd2b 133 pBuf->end = pBuf->start + length;
MiniTLS 3:eb324ffffd2b 134 pBuf->first_byte_length = 0;
MiniTLS 3:eb324ffffd2b 135 pBuf->last_byte_length = 8;
MiniTLS 3:eb324ffffd2b 136 }
MiniTLS 3:eb324ffffd2b 137
MiniTLS 3:eb324ffffd2b 138 /** Get buffer's last byte's length
MiniTLS 3:eb324ffffd2b 139 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 140 * \return number of valid bits in buffer's last byte
MiniTLS 3:eb324ffffd2b 141 */
MiniTLS 3:eb324ffffd2b 142 size_t buffer_last_byte_length(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 143 {
MiniTLS 3:eb324ffffd2b 144 return pBuf->last_byte_length;
MiniTLS 3:eb324ffffd2b 145 }
MiniTLS 3:eb324ffffd2b 146
MiniTLS 3:eb324ffffd2b 147 /** Set buffer's last byte's length
MiniTLS 3:eb324ffffd2b 148 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 149 * \param length number of valid bits in buffer's last byte
MiniTLS 3:eb324ffffd2b 150 */
MiniTLS 3:eb324ffffd2b 151 void buffer_set_last_byte_length(buffer_t* pBuf, size_t length)
MiniTLS 3:eb324ffffd2b 152 {
MiniTLS 3:eb324ffffd2b 153 pBuf->last_byte_length = length;
MiniTLS 3:eb324ffffd2b 154 }
MiniTLS 3:eb324ffffd2b 155
MiniTLS 3:eb324ffffd2b 156 /** Get buffer's bits count
MiniTLS 3:eb324ffffd2b 157 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 158 * \return total number of valid bits in buffer
MiniTLS 3:eb324ffffd2b 159 */
MiniTLS 3:eb324ffffd2b 160 size_t buffer_bits_count(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 161 {
MiniTLS 3:eb324ffffd2b 162 size_t length;
MiniTLS 3:eb324ffffd2b 163 length = buffer_length(pBuf);
MiniTLS 3:eb324ffffd2b 164 if(length == 0)
MiniTLS 3:eb324ffffd2b 165 {
MiniTLS 3:eb324ffffd2b 166 return 0;
MiniTLS 3:eb324ffffd2b 167 }
MiniTLS 3:eb324ffffd2b 168 else if(length == 1)
MiniTLS 3:eb324ffffd2b 169 {
MiniTLS 3:eb324ffffd2b 170 return pBuf->first_byte_length;
MiniTLS 3:eb324ffffd2b 171 }
MiniTLS 3:eb324ffffd2b 172 else // > 2
MiniTLS 3:eb324ffffd2b 173 {
MiniTLS 3:eb324ffffd2b 174 return pBuf->first_byte_length + 8*(length - 2) + pBuf->last_byte_length;
MiniTLS 3:eb324ffffd2b 175 }
MiniTLS 3:eb324ffffd2b 176 }
MiniTLS 3:eb324ffffd2b 177
MiniTLS 3:eb324ffffd2b 178 /** Write one byte to buffer
MiniTLS 3:eb324ffffd2b 179 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 180 * \param b byte to append
MiniTLS 3:eb324ffffd2b 181 */
MiniTLS 3:eb324ffffd2b 182 void buffer_write_byte(buffer_t* pBuf, uint8_t b)
MiniTLS 3:eb324ffffd2b 183 {
MiniTLS 3:eb324ffffd2b 184 size_t i;
MiniTLS 3:eb324ffffd2b 185 if(pBuf->end >= pBuf->start + pBuf->size) //buffer_t full
MiniTLS 3:eb324ffffd2b 186 return;
MiniTLS 3:eb324ffffd2b 187 if(pBuf->last_byte_length == 8)
MiniTLS 3:eb324ffffd2b 188 {
MiniTLS 3:eb324ffffd2b 189 *(pBuf->end) = b;
MiniTLS 3:eb324ffffd2b 190 pBuf->end++;
MiniTLS 3:eb324ffffd2b 191 }
MiniTLS 3:eb324ffffd2b 192 else
MiniTLS 3:eb324ffffd2b 193 {
MiniTLS 3:eb324ffffd2b 194 for(i = 0; i < 8; i++)
MiniTLS 3:eb324ffffd2b 195 {
MiniTLS 3:eb324ffffd2b 196 buffer_write_bit(pBuf, (b>>i)&1);
MiniTLS 3:eb324ffffd2b 197 }
MiniTLS 3:eb324ffffd2b 198 }
MiniTLS 3:eb324ffffd2b 199
MiniTLS 3:eb324ffffd2b 200 }
MiniTLS 3:eb324ffffd2b 201
MiniTLS 3:eb324ffffd2b 202 /** Write one bit to buffer
MiniTLS 3:eb324ffffd2b 203 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 204 * \param b bit to append
MiniTLS 3:eb324ffffd2b 205 */
MiniTLS 3:eb324ffffd2b 206 void buffer_write_bit(buffer_t* pBuf, uint8_t b)
MiniTLS 3:eb324ffffd2b 207 {
MiniTLS 3:eb324ffffd2b 208 if(pBuf->end >= pBuf->start + pBuf->size)
MiniTLS 3:eb324ffffd2b 209 return;
MiniTLS 3:eb324ffffd2b 210 if(pBuf->last_byte_length == 8)
MiniTLS 3:eb324ffffd2b 211 {
MiniTLS 3:eb324ffffd2b 212 if( (pBuf->end + 1) >= pBuf->start + pBuf->size)
MiniTLS 3:eb324ffffd2b 213 return;
MiniTLS 3:eb324ffffd2b 214 pBuf->end++;
MiniTLS 3:eb324ffffd2b 215 pBuf->last_byte_length = 0;
MiniTLS 3:eb324ffffd2b 216 *(pBuf->end) = 0;
MiniTLS 3:eb324ffffd2b 217 }
MiniTLS 3:eb324ffffd2b 218 *(pBuf->end) = (*(pBuf->end) << pBuf->last_byte_length) | (b & 1);
MiniTLS 3:eb324ffffd2b 219 pBuf->last_byte_length++;
MiniTLS 3:eb324ffffd2b 220 }
MiniTLS 3:eb324ffffd2b 221
MiniTLS 3:eb324ffffd2b 222 /** Get next buffer in chain
MiniTLS 3:eb324ffffd2b 223 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 224 * \return pointer to next buffer
MiniTLS 3:eb324ffffd2b 225 */
MiniTLS 3:eb324ffffd2b 226 buffer_t* buffer_next(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 227 {
MiniTLS 3:eb324ffffd2b 228 return pBuf->next;
MiniTLS 3:eb324ffffd2b 229 }
MiniTLS 3:eb324ffffd2b 230
MiniTLS 3:eb324ffffd2b 231 /** Set next buffer in chain
MiniTLS 3:eb324ffffd2b 232 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 233 * \param pNextBuf pointer to next buffer (or NULL to break chain)
MiniTLS 3:eb324ffffd2b 234 */
MiniTLS 3:eb324ffffd2b 235 void buffer_set_next(buffer_t* pBuf, buffer_t* pNextBuf)
MiniTLS 3:eb324ffffd2b 236 {
MiniTLS 3:eb324ffffd2b 237 pBuf->next = (buffer_t*) pNextBuf;
MiniTLS 3:eb324ffffd2b 238 }
MiniTLS 3:eb324ffffd2b 239
MiniTLS 3:eb324ffffd2b 240 /** Append next buffer to the whole chain
MiniTLS 3:eb324ffffd2b 241 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 242 * \param pAppBuf pointer to buffer to append
MiniTLS 3:eb324ffffd2b 243 */
MiniTLS 3:eb324ffffd2b 244 void buffer_append(buffer_t* pBuf, buffer_t* pAppBuf)
MiniTLS 3:eb324ffffd2b 245 {
MiniTLS 3:eb324ffffd2b 246 buffer_t* p;
MiniTLS 3:eb324ffffd2b 247 p = (buffer_t*) pBuf;
MiniTLS 3:eb324ffffd2b 248 while( p->next )
MiniTLS 3:eb324ffffd2b 249 {
MiniTLS 3:eb324ffffd2b 250 p = p->next;
MiniTLS 3:eb324ffffd2b 251 }
MiniTLS 3:eb324ffffd2b 252 p->next = pAppBuf;
MiniTLS 3:eb324ffffd2b 253 }
MiniTLS 3:eb324ffffd2b 254
MiniTLS 3:eb324ffffd2b 255 /** Split chain at specified buffer
MiniTLS 3:eb324ffffd2b 256 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 257 * \param pLinkedBuf pointer to buffer from which to split the chain
MiniTLS 3:eb324ffffd2b 258 */
MiniTLS 3:eb324ffffd2b 259 void buffer_unlink(buffer_t* pBuf, buffer_t* pLinkedBuf)
MiniTLS 3:eb324ffffd2b 260 {
MiniTLS 3:eb324ffffd2b 261 buffer_t* p;
MiniTLS 3:eb324ffffd2b 262 p = (buffer_t*) pBuf;
MiniTLS 3:eb324ffffd2b 263 while( p->next && (p->next != pLinkedBuf) )
MiniTLS 3:eb324ffffd2b 264 {
MiniTLS 3:eb324ffffd2b 265 p = p->next;
MiniTLS 3:eb324ffffd2b 266 }
MiniTLS 3:eb324ffffd2b 267 p->next = NULL;
MiniTLS 3:eb324ffffd2b 268 }
MiniTLS 3:eb324ffffd2b 269
MiniTLS 3:eb324ffffd2b 270 /** Get buffer chain's total size
MiniTLS 3:eb324ffffd2b 271 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 272 * \return sum of each buffer's size
MiniTLS 3:eb324ffffd2b 273 */
MiniTLS 3:eb324ffffd2b 274 size_t buffer_total_size(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 275 {
MiniTLS 3:eb324ffffd2b 276 size_t size;
MiniTLS 3:eb324ffffd2b 277 buffer_t* p;
MiniTLS 3:eb324ffffd2b 278 size = 0;
MiniTLS 3:eb324ffffd2b 279 p = (buffer_t*) pBuf;
MiniTLS 3:eb324ffffd2b 280 do
MiniTLS 3:eb324ffffd2b 281 {
MiniTLS 3:eb324ffffd2b 282 size += buffer_size(p);
MiniTLS 3:eb324ffffd2b 283 } while( (p = p->next) != NULL );
MiniTLS 3:eb324ffffd2b 284 return size;
MiniTLS 3:eb324ffffd2b 285 }
MiniTLS 3:eb324ffffd2b 286
MiniTLS 3:eb324ffffd2b 287 /** Get buffer chain's total length
MiniTLS 3:eb324ffffd2b 288 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 289 * \return number of valid bytes in the whole chain
MiniTLS 3:eb324ffffd2b 290 */
MiniTLS 3:eb324ffffd2b 291 size_t buffer_total_length(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 292 {
MiniTLS 3:eb324ffffd2b 293 size_t len;
MiniTLS 3:eb324ffffd2b 294 buffer_t* p;
MiniTLS 3:eb324ffffd2b 295 len = 0;
MiniTLS 3:eb324ffffd2b 296 p = pBuf;
MiniTLS 3:eb324ffffd2b 297 do
MiniTLS 3:eb324ffffd2b 298 {
MiniTLS 3:eb324ffffd2b 299 len += buffer_length(p);
MiniTLS 3:eb324ffffd2b 300 } while( (p = p->next) != NULL );
MiniTLS 3:eb324ffffd2b 301 return len;
MiniTLS 3:eb324ffffd2b 302 }
MiniTLS 3:eb324ffffd2b 303
MiniTLS 3:eb324ffffd2b 304 /** Set buffer chain's total length (fill up one buffer and move to the next if needed)
MiniTLS 3:eb324ffffd2b 305 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 306 * \param length total length
MiniTLS 3:eb324ffffd2b 307 */
MiniTLS 3:eb324ffffd2b 308 void buffer_set_total_length(buffer_t* pBuf, size_t length)
MiniTLS 3:eb324ffffd2b 309 {
MiniTLS 3:eb324ffffd2b 310 size_t remaining_len;
MiniTLS 3:eb324ffffd2b 311 buffer_t* p;
MiniTLS 3:eb324ffffd2b 312 remaining_len = length;
MiniTLS 3:eb324ffffd2b 313 p = pBuf;
MiniTLS 3:eb324ffffd2b 314 do
MiniTLS 3:eb324ffffd2b 315 {
MiniTLS 3:eb324ffffd2b 316 buffer_set_length(p, MIN(p->size,remaining_len));
MiniTLS 3:eb324ffffd2b 317 remaining_len -= MIN(p->size,remaining_len);
MiniTLS 3:eb324ffffd2b 318 } while( (p = p->next) != NULL );
MiniTLS 3:eb324ffffd2b 319 }
MiniTLS 3:eb324ffffd2b 320
MiniTLS 3:eb324ffffd2b 321 #if 0
MiniTLS 3:eb324ffffd2b 322 size_t buffer_read_byte(buffer_t* pBuf, uint8_t b)
MiniTLS 3:eb324ffffd2b 323 {
MiniTLS 3:eb324ffffd2b 324
MiniTLS 3:eb324ffffd2b 325 }
MiniTLS 3:eb324ffffd2b 326
MiniTLS 3:eb324ffffd2b 327 size_t buffer_read_bit(buffer_t* pBuf, uint8_t b)
MiniTLS 3:eb324ffffd2b 328 {
MiniTLS 3:eb324ffffd2b 329
MiniTLS 3:eb324ffffd2b 330 }
MiniTLS 3:eb324ffffd2b 331 #endif
MiniTLS 3:eb324ffffd2b 332
MiniTLS 3:eb324ffffd2b 333 #ifdef USE_MALLOC
MiniTLS 3:eb324ffffd2b 334 void buffer_free(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 335 {
MiniTLS 3:eb324ffffd2b 336 free(pBuf->bufdata);
MiniTLS 3:eb324ffffd2b 337 free(pBuf);
MiniTLS 3:eb324ffffd2b 338 }
MiniTLS 3:eb324ffffd2b 339 #endif
MiniTLS 3:eb324ffffd2b 340
MiniTLS 3:eb324ffffd2b 341 /** Dump a buffer's content to stdout (useful for debugging)
MiniTLS 3:eb324ffffd2b 342 * \param pBuf pointer to buffer_t structure
MiniTLS 3:eb324ffffd2b 343 */
MiniTLS 3:eb324ffffd2b 344 void buffer_dump(buffer_t* pBuf)
MiniTLS 3:eb324ffffd2b 345 {
MiniTLS 3:eb324ffffd2b 346 size_t len;
MiniTLS 3:eb324ffffd2b 347 buffer_t* p;
MiniTLS 3:eb324ffffd2b 348 uint8_t* bufdata;
MiniTLS 3:eb324ffffd2b 349 int i;
MiniTLS 3:eb324ffffd2b 350 int j;
MiniTLS 3:eb324ffffd2b 351 p = (buffer_t*) pBuf;
MiniTLS 3:eb324ffffd2b 352 debugx_enter();
MiniTLS 3:eb324ffffd2b 353 do
MiniTLS 3:eb324ffffd2b 354 {
MiniTLS 3:eb324ffffd2b 355 len = buffer_length(p);
MiniTLS 3:eb324ffffd2b 356 bufdata = p->start;
MiniTLS 3:eb324ffffd2b 357 i = 0;
MiniTLS 3:eb324ffffd2b 358 while(i < len)
MiniTLS 3:eb324ffffd2b 359 {
MiniTLS 3:eb324ffffd2b 360 for(j = i; j < MIN(len, i + 16); j++)
MiniTLS 3:eb324ffffd2b 361 {
MiniTLS 3:eb324ffffd2b 362 debugx("%02x ", bufdata[j]);
MiniTLS 3:eb324ffffd2b 363 }
MiniTLS 3:eb324ffffd2b 364 debugx("\r\n");
MiniTLS 3:eb324ffffd2b 365 i = j;
MiniTLS 3:eb324ffffd2b 366 }
MiniTLS 3:eb324ffffd2b 367 if(p->next)
MiniTLS 3:eb324ffffd2b 368 {
MiniTLS 3:eb324ffffd2b 369 debugx("->\r\n");
MiniTLS 3:eb324ffffd2b 370 }
MiniTLS 3:eb324ffffd2b 371 } while( (p = p->next) != NULL );
MiniTLS 3:eb324ffffd2b 372 debugx_leave();
MiniTLS 3:eb324ffffd2b 373 }
MiniTLS 3:eb324ffffd2b 374
MiniTLS 3:eb324ffffd2b 375 /**
MiniTLS 3:eb324ffffd2b 376 * @}
MiniTLS 3:eb324ffffd2b 377 * @}
MiniTLS 3:eb324ffffd2b 378 * */