libcoap  4.2.1
encode.c
Go to the documentation of this file.
1 /* encode.c -- encoding and decoding of CoAP data types
2  *
3  * Copyright (C) 2010,2011 Olaf Bergmann <bergmann@tzi.org>
4  *
5  * This file is part of the CoAP library libcoap. Please see
6  * README for terms of use.
7  */
8 
9 #include "coap_internal.h"
10 
11 /* Carsten suggested this when fls() is not available: */
12 #ifndef HAVE_FLS
13 int coap_fls(unsigned int i) {
14  return coap_flsll(i);
15 }
16 #endif
17 
18 #ifndef HAVE_FLSLL
19 int coap_flsll(long long i)
20 {
21  int n;
22  for (n = 0; i; n++)
23  i >>= 1;
24  return n;
25 }
26 #endif
27 
28 unsigned int
29 coap_decode_var_bytes(const uint8_t *buf,unsigned int len) {
30  unsigned int i, n = 0;
31  for (i = 0; i < len; ++i)
32  n = (n << 8) + buf[i];
33 
34  return n;
35 }
36 
37 unsigned int
38 coap_encode_var_safe(uint8_t *buf, size_t length, unsigned int val) {
39  unsigned int n, i;
40 
41  for (n = 0, i = val; i && n < sizeof(val); ++n)
42  i >>= 8;
43 
44  if (n > length) {
45  assert (n <= length);
46  return 0;
47  }
48  i = n;
49  while (i--) {
50  buf[i] = val & 0xff;
51  val >>= 8;
52  }
53 
54  return n;
55 }
56 
57 uint64_t
58 coap_decode_var_bytes8(const uint8_t *buf,unsigned int len) {
59  unsigned int i;
60  uint64_t n = 0;
61  for (i = 0; i < len; ++i)
62  n = (n << 8) + buf[i];
63 
64  return n;
65 }
66 
67 unsigned int
68 coap_encode_var_safe8(uint8_t *buf, size_t length, uint64_t val) {
69  unsigned int n, i;
70  uint64_t tval = val;
71 
72  for (n = 0; tval && n < sizeof(val); ++n)
73  tval >>= 8;
74 
75  if (n > length) {
76  assert (n <= length);
77  return 0;
78  }
79  i = n;
80  while (i--) {
81  buf[i] = val & 0xff;
82  val >>= 8;
83  }
84 
85  return n;
86 }
int coap_flsll(long long i)
Definition: encode.c:19
unsigned int coap_encode_var_safe(uint8_t *buf, size_t length, unsigned int val)
Encodes multiple-length byte sequences.
Definition: encode.c:38
int coap_fls(unsigned int i)
Definition: encode.c:13
unsigned int coap_decode_var_bytes(const uint8_t *buf, unsigned int len)
Decodes multiple-length byte sequences.
Definition: encode.c:29
uint64_t coap_decode_var_bytes8(const uint8_t *buf, unsigned int len)
Decodes multiple-length byte sequences.
Definition: encode.c:58
unsigned char uint8_t
Definition: uthash.h:79
unsigned int coap_encode_var_safe8(uint8_t *buf, size_t length, uint64_t val)
Encodes multiple-length byte sequences.
Definition: encode.c:68
Pulls together all the internal only header files.