A super trimmed down TLS stack, GPL licensed
Dependents: MiniTLS-HTTPS-Example
MiniTLS - A super trimmed down TLS/SSL Library for embedded devices Author: Donatien Garnier Copyright (C) 2013-2014 AppNearMe Ltd
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
core/buffer_network.c@4:cbaf466d717d, 2014-06-10 (annotated)
- Committer:
- MiniTLS
- Date:
- Tue Jun 10 14:23:09 2014 +0000
- Revision:
- 4:cbaf466d717d
- Parent:
- 3:eb324ffffd2b
Fixes for mbed
Who changed what in which revision?
User | Revision | Line number | New 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_network.c |
MiniTLS | 3:eb324ffffd2b | 21 | * \copyright Copyright (c) AppNearMe Ltd 2013 |
MiniTLS | 3:eb324ffffd2b | 22 | * \author Donatien Garnier |
MiniTLS | 3:eb324ffffd2b | 23 | */ |
MiniTLS | 3:eb324ffffd2b | 24 | |
MiniTLS | 3:eb324ffffd2b | 25 | #include "core/fwk.h" |
MiniTLS | 3:eb324ffffd2b | 26 | |
MiniTLS | 3:eb324ffffd2b | 27 | #include "buffer_network.h" |
MiniTLS | 3:eb324ffffd2b | 28 | |
MiniTLS | 3:eb324ffffd2b | 29 | #define VOID |
MiniTLS | 3:eb324ffffd2b | 30 | #define ENSURE_READ_LENGTH(b, n, r) do{ if(b->end - b->start < n) { return r; } }while(0); |
MiniTLS | 3:eb324ffffd2b | 31 | #define ENSURE_WRITE_LENGTH(b, n) do{ if(b->bufdata + b->size - b->end < n) { return; } }while(0); |
MiniTLS | 3:eb324ffffd2b | 32 | |
MiniTLS | 3:eb324ffffd2b | 33 | uint8_t buffer_nu8_read(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 34 | { |
MiniTLS | 3:eb324ffffd2b | 35 | uint8_t hu8; |
MiniTLS | 3:eb324ffffd2b | 36 | ENSURE_READ_LENGTH(buffer, 1, 0); |
MiniTLS | 3:eb324ffffd2b | 37 | hu8 = buffer->start[0]; |
MiniTLS | 3:eb324ffffd2b | 38 | buffer->start++; |
MiniTLS | 3:eb324ffffd2b | 39 | return hu8; |
MiniTLS | 3:eb324ffffd2b | 40 | } |
MiniTLS | 3:eb324ffffd2b | 41 | |
MiniTLS | 3:eb324ffffd2b | 42 | uint16_t buffer_nu16_read(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 43 | { |
MiniTLS | 3:eb324ffffd2b | 44 | uint16_t hu16; |
MiniTLS | 3:eb324ffffd2b | 45 | ENSURE_READ_LENGTH(buffer, 2, 0); |
MiniTLS | 3:eb324ffffd2b | 46 | hu16 = (buffer->start[0] << 8) | buffer->start[1]; |
MiniTLS | 3:eb324ffffd2b | 47 | buffer->start+=2; |
MiniTLS | 3:eb324ffffd2b | 48 | return hu16; |
MiniTLS | 3:eb324ffffd2b | 49 | } |
MiniTLS | 3:eb324ffffd2b | 50 | |
MiniTLS | 3:eb324ffffd2b | 51 | uint32_t buffer_nu24_read(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 52 | { |
MiniTLS | 3:eb324ffffd2b | 53 | uint32_t hu24; |
MiniTLS | 3:eb324ffffd2b | 54 | ENSURE_READ_LENGTH(buffer, 3, 0); |
MiniTLS | 3:eb324ffffd2b | 55 | hu24 = (buffer->start[0] << 16) | (buffer->start[1] << 8) | buffer->start[2]; |
MiniTLS | 3:eb324ffffd2b | 56 | buffer->start+=3; |
MiniTLS | 3:eb324ffffd2b | 57 | return hu24; |
MiniTLS | 3:eb324ffffd2b | 58 | } |
MiniTLS | 3:eb324ffffd2b | 59 | |
MiniTLS | 3:eb324ffffd2b | 60 | uint32_t buffer_nu32_read(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 61 | { |
MiniTLS | 3:eb324ffffd2b | 62 | uint32_t hu32; |
MiniTLS | 3:eb324ffffd2b | 63 | ENSURE_READ_LENGTH(buffer, 4, 0); |
MiniTLS | 3:eb324ffffd2b | 64 | hu32 = (buffer->start[0] << 24) | (buffer->start[1] << 16) | (buffer->start[2] << 8) | buffer->start[3]; |
MiniTLS | 3:eb324ffffd2b | 65 | buffer->start+=4; |
MiniTLS | 3:eb324ffffd2b | 66 | return hu32; |
MiniTLS | 3:eb324ffffd2b | 67 | } |
MiniTLS | 3:eb324ffffd2b | 68 | |
MiniTLS | 3:eb324ffffd2b | 69 | uint64_t buffer_nu64_read(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 70 | { |
MiniTLS | 3:eb324ffffd2b | 71 | uint64_t hu64; |
MiniTLS | 3:eb324ffffd2b | 72 | ENSURE_READ_LENGTH(buffer, 8, 0); |
MiniTLS | 3:eb324ffffd2b | 73 | hu64 = ((uint64_t)buffer->start[0] << 56) | ((uint64_t)buffer->start[1] << 48) | ((uint64_t)buffer->start[2] << 40) | ((uint64_t)buffer->start[3] << 32) |
MiniTLS | 3:eb324ffffd2b | 74 | | (buffer->start[4] << 24) | (buffer->start[5] << 16) | (buffer->start[6] << 8) | buffer->start[7]; |
MiniTLS | 3:eb324ffffd2b | 75 | buffer->start+=8; |
MiniTLS | 3:eb324ffffd2b | 76 | return hu64; |
MiniTLS | 3:eb324ffffd2b | 77 | } |
MiniTLS | 3:eb324ffffd2b | 78 | |
MiniTLS | 3:eb324ffffd2b | 79 | void buffer_nbytes_read(buffer_t* buffer, uint8_t* data, size_t size) |
MiniTLS | 3:eb324ffffd2b | 80 | { |
MiniTLS | 3:eb324ffffd2b | 81 | ENSURE_READ_LENGTH(buffer, size, VOID); |
MiniTLS | 3:eb324ffffd2b | 82 | memcpy(data, buffer->start, size); |
MiniTLS | 3:eb324ffffd2b | 83 | buffer->start+=size; |
MiniTLS | 3:eb324ffffd2b | 84 | } |
MiniTLS | 3:eb324ffffd2b | 85 | |
MiniTLS | 3:eb324ffffd2b | 86 | void buffer_n_discard(buffer_t* buffer, size_t size) |
MiniTLS | 3:eb324ffffd2b | 87 | { |
MiniTLS | 3:eb324ffffd2b | 88 | ENSURE_READ_LENGTH(buffer, size, VOID); |
MiniTLS | 3:eb324ffffd2b | 89 | buffer->start+=size; |
MiniTLS | 3:eb324ffffd2b | 90 | } |
MiniTLS | 3:eb324ffffd2b | 91 | |
MiniTLS | 3:eb324ffffd2b | 92 | uint8_t* buffer_current_read_position(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 93 | { |
MiniTLS | 3:eb324ffffd2b | 94 | return buffer->start; |
MiniTLS | 3:eb324ffffd2b | 95 | } |
MiniTLS | 3:eb324ffffd2b | 96 | |
MiniTLS | 3:eb324ffffd2b | 97 | size_t buffer_get_read_offset(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 98 | { |
MiniTLS | 3:eb324ffffd2b | 99 | return buffer->start - buffer->bufdata; |
MiniTLS | 3:eb324ffffd2b | 100 | } |
MiniTLS | 3:eb324ffffd2b | 101 | |
MiniTLS | 3:eb324ffffd2b | 102 | void buffer_set_read_offset(buffer_t* buffer, size_t off) |
MiniTLS | 3:eb324ffffd2b | 103 | { |
MiniTLS | 3:eb324ffffd2b | 104 | if( buffer->bufdata + off > buffer->end ) |
MiniTLS | 3:eb324ffffd2b | 105 | { |
MiniTLS | 3:eb324ffffd2b | 106 | return; |
MiniTLS | 3:eb324ffffd2b | 107 | } |
MiniTLS | 3:eb324ffffd2b | 108 | buffer->start = buffer->bufdata + off; |
MiniTLS | 3:eb324ffffd2b | 109 | } |
MiniTLS | 3:eb324ffffd2b | 110 | |
MiniTLS | 3:eb324ffffd2b | 111 | void buffer_nu8_write(buffer_t* buffer, uint8_t hu8) |
MiniTLS | 3:eb324ffffd2b | 112 | { |
MiniTLS | 3:eb324ffffd2b | 113 | ENSURE_WRITE_LENGTH(buffer, 1); |
MiniTLS | 3:eb324ffffd2b | 114 | buffer->end[0] = hu8; |
MiniTLS | 3:eb324ffffd2b | 115 | buffer->end++; |
MiniTLS | 3:eb324ffffd2b | 116 | } |
MiniTLS | 3:eb324ffffd2b | 117 | |
MiniTLS | 3:eb324ffffd2b | 118 | void buffer_nu16_write(buffer_t* buffer, uint16_t hu16) |
MiniTLS | 3:eb324ffffd2b | 119 | { |
MiniTLS | 3:eb324ffffd2b | 120 | ENSURE_WRITE_LENGTH(buffer, 2); |
MiniTLS | 3:eb324ffffd2b | 121 | buffer->end[0] = (hu16 >> 8) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 122 | buffer->end[1] = hu16 & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 123 | buffer->end+=2; |
MiniTLS | 3:eb324ffffd2b | 124 | } |
MiniTLS | 3:eb324ffffd2b | 125 | |
MiniTLS | 3:eb324ffffd2b | 126 | void buffer_nu24_write(buffer_t* buffer, uint32_t hu24) |
MiniTLS | 3:eb324ffffd2b | 127 | { |
MiniTLS | 3:eb324ffffd2b | 128 | ENSURE_WRITE_LENGTH(buffer, 3); |
MiniTLS | 3:eb324ffffd2b | 129 | buffer->end[0] = (hu24 >> 16) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 130 | buffer->end[1] = (hu24 >> 8) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 131 | buffer->end[2] = hu24 & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 132 | buffer->end+=3; |
MiniTLS | 3:eb324ffffd2b | 133 | } |
MiniTLS | 3:eb324ffffd2b | 134 | |
MiniTLS | 3:eb324ffffd2b | 135 | void buffer_nu32_write(buffer_t* buffer, uint32_t hu32) |
MiniTLS | 3:eb324ffffd2b | 136 | { |
MiniTLS | 3:eb324ffffd2b | 137 | ENSURE_WRITE_LENGTH(buffer, 4); |
MiniTLS | 3:eb324ffffd2b | 138 | buffer->end[0] = (hu32 >> 24) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 139 | buffer->end[1] = (hu32 >> 16) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 140 | buffer->end[2] = (hu32 >> 8) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 141 | buffer->end[3] = hu32 & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 142 | buffer->end+=4; |
MiniTLS | 3:eb324ffffd2b | 143 | } |
MiniTLS | 3:eb324ffffd2b | 144 | |
MiniTLS | 3:eb324ffffd2b | 145 | void buffer_nu64_write(buffer_t* buffer, uint64_t hu64) |
MiniTLS | 3:eb324ffffd2b | 146 | { |
MiniTLS | 3:eb324ffffd2b | 147 | ENSURE_WRITE_LENGTH(buffer, 8); |
MiniTLS | 3:eb324ffffd2b | 148 | buffer->end[0] = (hu64 >> 56) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 149 | buffer->end[1] = (hu64 >> 48) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 150 | buffer->end[2] = (hu64 >> 40) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 151 | buffer->end[3] = (hu64 >> 32) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 152 | buffer->end[4] = (hu64 >> 24) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 153 | buffer->end[5] = (hu64 >> 16) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 154 | buffer->end[6] = (hu64 >> 8) & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 155 | buffer->end[7] = hu64 & 0xFF; |
MiniTLS | 3:eb324ffffd2b | 156 | buffer->end+=8; |
MiniTLS | 3:eb324ffffd2b | 157 | } |
MiniTLS | 3:eb324ffffd2b | 158 | |
MiniTLS | 3:eb324ffffd2b | 159 | void buffer_nbytes_write(buffer_t* buffer, const uint8_t* data, size_t size) |
MiniTLS | 3:eb324ffffd2b | 160 | { |
MiniTLS | 3:eb324ffffd2b | 161 | ENSURE_WRITE_LENGTH(buffer, size); |
MiniTLS | 3:eb324ffffd2b | 162 | memcpy(buffer->end, data, size); |
MiniTLS | 3:eb324ffffd2b | 163 | buffer->end+=size; |
MiniTLS | 3:eb324ffffd2b | 164 | } |
MiniTLS | 3:eb324ffffd2b | 165 | |
MiniTLS | 3:eb324ffffd2b | 166 | void buffer_n_skip(buffer_t* buffer, size_t size) |
MiniTLS | 3:eb324ffffd2b | 167 | { |
MiniTLS | 3:eb324ffffd2b | 168 | ENSURE_WRITE_LENGTH(buffer, size); |
MiniTLS | 3:eb324ffffd2b | 169 | buffer->end+=size; |
MiniTLS | 3:eb324ffffd2b | 170 | } |
MiniTLS | 3:eb324ffffd2b | 171 | |
MiniTLS | 3:eb324ffffd2b | 172 | uint8_t* buffer_current_write_position(buffer_t* buffer) |
MiniTLS | 3:eb324ffffd2b | 173 | { |
MiniTLS | 3:eb324ffffd2b | 174 | return buffer->end; |
MiniTLS | 3:eb324ffffd2b | 175 | } |